版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
./北京工业大学北京工业大学专业:专业:通信工程学生姓名:刘莹莹指导教师:席大林完成时间:Time\@"yyyy年M月d日"2020年6月10日通信系统工程应用训练报告.目录TOC\o"1-3"\h\u9084训练十一DFT性质研究129114训练十二DFT及抽样定理研究1314497训练十三数字滤波器制作2027638训练十四IIR数字滤波器设计与实现258973训练十五线性卷积计算463830训练十六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<13;i++>x2[i]=COMPLEX<0,0>;补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<16;i=i+2>{x3[i]=COMPLEX<1+i/2,0>;x3[i+1]=COMPLEX<i*0.5+2.5,0>;}插值后数组为: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<16;i=i+3>{x4[i]=COMPLEX<1+i/2,0>;x4[i+1]=COMPLEX<2+i/2,0>;x4[i+2]=COMPLEX<0,0>;}插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}}结果分析与图在示例程序中,在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的周期延拓。。符合帕塞瓦尔定理,且能量与未插值时的相同。在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<N;i++>line2<i,0,i,abs<p[i]>>;SelectObject<win3.hdc,pen2>;moveto2<0,p[0].r>;for<i=0;i<N;i++>lineto2<i,abs<p[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<N;i++>line3<i,0,0,i,p[i].r,p[i].i>;SelectObject<win3.hdc,pen2>;moveto3<0,p[0].r,p[0].i>;for<i=0;i<N;i++>lineto3<i,p[i].r,p[i].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<8;i++>{x[i]=COMPLEX<i+1,0>;X[i]=COMPLEX<0,0>;}for<i=0;i<8;i++>x2[i]=COMPLEX<i+1,0>;for<i=8;i<13;i++>x2[i]=COMPLEX<0,0>;for<i=0;i<16;i=i+2>{x3[i]=COMPLEX<1+i/2,0>;x3[i+1]=COMPLEX<1+i/2,0>;}for<i=0;i<16;i=i+3>{x4[i]=COMPLEX<1+i/2,0>;x4[i+1]=COMPLEX<2+i/2,0>;x4[i+2]=COMPLEX<0,0>;}//第1步:验证dft函数正确性dft<X,x,8,1>;for<i=0;i<8;i++>printf<"X[%d]=%f+%f\n",i,X[i].r,X[i].i>;getch<>;dft<x,X,8,-1>;for<i=0;i<8;i++>printf<"x[%d]=%f+%f\n",i,x[i].r,x[i].i>;getch<>;for<sumT=0,sumF=0,i=0;i<8;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<13;i++>printf<"X2[%d]=%f+%f\n",i,X2[i].r,X2[i].i>;getch<>;dft<x2,X2,13,-1>;for<i=0;i<13;i++>printf<"x2[%d]=%f+%f\n",i,x2[i].r,x2[i].i>;getch<>;for<sumT=0,sumF=0,i=0;i<13;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<16;i++>printf<"X3[%d]=%f+%f\n",i,X3[i].r,X3[i].i>;getch<>;dft<x3,X3,16,-1>;for<i=0;i<16;i++>printf<"x3[%d]=%f+%f\n",i,x3[i].r,x3[i].i>;getch<>;for<sumT=0,sumF=0,i=0;i<16;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<12;i++>printf<"X4[%d]=%f+%f\n",i,X4[i].r,X4[i].i>;getch<>;dft<x4,X4,12,-1>;for<i=0;i<12;i++>printf<"x4[%d]=%f+%f\n",i,x4[i].r,x4[i].i>;getch<>;for<sumT=0,sumF=0,i=0;i<12;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=200HzFs=230Hzfs=250Hz抽样定理指出,若信号x<t>的最高频率为fc,当抽样频率fs 2fc时,可由抽样信号x<nTs>完全恢复原信号x<t>。本题中,fs≥100Hz,符合采样定理条件。但在fs=100Hz时,由于采样点均是原信号x<t>取值为0的点,导致采样信号值始终为0,所以时域能量、频域能量始终为0。其他采样频率时,时域、频域能量始终相等,约为132,符合帕塞瓦尔定理。实验结果:抽样频率为110Hz,200Hz时,没有发生能量泄漏,抽样频率为230Hz,250Hz时,发生能量泄漏。计算是否发生能量泄漏的依据是,计算频率为原信号频率fc=50Hz处的频谱能量,E=2|X50|2/N。而经过长度为N的DFT变换,对应f=50Hz的k点的计算公式为k=N*fc/fs。当抽样频率为110Hz和200Hz时,k分别等于120和66,因此只需计算第120点和第66点的能量,就可以计算X50处的能量,不会发生泄漏。但当抽样频率为230Hz,250Hz时,k不能取到整数值,只能取到近似值,能量会泄漏到周围频率上,会产生能量泄漏,这种泄露是由于非整周期采样引起的。2.对x<t>=sin<2πfct>,fc==50进行fs=250hz的抽样,然后分别进行250点的DFT和补零至256点的FFT,并计算时域能量、频域能量。观察是否满足Et=Ef=2|X50|2/N,若抽样频率正确,则无泄漏。250点DFT256点FFT由实验结果可知,经过DFT、FFT前后均符合帕塞瓦尔定理,即时域、频域能量一致,均为原始信号能量125。但在用DFT计算X50处的能量时,计算结果与原始信号能量相同,即未发生能量泄漏;在用FFT计算X50处的能量时,计算结果低于原始信号能量,即发生了能量泄漏。因为取f=50Hz所对应的k值时,k=N*fc/fs。对250点DFT,k=250*50/250=50,计算k=50这点的能量即可;对256点FFT,k=256*50/250,不能取到整数,因此能量会泄漏到周围的频率区间,即发生能量泄漏。250点DFT256点FFT由图可知,DFT在f=50Hz<k=50>的能量即是频谱上的全部能量。而FFT由于补零之后,k不能取到整数,能量一定会泄漏到周围的频率区间,f=50Hz的能量并不是频谱上的全部能量,而是有其他频率分量,所以只计算f=50Hz处的能量时,会低于频谱上的全部能量。结论:所以对于DFT,只要满足k=N*fc/fs可以取到整数,即可实现无能量泄漏。对于FFT,因为需要补零,所以能量一定会泄漏。E、画出单频信号抽样后的频谱图F、标出频谱图上的单频信号位置Fs=110Hz未发生能量泄漏Fs=200Hz未发生能量泄漏F=50Hz对应k=120F=50Hz对应k=66fs=230Hz发生能量泄漏fs=250Hz发生能量泄漏F=50Hz无法对应整数kF=50Hz无法对应整数k对X<k>信号进行反变换,再次得到x<n>,与原始信号相对比,发现无论这五种抽样频率下,均能恢复原始信号。说明采样频率fs大于信号最高频率fc时,能不失真地恢复原信号,符合帕塞瓦尔定理。源程序://12yy.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include"D:\xhclgcyy\x_math.cpp"#include"D:\xhclgcyy\x_graph.cpp"COMPLEXx[264],Y[264],X50,X[264],x1[264];//{{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,},{8,0}},X[]做完DFT之后的,Y[]是取模之后的DFT,x1[]为反DFTvoidplotgri2<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<N;i++>line2<i,0,i,p[i].r>;SelectObject<win3.hdc,pen2>;for<i=0;i<N;i++>{ moveto2<i,0>; lineto2<i,p[i].r>;}SelectObject<win2.hdc,oldpen>;DeleteObject<pen1>;DeleteObject<pen2>;}voidchouyang<intN,doublefs,intfc>//对正弦信号进行抽样{ inti; doublet=0,dt; dt=1.0/fs; for<i=0;i<N;i++> { t=i*dt; x[i]=COMPLEX<sin<2*M_PI*fc*t>,0>; }}voidmain<void>{ intN=264;//数据长度 inti,fc=50,fs=110,down,up;//fs可变fs=100hz;fs=110hz;fs=200hz;fs=230hz;fs=250hz doublesumT,sumF,dt,aa,bb,bb1,EX50; for<i=0;i<N;i++> X[i]=COMPLEX<0,0>; chouyang<N,fs,fc>;//给正弦波抽样 dft<X,x,264,1>;//输出X[],输入x[],264个数,1:正变换window2<"函数图形显示",-10,60,10,-10,"i","X[i]">;//抽样出来的x[n]显示window2<"函数图形显示",-1,2,264,-2,"i","x[i]">;xy2<GREEN>;//画xy轴。plotgri2<BLUE,RED,x,264>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。getch<>;frame2<>;//对做完DFT的X[n]取模之后显示for<i=0;i<264;i++>Y[i]=abs<X[i]>;window2<"函数图形显示",-1,100,264,-1,"i","X[i]">;xy2<GREEN>;//画xy轴。plotgri2<BLUE,BLUE,Y,264>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。getch<>;frame2<>;for<sumT=0,sumF=0,i=0;i<264;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/264.0>;//否有频谱泄露aa=50*N/fs;//aa:50HZ处对应的点;down=floor<aa>;//向下取整 X50=Y[down]; EX50=pow<abs<X50>,2>*2/N; printf<"X50运算%f\n",EX50>;getchar<>;//求反DFT看是否可以恢复出原函数:dft<x1,X,264,-1>;window2<"函数图形显示",-1,2,264,-2,"i","x1[i]">;xy2<GREEN >;//画xy轴。plotgri2<BLUE,RED,x1,264>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。getch<>;frame2<>;//验证DFT及其频谱泄露情况N=250;fs=250;for<i=0;i<N;i++>X[i]=COMPLEX<0,0>;chouyang<N,fs,fc>;//对信号进行抽样,抽样频率为250hz,抽样点数为250点window2<"函数图形显示",-1,2,250,-2,"i","x[i]">;xy2<RED>;//画xy轴。plotgri2<BLUE,BLUE,x,250>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。getch<>;frame2<>;dft<X,x,250,1>;//做250点DFTfor<i=0;i<250;i++>Y[i]=abs<X[i]>;window2<"函数图形显示",-1,100,250,-1,"i","X[i]">;xy2<RED>;//画xy轴。plotgri2<BLUE,BLUE,Y,250>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。getch<>;frame2<>;for<sumT=0,sumF=0,i=0;i<250;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/250.0>;//看是否有泄漏aa=50*N/fs;//aa:50HZ处对应的点;down=floor<aa>;//向下取整 X50=Y[down]; EX50=pow<abs<X50>,2>*2/N; printf<"X50=%2.f\n",X50>; printf<"X50运算%f\n",EX50>;getchar<>;//验证反DFT可不可以恢复原信号dft<x,X,250,-1>;window2<"函数图形显示",-1,1,250,-1,"i","X[i]">;xy2<RED>;//画xy轴。plotgri2<BLUE,BLUE,x,250>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。getch<>;frame2<>;//验证FFTN=256;fs=250;chouyang<N,fs,fc>;for<i=250;i<N;i++>{ x[i]=COMPLEX<0,0>;}for<sumT=0,sumF=0,i=0;i<256;i++>sumT=sumT+x[i].r*x[i].r;//求时域能量window2<"函数图形显示",-1,1,256,-1,"i","x[i]">;xy2<RED>;//画xy轴。plotgri2<BLUE,BLUE,x,256>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。getch<>;frame2<>;fft<x,256,1>;for<i=0;i<256;i++>Y[i]=abs<x[i]>;window2<"函数图形显示",-1,100,256,-100,"i","X[i]">;xy2<RED>;//画xy轴。plotgri2<BLUE,BLUE,Y,256>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。getch<>;frame2<>;for<sumF=0,i=0;i<256;i++>sumF=sumF+x[i].r*x[i].r+x[i].i*x[i].i;printf<"时域能量和=%f,频域能量和=%f\n",sumT,sumF/256.0>;aa=50*N/fs;//aa:50HZ处对应的点;down=floor<aa>;//向下取整 X50=Y[down]; EX50=pow<abs<X50>,2>*2/N; printf<"X50=%2.f\n",X50>; printf<"X50运算%f\n",EX50>; getchar<>;}.训练十三数字滤波器制作1﹑设一阶数字滤波器的系统函数为:系统输入为以下三种数字序列:〔1矩形序列:〔2三角序列:〔3正弦序列:2﹑设二阶数字滤波器的系统函数为:其输入为单位阶跃信号3、编写通用数字滤波器函数工具。通用数字滤波器函数工具程序:voidIIRT<COMPLEXinput[],COMPLEXoutput[],doublea[],doubleb[],intN,intNe>//N为数据 点数,Ne为0状态最大负输入,a[]为Y输出的系数,b[]为x输入的系数;{ inti,n; for<n=0;n<N;n++> { for<i=1;i<Ne;i++> { if<n<i>output[n]+=a[i]*0;//零状态输入所有负值都为0 else output[n]=output[n]+a[i]*output[<n-i>]; } for<i=0;i<Ne;i++> { if<n<i>output[n]+=b[i]*0; else output[n]=output[n]+b[i]*input[<n-i>]; } }}源程序://13yy.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include"D:\xhclgcyy\x_math.cpp"#include"D:\xhclgcyy\x_graph.cpp"doubleY[40];voidplotgri2<COLORREFgridcolor,COLORREFlinecolor,doublep[],intN>{ inti; HPENpen1=CreatePen<PS_SOLID,1,gridcolor>,oldpen=<HPEN>SelectObject<win3.hdc,pen1>; HPENpen2=CreatePen<PS_SOLID,1,linecolor>; for<i=0;i<N;i++>line2<i,0,i,p[i]>; SelectObject<win2.hdc,pen2>; moveto2<0,p[0]>; SelectObject<win2.hdc,oldpen>; DeleteObject<pen1>; for<i=0;i<N;i++>lineto2<i,p[i]>; DeleteObject<pen2>;}voidf1<doublea0,doubleb0,doubleb1,doubleX[],intN>//通用一阶数字滤波器函数工具{ intn; for<n=0;n<N;n++> Y[n]=0; for<n=0;n<N;n++> Y[n]=b0*X[n]+b1*X[n-1]+a0*Y[n-1];}voidf2<doublea0,doublea1,doubleb0,doubleb1,doubleb2,doubleX[],intN>//通用二阶数字滤波器函数工具{ intn; for<n=0;n<N;n++> Y[n]=0; for<n=0;n<N;n++> Y[n]=b0*X[n]+b1*X[n-1]+b2*X[n-2]+a0*Y[n-1]+a1*Y[n-2];}intmain<intargc,char*argv[]>{ inti,n; doubleX1[40],X2[40],X3[40],X4[40]; ////////ONE//////// X1[-1]=0; for<i=0;i<12;i++>{X1[i]=1;} for<i=12;i<38;i++>{X1[i]=0;} window2<"X1",-10,-1,30,5,"x","y">; xy2<BLUE>; plotgri2<GREEN,RED,X1,30>; getch<>; f1<0.4,1,0.2,X1,40>; plotgri2<GREEN,BLUE,Y,30>; getch<>; ////////TWO//////// X2[-1]=0; for<i=0;i<6;i++>{X2[i]=<double>i/5;} for<i=6;i<11;i++>{X2[i]=<10-<double>i>/5;} for<i=11;i<38;i++>{X2[i]=0;} window2<"X2",-10,-1,20,5,"x","y">; xy2<BLUE>; plotgri2<GREEN,RED,X2,30>; getch<>; f1<0.4,1,0.2,X2,40>; plotgri2<GREEN,BLUE,Y,30>; getch<>; ////////THREE//////// X3[-1]=0; for<i=0;i<18;i++>{X3[i]=sin<<double>i*6.28/18>;} for<i=18;i<38;i++>{X3[i]=0;} window2<"X3",-1,-5,30,5,"x","y">; xy2<BLUE>; plotgri2<GREEN,RED,X3,30>; getch<>; f1<0.4,1,0.2,X3,40>; plotgri2<GREEN,BLUE,Y,30>; getch<>; ////////FOUR//////// X4[0]=1; for<i=-19;i<0;i++>{X4[i]=0;} for<i=1;i<40;i++>{X4[i]=0;} window2<"X4",-1,-2,20,5,"x","y">; xy2<BLUE>; plotgri2<GREEN,RED,X4,30>; getch<>; f2<1.5,-0.5,0,1,0,X4,40>; plotgri2<GREEN,BLUE,Y,30>; getch<>; return0;}训练十四IIR数字滤波器设计与实现根据实验指导书要求:<1>令:f1=300hz,f2=400hz,fs=1000hz,1=3dB,2=35dB。设计LPDF<2>令:f1=300hz,f2=400hz,fs=1000hz,1=3dB,2=35dB。设计HPDF<3>令:f1=200hz,f2=300hz,f3=400hz,f4=500hz,fs=2000hz,1=3dB,2=40dB。设计BFDF参数同3,设计BSDF程序:voidmain<>{IIR<1,3.0,18.0,2000.,200.,300.,400.,500.>;IIR<2,3.0,18.0,2000.,200.,300.,400.,500.>;IIR<3,3.0,18.0,2000.,200.,300.,400.,500.>;IIR<4,3.0,18.0,2000.,200.,300.,400.,500.>;IIRLv<1,3.0,18.0,2000.,200.,300.,400.,500.>;//对方波进行低通滤波〔自定义函数;IIRLv2<2,3.0,18.0,2000.,300.,400.,500.,600.>;//对多次正弦谐波进行高通滤波〔自定义函数;}G、自定指标,并按指标设计,按格式打印出系统H数组转移函数H数组,级连数L低通f1=300hz,f2=400hz,fs=1000hz,1=3dB,2=35dB。〔2高通f1=300hz,f2=400hz,fs=1000hz,1=3dB,2=35dB。带通f1=200hz,f2=300hz,f3=400hz,f4=500hz,fs=2000hz,1=3dB,2=40dB。带阻f1=200hz,f2=300hz,f3=400hz,f4=500hz,fs=2000hz,1=3dB,2=40dB。H、对H数组分母常数系数归一voidJILian_<void>//实现L级级联{ inti,j,n; window2<"函数图形显示",-1,2,200,-2,"i","x[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,x,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>; for<i=0;i<=L-1;i++> { a[0]=0;for<j=1;j<5;j++>//归一化 {a[j]=-H[i][1][j]/H[i][1][0];}//y[n]系数归一 for<j=0;j<5;j++> {b0[j]=H[i][0][j]/H[i][1][0];}//x[n]系数归一 IIRT<x,y,a,b0,N,5>; for<n=0;n<N;n++> x[n]=y[n]; } for<n=0;n<N;n++> y[n]=x[n]; dft<X,y,N,1>;I、画出幅频特性图低通:幅频特性图相频特性图高通:幅频特性图相频特性图带通:幅频特性图相频特性图带阻:幅频特性图相频特性图J、自定信号,并做数据采集方波,做低通滤波程序://对方波实现抽样滤波,低通滤波voidIIRLv<intbandType,doubledb1,doubledb2,doublefs,doublef1,doublef2,doublef3,doublef4>{ order=btwOrder<bandType,db1,db2,fs,f1,f2,f3,f4>;//返回值为N L=btwAf<b,order>;//级连数 btwC23<c,bandType,order,db1,fs,f1,f2,f3,f4>;//其中oroder为N,即阶数。函数返回的是Wc btwAf2Df<H,L,b,c>; chouyang<100.>;//抽样频率1001hz对周期为T=2的方波抽样; JILian_<>;//系统级连以及归一化处理; getchar<>;}//对方波信号进行抽样voidchouyang<doublefc>{ inti,T=2;double dt=1.0/<1.0*fc>; doublet=0; N=fc*T; for<i=0;i<N;i++> { y[i]=0; for<i=0;i<N;i++> { t=i*dt; x[i]=COMPLEX<fangbo<t>,0>; }}doublefangbo<doublet>//一个周期方波{ inth=1; if<t>=0&&t<=2>returnt<=h?1.0:0.0; elseif<t>2||t<0>return0.0; elsereturn0.0;}对方波进行300点抽样,抽样频率100,抽样一个周期T=2s,抽样结果:方波抽样图<2>正弦多次谐波叠加、高通滤波由f1=100,f2=200,f3=300,3个频率的正弦波合成,幅度分别为1,2,31*sin<100t>+2*sin<200t>+3*sin<300t>程序://对正弦多次谐波实现抽样滤波,高通滤波voidIIRLv2<intbandType,doubledb1,doubledb2,doublefs,doublef1,doublef2,doublef3,doublef4>{ order=btwOrder<bandType,db1,db2,fs,f1,f2,f3,f4>;//返回值为N L=btwAf<b,order>;//级连数 btwC23<c,bandType,order,db1,fs,f1,f2,f3,f4>;//其中oroder为N,即阶数。函数返回的是Wc btwAf2Df<H,L,b,c>; chouyang2<fs>; JILian_2<>;}//对正弦多次谐波进行抽样voidchouyang2<doublefs>{ inti,f1=100,f2=200,f3=300; for<i=0;i<N;i++> { y[i]=0; for<i=0;i<N;i++> {////输入信号x由f1=100,f2=200,f3=300,3个频率的正弦波合成,幅度分别为1,2,3 x[i]=COMPLEX<1*sin<2*M_PI*f1*i/fs>+2*sin<2*M_PI*f2*i/fs>+3*sin<2*M_PI*f3*i/fs>,0>; }}抽样结果:K、编写4阶DF,验证4阶DF程序://通用IIR滤波器voidIIRT<COMPLEXinput[],COMPLEXoutput[],doublea[],doubleb[],intN,intNe>//N为数据点数,Ne为0状态最大负输入{ inti,n; for<n=0;n<N;n++> { for<i=1;i<Ne;i++> { if<n<i>output[n]+=a[i]*0; else output[n]=output[n]+a[i]*output[<n-i>]; } for<i=0;i<Ne;i++> { if<n<i>output[n]+=b[i]*0; else output[n]=output[n]+b[i]*input[<n-i>]; } }}L、将4阶DF级连,画出输入输出波形,并验证M、对输入数据进行分组,级连输出波形,并验证〔1方波:级连程序:voidJILian_<void>//实现L级级联{ inti,j,n; window2<"函数图形显示",-1,2,200,-2,"i","x[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,x,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>;dft<X,x,N,1>;for<i=0;i<N;i++>Y[i]=abs<X[i]>; window2<"函数图形显示",-2,25,200,-2,"i","X[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,Y,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>; for<i=0;i<=L-1;i++> { a[0]=0; for<j=1;j<5;j++>//归一化 {a[j]=-H[i][1][j]/H[i][1][0];}//y[n]系数归一 for<j=0;j<5;j++> {b0[j]=H[i][0][j]/H[i][1][0];}//x[n]系数归一 IIRT<x,y,a,b0,N,5>; for<n=0;n<N;n++> x[n]=y[n]; } for<n=0;n<N;n++> y[n]=x[n]; dft<X,y,N,1>;for<i=0;i<N;i++>Y[i]=abs<X[i]>; window2<"函数图形显示",-1,10,200,-2,"i","y[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,y,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>; window2<"函数图形显示",-10,200,200,-1,"i","X[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,Y,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>;}方波频谱图:做DFT后频谱图:L级级连之后的系统输出:为验证自主函数的正确性,求DFT验证:与上图比较低频部分被留下,中高频部分被滤去:正弦多次谐波级连程序:
voidJILian_2<void>//实现L级级联,第二个滤波实现{ inti,j,n; window2<"函数图形显示",-1,10,200,-10,"i","x[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,x,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>; dft<X,x,N,1>;for<i=0;i<N;i++>Y[i]=abs<X[i]>; window2<"函数图形显示",-1,400,200,-1,"i","X[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,Y,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>; for<i=0;i<=L-1;i++> { a[0]=0; for<j=1;j<5;j++>//归一化 {a[j]=-H[i][1][j]/H[i][1][0];}//y[n]系数归一 for<j=0;j<5;j++> {b0[j]=H[i][0][j]/H[i][1][0];}//x[n]系数归一 IIRT<x,y,a,b0,N,5>; for<n=0;n<N;n++> x[n]=y[n]; } for<n=0;n<N;n++> y[n]=x[n]; dft<X,y,N,1>;for<i=0;i<N;i++>Y[i]=abs<X[i]>; window2<"函数图形显示",-1,20,200,-20,"i","y[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,y,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>; window2<"函数图形显示",-1,600,200,-1,"i","X[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,Y,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>;}三次谐波叠加抽样:对应xDFT后的频谱图:通过高通滤波系统之后时域的波形y:高通滤波之后DFT后的频谱图形:与原始xDFT后的图形比较中高频率部分通过,低频被削减滤波:源程序://14yy.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include"D:\xhclgcyy\x_math.cpp"#include"D:\xhclgcyy\x_graph.cpp"intorder,L ,N=300;doubleb[10][2],c[2][3],H[10][2][5],a[2000]={0},b0[2000]={0};COMPLEXy[2000],x[2000],X[2000],Y[2000];//{{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,},{8,0}}doublefangbo<doublet>;voidIIRT<COMPLEXinput[],COMPLEXoutput[],doublea[],doubleb[],intN,intNe>;//通用滤波器;voidJILian_<void>;voidJILian_2<void>;//实现L级级联voidplotgri2<COLORREFgridcolor,COLORREFlinecolor,COMPLEXp[],intN>;voidchouyang<doublefs>;//对正弦信号进行抽样voidIIRLv<intbandType,doubledb1,doubledb2,doublefs,doublef1,doublef2,doublef3,doublef4>;voidchouyang2<doublefs>;//求相频曲线doublebtwphHs<doublef,doublefs,doubleH[][2][5],intL>{doublewT,sum;inti;COMPLEXm;wT=8*f*<1.0>/fs;COMPLEXz_1<cos<wT>,-sin<wT>>;//z的-1次方变成e^jwt形式,然后用欧拉公式展开Z^-1=e^<-jwt>=coswt-jsinwt。for<sum=0,i=0;i<L;i++>//L阶级连。{m=polyval<&<H[i][0][0]>,5,z_1>/polyval<&<H[i][1][0]>,5,z_1>;//求系统函数的多项式比值; sum=sum+<atan2<m.i,m.r>>;}//相频为系统函数虚部与实部比值的正切arctan<H.i/H.r>;returnsum;}voidIIR<intbandType,doubledb1,doubledb2,doublefs,doublef1,doublef2,doublef3,doublef4>{ inti,j,k;order=btwOrder<bandType,db1,db2,fs,f1,f2,f3,f4>;//返回值为NL=btwAf<b,order>;//级连数btwC23<c,bandType,order,db1,fs,f1,f2,f3,f4>;//其中oroder为N,即阶数。函数返回的是WcbtwAf2Df<H,L,b,c>;printf<"L=%d\n",L>;for<i=0;i<L;i++>//用printf<>格式化把系统函数的系数H数组和级连数L显示出来;{ for<j=0;j<2;j++> { for<k=0;k<5;k++> { printf<"H[%d][%d][%d]=%.2f\n",i,j,k,H[i][j][k]>; } }}getch<>;window2<"幅频",-1.,5.,900.,-60.,"hz","db",BLUE,BLUE>;xy2<BLUE>;plotxy2<RED,2,f,btw20lgHz<f,fs,H,L>>;//画相频特性曲线//绘制通阻带参考线:if<bandType==LOWPASS||bandType==HIGHPASS>{line2<0,-db1,win2.x2,-db1>;line2<0,-db2,win2.x2,-db2>;line2<f1,0,f1,win2.y1>;line2<f2,0,f2,win2.y1>;}else{line2<0,-db1,win2.x2,-db1>;line2<0,-db2,win2.x2,-db2>;line2<f1,0,f1,win2.y1>;line2<f2,0,f2,win2.y1>;line2<f3,0,f3,win2.y1>;line2<f4,0,f4,win2.y1>;}getch<>;frame2<>;for<i=0;i<L;i++>//用printf<>格式化把系统函数的系数H数组和级连数L显示出来;{ for<j=0;j<2;j++> { for<k=0;k<5;k++> { printf<"H[%d][%d][%d]=%.2f\n",i,j,k,H[i][j][k]>; } }}getch<>;window2<"相频",-600,-20,600.,20.,"hz","db",BLUE,BLUE>;xy2<BLUE>;plotxy2<RED,2,f,btwphHs<f,fs,H,L>>;//画幅频特性曲线getchar<>;frame2<>;}voidIIRLv<intbandType,doubledb1,doubledb2,doublefs,doublef1,doublef2,doublef3,doublef4>{ order=btwOrder<bandType,db1,db2,fs,f1,f2,f3,f4>;//返回值为N L=btwAf<b,order>;//级连数 btwC23<c,bandType,order,db1,fs,f1,f2,f3,f4>;//其中oroder为N,即阶数。函数返回的是Wc btwAf2Df<H,L,b,c>; chouyang<100.>; JILian_<>; getchar<>;}voidIIRLv2<intbandType,doubledb1,doubledb2,doublefs,doublef1,doublef2,doublef3,doublef4>{ order=btwOrder<bandType,db1,db2,fs,f1,f2,f3,f4>;//返回值为N L=btwAf<b,order>;//级连数 btwC23<c,bandType,order,db1,fs,f1,f2,f3,f4>;//其中oroder为N,即阶数。函数返回的是Wc btwAf2Df<H,L,b,c>; chouyang2<fs>; JILian_2<>;}voidmain<>{IIR<1,3.0,18.0,2000.,200.,300.,400.,500.>;IIR<2,3.0,18.0,2000.,200.,300.,400.,500.>;IIR<3,3.0,18.0,2000.,200.,300.,400.,500.>;IIR<4,3.0,18.0,2000.,200.,300.,400.,500.>;IIRLv<1,3.0,18.0,2000.,200.,300.,400.,500.>;//对方波进行低通滤波;IIRLv2<2,3.0,18.0,2000.,300.,400.,500.,600.>;//对多次正弦谐波进行高通滤波;}voidJILian_<void>//实现L级级联{ inti,j,n; window2<"函数图形显示",-1,2,200,-2,"i","x[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,x,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>;dft<X,x,N,1>;for<i=0;i<N;i++>Y[i]=abs<X[i]>; window2<"函数图形显示",-2,25,200,-2,"i","X[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,Y,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>; for<i=0;i<=L-1;i++> { a[0]=0; for<j=1;j<5;j++>//归一化 {a[j]=-H[i][1][j]/H[i][1][0];}//y[n]系数归一 for<j=0;j<5;j++> {b0[j]=H[i][0][j]/H[i][1][0];}//x[n]系数归一 IIRT<x,y,a,b0,N,5>; for<n=0;n<N;n++> x[n]=y[n]; } for<n=0;n<N;n++> y[n]=x[n]; dft<X,y,N,1>;for<i=0;i<N;i++>Y[i]=abs<X[i]>; window2<"函数图形显示",-1,10,200,-2,"i","y[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,y,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>; window2<"函数图形显示",-10,200,200,-1,"i","X[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,Y,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>;}voidJILian_2<void>//实现L级级联,第二个滤波实现{ inti,j,n; window2<"函数图形显示",-1,10,200,-10,"i","x[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,x,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>; dft<X,x,N,1>;for<i=0;i<N;i++>Y[i]=abs<X[i]>; window2<"函数图形显示",-1,400,200,-1,"i","X[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,Y,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>; for<i=0;i<=L-1;i++> { a[0]=0; for<j=1;j<5;j++>//归一化 {a[j]=-H[i][1][j]/H[i][1][0];}//y[n]系数归一 for<j=0;j<5;j++> {b0[j]=H[i][0][j]/H[i][1][0];}//x[n]系数归一 IIRT<x,y,a,b0,N,5>; for<n=0;n<N;n++> x[n]=y[n]; } for<n=0;n<N;n++> y[n]=x[n]; dft<X,y,N,1>;for<i=0;i<N;i++>Y[i]=abs<X[i]>; window2<"函数图形显示",-1,20,200,-20,"i","y[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,y,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>; window2<"函数图形显示",-1,600,200,-1,"i","X[i]">; xy2<RED>;//画xy轴。 plotgri2<BLUE,RED,Y,N>;//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch<>; frame2<>;}voidchouyang<doublefc>//对方波信号进行抽样{ inti,T=2;double dt=1.0/<1.0*fc>; doublet=0; N=fc*T; for<i=0;i<N;i++> { y[i]=0; for<i=0;i<N;i++> { t=i*dt; x[i]=COMPLEX<fangbo<t>,0>; }}voidchouyang2<doublefs>{ inti,f1=100,f2=200,f3=300; for<i=0;i<N;i++> { y[i]=0; for<i=0;i<N;i++> {////输入信号x由f1=100,f2=200,f3=300,3个频率的正弦波合成,幅度分别为1,2,3 x[i]=COMPLEX<1*sin<2*M_PI*f1*i/fs>+2*sin<2*M_PI*f2*i/fs>+3*sin<2*M_PI*f3*i/fs>,0>; }}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<N;i++>{ moveto2<i,0>; lineto2<i,p[i].r>;}}doublefangbo<doublet>//一个周期方波{ inth=1; if<t>=0&&t<=2>returnt<=h?1.0:0.0; elseif<t>2||t<0>return0.0; elsereturn0.0;}//通用IIR滤波器voidIIRT<COMPLEXinput[],COMPLEXoutput[],doublea[],doubleb[],intN,intNe>//N为数据点数,Ne为0状态最大负输入{ inti,n; for<n=0;n<N;n++> { for<i=1;i<Ne;i++> { if<n<i>output[n]+=a[i]*0; else output[n]=output[n]+a[i]*output[<n-i>]; } for<i=0;i<Ne;i++> { if<n<i>output[n]+=b[i]*0; else output[n]=output[n]+b[i]*input[<n-i>]; } }}训练十五线性卷积计算自定数组:信号复数组x[32]={1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0};系统复数组h[32]={3,0,2,0,1,0};信号数据实际长度为15,系统数据实际长度为3,15+3-1=17,所以要做32的FFT,故两数组长度都声明为32。for<i=0;i<15;i++>x2[i]=C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度安徽省租赁房屋租赁合同解除协议2篇
- 二零二五版多功能会议场地租赁服务合同模板3篇
- 二零二五版废渣运输合同环保评估与整改方案3篇
- 二零二五版公积金贷款个人公积金提取借款合同3篇
- 二零二五版工业自动化生产线改造项目承包合同范本3篇
- 二零二五版房屋屋顶光伏发电系统检测维修合同范本3篇
- 二零二五年度智慧能源管理系统集成合同2篇
- 二零二五年机床设备采购与客户项目整体解决方案合同3篇
- 二零二五年抖音广告创意策划与投放服务合同3篇
- 二零二五年新型环保建材生产与建筑垃圾回收处理合同3篇
- 常用静脉药物溶媒的选择
- 当代西方文学理论知到智慧树章节测试课后答案2024年秋武汉科技大学
- 2024年预制混凝土制品购销协议3篇
- 2024-2030年中国高端私人会所市场竞争格局及投资经营管理分析报告
- GA/T 1003-2024银行自助服务亭技术规范
- 《消防设备操作使用》培训
- 新交际英语(2024)一年级上册Unit 1~6全册教案
- 2024年度跨境电商平台运营与孵化合同
- 2024年电动汽车充电消费者研究报告-2024-11-新能源
- 湖北省黄冈高级中学2025届物理高一第一学期期末考试试题含解析
- 上海市徐汇中学2025届物理高一第一学期期末学业水平测试试题含解析
评论
0/150
提交评论