您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > FIR滤波器的DSP设计FFT的DSP实验
FIR滤波器的DSP设计作业要求:一、修改代码:滤波器设计要求:线性相位低通滤波器,模拟信号通带为0~1kHz,阻带衰减在5kHz处为-60dB。采样率为20kHz。1.FIR滤波器设计流程为,根据给出的滤波器设计(通带带宽、阻带衰减、相位要求)要求,在matlab环境下仿真得到滤波器系数,得到了滤波器系数后在CCS下编程设计DSP的FIR滤波器。a)使用matlab中的FDAtool设计FIR滤波器MATLAB工具箱中的FDATool是通过指定滤波器的性能指标来快速设计数字滤波器,它是一种交互式工具,只要在FDATool工具里选择相应的滤波器设计方法,并填入需要的技术指标,如通带阻带截止频率、阶数等,即可生成所需的滤波器。并可以在界面上可以看到幅频相频、零极点分布等图形。在本设计中:选择fir低通滤波器,阶数为13,采样率为20KHz,截止频率fc=1KHz,窗口设置为Blackman窗。b)用SPtool验证所设计的滤波器的功能在FDATool里设计了一个FIR低通滤波器后,可以用SPTool来分析所设计的滤波器是否实现了功能与FDATool一样。SPTool可以对信号进行时域与频域的分析。测试滤波器是否实现功能的主要步骤:在MATLAB环境下产生一个混叠波信号,在MATLAB命令窗口输入:Fs=20000;t=(0:500)/Fs;s=sin(2*pi*t*1000)+sin(2*pi*t*5000);subplot(1,1,1);plot(t,s);axis([00.005-22]);grid产生了1000Hz和5000Hz的混叠波,其波形显示图形为:c)在FDATool的界面里输出到SPTool,然后在将导入SPTool的滤波器命名为filter,点击“Apply”,这样,设计的滤波器就导入了SPTool中。在SPtool主界面里面,将输入信号S,采样频率Fs导入进去,并生成名为output的输出信号。通过点击该界面下的“view”可以得到输入输出波形,点击“create”可以得到输出的频谱,这三个图形如下所示:通过观察输入输出的波形图及频谱图验证所设计的滤波器的功能。可以看出5000HZ的频率分量被滤,所设计的滤波器实现了低通滤波功能。2.使用CCS编程实现DSP的FIR滤波启动CCS软件,编写及修改程序,我们得到的仿真波形如下:a)输入与输出波形:b)输入波形的频谱:c)输出波形的频谱:一、通过代码修改、仿真,理解定点运算和浮点运算相比的优缺点。定点运算的优点是:效率高,硬件单元比较简单,适合在低成本或者一些高速的DSP上应用;缺点主要就是丢失了精度,并且计算过程容易溢出。浮点运算的优点很明显,浮点数有更大的数字表示范围,数据运算时不容易产生溢出,运算精度也比定点运算高;但是其缺点是运算复杂,硬件较复杂,带有浮点运算单元的DSP明显比定点DSP价格高,增加了成本。二、通过仿真波形的分析、理解滤波器阶数与滤波器延时以及滤波器的阻带衰减之间的关系。在利用窗函数设计的FIR滤波器中,用同一种窗函数设计的FIR数字滤波器的阶数N不同,所得到的滤波器的过渡带会不一样,N越大,过渡带越窄。滤波器的阻带衰减只有窗形状决定,不受滤波器阶数的影响;但是滤波器的阶数太高,会导致过渡带很窄,暂态增加,延时很长。三、实验程序:#includemath.h#includestdlib.h#defineorder14#defineN128#definepi3.14159265358979323846floatfir[order]={0,0.00254885266601421,0.0147553639227699,0.0448623472097668,0.0949715275858371,0.152016225973152,0.19084568264246,0.19084568264246,0.152016225973152,0.0949715275858371,0.0448623472097668,0.0147553639227699,0.00254885266601421,0};floats;inti,n;floatinput[N],output[N];intfs=20000;intf1=1000;intf2=5000;voidwavein(){for(n=0;nN;n++)input[n]=sin(2*pi*n*f2/fs)+sin(2*pi*n*f1/fs);}voidmain(){intp=0;n=0;wavein();for(n=0;nN;n++){p=0;s=0;while((porder)&&(p=n)){s=fir[p]*input[n-p]+s;p++;}output[n]=s;}}FFT的DSP实验实验内容:一、完成所给例程对应实验,验收结果如下:A、时域信号波形为(图形入口地址:SignalInput):B、对应谱为(图形入口地址:SignalInput):C、FFT输出结果(图形入口地址:FFT_W):二、修改代码为时域信号60Hz和160Hz两个信号相乘,分析其频谱,并说明理由。1.代码被修改的部分:#defineS2_Freq160//信号2频率voidinit_fft_tab(void)//输入波形的初始化{floatwt1;floatwt2;inti;for(i=0;iSample_Numb;i++){wt1=2*pi*i*S1_Freq;wt1=wt1/SampleFreq;wt2=2*pi*i*S2_Freq;wt2=wt2/SampleFreq;//此处实现60Hz和160Hz两个信号相乘。SignalInput[i]=cos(wt1)*cos(wt2)*100;//SignalInput[i]=(cos(wt1)+cos(wt2))/2*100;}}由时域相乘频域卷积可以知道60Hz和160Hz的余弦信号相乘将得到有100Hz和220Hz频率分量的信号。2.CCS仿真图形如下:A、时域信号波形为(图形入口地址:SignalInput):B、对应谱为(图形入口地址:SignalInput):由频谱图可以看出,60Hz和160Hz相乘产生的信号的频率分量有100Hz和220Hz。C、FFT输出结果(图形入口地址:FFT_W):三、修改实验代码为1024点FFT,进行程序的编译、运行和对应结果的查看。1、代码被修改的部分(时域信号为60Hz和180Hz的两个波形相加):#defineSample_Numb1024//设置FFT点数为1024点voidfft(floatdatar[Sample_Numb],floatdatai[Sample_Numb]){intx0,x1,x2,x3,x4,x5,x6,x7,x8,x9,xx;inti,j,k,b,p,L;floatTR,TI,temp;//倒位序;由1024点可以得到顺序数可以由10位数表示,这里取0-9;for(i=0;iSample_Numb;i++){x0=x1=x2=x3=x4=x5=x6=x7=x8=0;x0=i&0x01;x1=(i/2)&0x01;x2=(i/4)&0x01;x3=(i/8)&0x01;x4=(i/16)&0x01;x5=(i/32)&0x01;x6=(i/64)&0x01;x7=(i/128)&0x01;x8=(i/256)&0x01;x9=(i/512)&0x01;xx=x0*512+x1*256+x2*128+x3*64+x4*32+x5*16+x6*8+x7*4+x8*2+x9;datai[xx]=datar[i];}for(i=0;iSample_Numb;i++){datar[i]=datai[i];datai[i]=0;}//10级蝶形运算for(L=1;L=10;L++){b=1;i=L-1;while(i0){b=b*2;i--;}for(j=0;j=b-1;j++){//p=1;i=10-L;while(i0){p=p*2;i--;}p=p*j;for(k=j;k1024;k=k+2*b){TR=datar[k];TI=datai[k];temp=datar[k+b];datar[k]=datar[k]+datar[k+b]*cos_tab[p]+datai[k+b]*sin_tab[p];datai[k]=datai[k]-datar[k+b]*sin_tab[p]+datai[k+b]*cos_tab[p];datar[k+b]=TR-datar[k+b]*cos_tab[p]-datai[k+b]*sin_tab[p];datai[k+b]=TI+temp*sin_tab[p]-datai[k+b]*cos_tab[p];}}}//计算FFT输出的功率for(i=0;iSample_Numb/2;i++){FFT_W[i]=sqrt(datar[i]*datar[i]+datai[i]*datai[i]);}}A、时域信号波形为(图形入口地址:SignalInput):B、对应谱为(图形入口地址:SignalInput):C、FFT输出结果(图形入口地址:FFT_W):四、分析采样率、FFT点数与频谱分辨率之间的关系由采样定理知:采样率Fs应当满足𝐹𝑠≥2𝐹ℎ(𝐹ℎ为信号的最高频率)。频率分辨率为:𝐹0=𝐹𝑠𝑁⁄=1𝑁𝑇𝑠=1𝑇⁄⁄(N为FFT的点数,Ts为采样间隔,NTs就是采样前模拟信号的时间长度T),可以得到信号长度越长,频率分辨率越好。
本文标题:FIR滤波器的DSP设计FFT的DSP实验
链接地址:https://www.777doc.com/doc-2871822 .html