北京工业大学信号处理工程应用训练.doc | 您所在的位置:网站首页 › gpdwin3和win2对比 › 北京工业大学信号处理工程应用训练.doc |
北京工业大学信号处理工程应用训练.doc 《北京工业大学信号处理工程应用训练.doc》由会员分享,可在线阅读,更多相关《北京工业大学信号处理工程应用训练.doc(70页珍藏版)》请在冰点文库上搜索。 北京工业大学 专业: 通信工程 学生姓名: 刘莹莹 指导教师: 席大林 完成时间: 2023年3月8日 通信系统工程应用训练报告 目录 训练十一DFT性质研究 1 训练十二DFT及抽样定理研究 13 训练十三数字滤波器制作 20 训练十四IIR数字滤波器设计与实现 25 训练十五线性卷积计算 46 训练十六FIR数字滤波器设计与实现 55 训练十一DFT性质研究 验证dft函数正确性 设置原始输入信号为x[8]={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0}},将输入信号x[8]进行DFT正变换,dft(X,x,8,1),输出保存在X[8],如下: 可以看到,输入信号x(n)已经变换到频域X(k),且仍为8位。 再对X[8]进行DFT反变换,dft(x,X,8,-1),重新得到x[8],观察得到的输出与原始输入数据是否相同。 结果如下: 可以看到,输出的x[8]取值仍为x[8]={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0}},证明经过DFT正反变换后,信号能够恢复原始信号。 根据帕塞瓦尔定理,应有时域、频域总能量相等: 。 经过计算,时域、频域能量和分别为,证明时域、频域能量和相同,符合帕塞瓦尔定理。 综上,证明DFT变换正确。 A、补0效应研究 原数组: x[8]={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,},{8,0}} 示例程序中补0后数组为: x2[16]={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}} 补0方式 我使用的补0方式为: for(i=8;i 补0后数组为: x2[13]={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0},{0,0},{0,0},{0,0},{0,0},{0,0}} 结果分析与图 在时域中,信号长度增加,由于所增加的项均为零,波形仍与未补0时相同 未补零时的信号时域图 补5个零后的信号时域图补8个零后的信号时域图 经过DFT变换后,X(k)长度也会随着x(n)长度的增加而增加,且增加的值非零 未在末端补零时,信号频谱图 在末端补5个零时,信号频谱图在末端补8个零时,信号频谱图 可以看到,经过补0,经过DFT变换的频谱与未补零时形状基本相同,只是在长度上进行扩展,且补零数量越多,扩展越长。 可以理解为经过补0效应,增加了频域采样频率,但是由于信号未增加新的信息,因此不能提高物理分辨率。 在能量上,补5/8个零时,信号能量时域、频域能量和如下: 时域能量和、频域能量和始终相等,符合帕塞瓦尔定理,且能量与未插值时的相同。 B、插值效应研究 原数组: x[8]={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,},{8,0}} 示例程序中插值后数组为: x3[16]={{1,0},{8,0},{2,0},{7,0},{3,0},{6,0},{4,0},{5,0},{5,0},{4,0},{6,0},{3,0},{7,0},{2,0},{8,0},{1,0}} 插值方式 我使用的插值方式为: for(i=0;i 插值后数组为: x[16]={{1,0},{3,0},{2,0},{4,0},{3,0},{5,0},{4,0},{6,0},{5,0},{7,0},{6,0},{8,0},{7,0},{9,0},{8,0},{10,0}} 结果分析与图 (1)在示例程序中,在x[8]={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0}}中反向插入原序列,使原序列变为x3[16]={{1,0},{8,0},{2,0},{7,0},{3,0},{6,0},{4,0},{5,0},{5,0},{4,0},{6,0},{3,0},{7,0},{2,0},{8,0},{1,0}},再进行DFT变换,观察频谱,对比时域、频域能量和。 反向插值后,时域、频域图 可以看到,反向插值后,信号频谱有了很大的直流分量,且近乎左右对称。 从三维频谱图上可以看出,高频、低频部分实际上是共轭反对称: 反向插值后,三维频域图 。 符合帕塞瓦尔定理,且能量是未插值时的2倍。 (2)在x[8]={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0}}中插入序列{{3,0},{4,0},{5,0},{6,0},{7,0},{8,0},{9,0},{10,0}},使原序列变为x3[16]={{1,0},{3,0},{2,0},{4,0},{3,0},{5,0},{4,0},{6,0},{5,0},{7,0},{6,0},{8,0},{7,0},{9,0},{8,0},{10,0}},再进行DFT变换,观察频谱,对比时域、频域能量和。 插值后,时域、频域图 可以看到,插值后,信号频谱有了很大的直流分量,且近乎左右对称。 ,符合帕塞瓦尔定理。 (3)在x[8]={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0}}中正向插入原序列,使原序列分别变为x2[16]={{1,0},{1,0},{2,0},{2,0},{3,0},{3,0},{4,0},{4,0},{5,0},{5,0},{6,0},{6,0},{7,0},{7,0},{8,0},{8,0}},再进行DFT变换,观察频谱,对比时域、频域能量和。 正向插值后,时域、频域图 可以看到,正向插值后,信号频谱有了很大的直流分量,且近乎左右对称。 。 符合帕塞瓦尔定理,且能量是未插值时的2倍。 C、插0效应研究 原数组: x[8]={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,},{8,0}} 示例程序中插0后数组为: x4[16]={{1,0},{0,0},{2,0},{0,0},{3,0},{0,0},{4,0},{0,0},{5,0},{0,0},{6,0},{0,0},{7,0},{0,0},{8,0},{0,0}} 插0方式 我使用的插0方式为: for(i=0;i 插0后数组为: x4[12]={{1,0},{2,0},{0,0},{3,0},{4,0},{0,0},{5,0},{6,0},{0,0},{7,0},{8,0},{0,0}} 结果分析与图 (1)在示例程序中,在x[8]={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0}}中,每隔一点,插入1个0值,使原序列分别变为x1[16]={{1,0},{0,0},{2,0},{0,0},{3,0},{0,0},{4,0},{0,0},{5,0},{0,0},{6,0},{0,0},{7,0},{0,0},{8,0},{0,0}},再进行DFT变换,观察频谱,对比时域、频域能量和。 插0前,时域、频域图 插0后,时域、频域图 可以看到,插0后的频谱是对原始信号频谱的周期延拓。 画出三维图像,可以更直观地看出周期延拓关系: 未插入零/插入一个零后的三维频谱图 通过对插零后图像进行DFT运算,可以证明插零后的DFT是原信号DFT的周期延拓。 。 符合帕塞瓦尔定理,且能量与未插值时的相同。 (2)在x[8]={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0}}中,每隔两点,插入1个0值,使原序列变为 x4[16]={{1,0},{2,0},{0,0},{3,0},{4,0},{0,0},{5,0},{6,0},{0,0},{7,0},{8,0},{0,0}},再进行DFT变换,观察频谱,对比时域、频域能量和。 插0后,时域、频域图 符合帕塞瓦尔定理 源程序: //11yy.cpp: Definestheentrypointfortheconsoleapplication. // #include"stdafx.h" #include"D: \xhclgcyy\x_math.cpp" #include"D: \xhclgcyy\x_graph.cpp" voidplotgri2(COLORREFgridcolor,COLORREFlinecolor,COMPLEXp[],intN) { inti; HPENpen1=CreatePen(PS_SOLID,1,gridcolor),oldpen=(HPEN)SelectObject(win3.hdc,pen1); HPENpen2=CreatePen(PS_SOLID,1,linecolor); for(i=0;i SelectObject(win3.hdc,pen2); moveto2(0,p[0].r); for(i=0;i SelectObject(win2.hdc,oldpen); DeleteObject(pen1); DeleteObject(pen2); } voidplotgri3(COLORREFgridcolor,COLORREFlinecolor,COMPLEXp[],intN) { inti; HPENpen1=CreatePen(PS_SOLID,1,gridcolor),oldpen=(HPEN)SelectObject(win3.hdc,pen1); HPENpen2=CreatePen(PS_SOLID,1,linecolor); for(i=0;i SelectObject(win3.hdc,pen2); moveto3(0,p[0].r,p[0].i); for(i=0;i SelectObject(win2.hdc,oldpen); DeleteObject(pen1); DeleteObject(pen2); } voidmain() { inti; doublesumT,sumF; COMPLEXx[8],//{{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,},{8,0}} X[8], x2[13],//={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0},{0,0},{0,0},{0,0},{0,0},{0,0}} X2[16], x3[16],//={{{1,0},{1,0},{2,0},{2,0},{3,0},{3,0},{4,0},{4,0},{5,0},{5,0},{6,0},{6,0},{7,0},{7,0},{8,0},{8,0}}} X3[16], x4[12],//={{1,0},{2,0},{0,0},{3,0},{4,0},{0,0},{5,0},{6,0},{0,0},{7,0},{8,0},{0,0}} X4[16]; //给待变换的复数数组赋值: for(i=0;i for(i=0;i for(i=8;i for(i=0;i for(i=0;i //第1步: 验证dft函数正确性 dft(X,x,8,1); for(i=0;i getch(); dft(x,X,8,-1); for(i=0;i getch(); for(sumT=0,sumF=0,i=0;i sumT=sumT+x[i].r*x[i].r; sumF=sumF+X[i].r*X[i].r+X[i].i*X[i].i;} printf("时域能量和=%f,频域能量和=%f\n",sumT,sumF/8.0); window2("函数图形显示",-20,40,20,-20,"t","f(t)"); xy2(BLUE); plotgri2(BLUE,RED,X,8); getch(); frame2(win2.xstr,win2.ystr); xy2(BLUE); plotgri2(BLUE,RED,x,8); getch(); window3("周期信号频谱图",-1,-12,-12,20,12,12,"N","r","i"); xyz3(BLUE); plotgri3(BLUE,RED,X,8); getch(); frame3(); xyz3(BLUE); plotgri3(BLUE,RED,x,8); getch(); //第2步: 补0效应 dft(X2,x2,13,1); for(i=0;i getch(); dft(x2,X2,13,-1); for(i=0;i getch(); for(sumT=0,sumF=0,i=0;i sumT=sumT+x2[i].r*x2[i].r; sumF=sumF+X2[i].r*X2[i].r+X2[i].i*X2[i].i;} printf("时域能量和=%f,频域能量和=%f\n",sumT,sumF/16.0); window2("函数图形显示",-20,40,20,-20,"t","f(t)"); xy2(BLUE); plotgri2(BLUE,RED,X2,13); getch(); frame2(win2.xstr,win2.ystr); xy2(BLUE); plotgri2(BLUE,RED,x2,13); getch(); window3("周期信号频谱图",-1,-12,-12,20,12,12,"N","r","i"); xyz3(BLUE); plotgri3(BLUE,RED,X,13); getch(); frame3(); xyz3(BLUE); plotgri3(BLUE,RED,x,13); getch(); //第3步: 插值效应 dft(X3,x3,16,1); for(i=0;i getch(); dft(x3,X3,16,-1); for(i=0;i getch(); for(sumT=0,sumF=0,i=0;i sumT=sumT+x3[i].r*x3[i].r; sumF=sumF+X3[i].r*X3[i].r+X3[i].i*X3[i].i;} printf("时域能量和=%f,频域能量和=%f\n",sumT,sumF/16.0); window2("函数图形显示",-20,20,20,-20,"t","f(t)"); xy2(BLUE); plotgri2(BLUE,RED,X3,16); getch(); frame2(win2.xstr,win2.ystr); xy2(BLUE); plotgri2(BLUE,RED,x3,16); getch(); window3("周期信号频谱图",-1,-12,-12,20,12,12,"N","r","i"); xyz3(BLUE); plotgri3(BLUE,RED,X3,16); getch(); frame3(); xyz3(BLUE); plotgri3(BLUE,RED,x3,16); getch(); //第4步: 插0效应 dft(X4,x4,12,1); for(i=0;i getch(); dft(x4,X4,12,-1); for(i=0;i getch(); for(sumT=0,sumF=0,i=0;i sumT=sumT+x4[i].r*x4[i].r; sumF=sumF+X4[i].r*X4[i].r+X4[i].i*X4[i].i;} printf("时域总和=%f,频域总和=%f\n",sumT,sumF/12.0); window2("函数图形显示",-20,40,20,-20,"t","f(t)"); xy2(BLUE); plotgri2(BLUE,RED,X4,12); getch(); frame2(win2.xstr,win2.ystr); xy2(BLUE); plotgri2(BLUE,RED,x4,12); getch(); window3("周期信号频谱图",-1,-12,-12,20,12,12,"N","r","i"); xyz3(BLUE); plotgri3(BLUE,RED,X4,12); getch(); frame3(); xyz3(BLUE); plotgri3(BLUE,RED,x4,12); getch(); } 训练十二DFT及抽样定理研究 D、给定单频信号抽样 1.对给定信号x(t)=sin(2πfct),fc==50,N=264进行抽样,抽样频率分布为100Hz,110Hz,200Hz,230Hz,250Hz 。 单频信号抽样示意图 关于能量泄露的问题: 1.计算时域能量、频域能量。 观察是否满足Et=Ef=2|X50|2/N,若抽样频率正确,即无泄漏。 fs=110Hzfs=200Hz Fs=230Hzfs=250Hz 抽样定理指出,若信号x(t)的最高频率为fc,当抽样频率fs |
CopyRight 2018-2019 实验室设备网 版权所有 |