资源描述:
《DSP与matlab联合设计FIR滤波器.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、设计FIR滤波器作业报告学号:姓名:设计FIR滤波器作业报告本设计主要内容是利用MATLAB验证设计思路并用CCS3.3仿真环境设计一个FIR滤波器,要求滤除给定的叠加正弦波的两个较高频分量。给定波形函数为:y=sin(2*pi*100*t)+sin(2*pi*250*t)+sin(2*pi*270*t)。1.设计思路:输入信号是频率为100Hz、250HZ、270Hz的合成正弦等幅信号,由于给定的谐波分量最高为270Hz,根据奈奎斯特准则,采样频率应大于最高频率分量的2倍,即大于2*270,故可以以600Hz的采样频率进行采样,即f
2、s=600Hz。设计了一个截止频率为200Hz的低通滤波器,目的是通过所设计的低通bartlett滤波器将信号源中频率为200Hz以上的信号滤掉,留下频率为100Hz的信号,达到滤波的效果。利用MATLAB设计合适的滤波器实现滤波,然后得到其滤波器系数在CCS的simulator方式下编写滤波程序,调用波形数据,实现滤波,并观看滤波前后的信号波形图、频谱图,观察滤波达到预期效果。2.设计过程1)在MATLAB中进行算法验证MATLAB语言由于具有数值计算功能、符号计算功能、数据可视化功能、建模仿真可视化功能,使得MATLAB在命题构思
3、、模型建立、仿真研究、假想验证、数据源可视化各环节起着强大的作用。因此在设计中必须先在MATLAB语言中设计一个FIR滤波器。本设计采用的是bartlett窗函数。下面是在MATLAB中设计的27阶FIR型bartlett滤波器程序:clearall;%请寄存器clf;%清屏N=256;%清数据点fs=600;%采样频率dt=1/fs;%采样时间间隔fort=1:Nf1=250;f2=100;f3=270;y(t)=(sin(2*pi*f1*t*dt)+sin(2*pi*f2*t*dt)+sin(2*pi*f3*t*dt));%产生合
4、成信号x(t)=round(10000*y(t));%为DSP汇编程序做数据转换endfigure(1)plot(y),title('滤波前的波形图像');fp=200fst=250NL=26f1=200;w1=2*pi*f1/fswindow=bartlett(NL+1)%窗函数n=1:NL+1hd=sin(w1*(n-NL/2))./(pi*(n-NL/2));hd(NL/2)=0.67;h=hd.*rot90(window)h1=h*32768;h2=fft(h,N);%将信号做FFT变换pyy=h2.*conj(h2);%做功
5、率谱分析f=(0:(N/2-1));fori=1:N/2-1f(i)=f(i)*fs/N;endfigure(2)plot(f,pyy(1:N/2)),title('滤波器的频谱图像');yy1=filter(h,1,y);%滤波figure(3)plot(yy1),title('滤波后的波形图像');y=fft(y,N);pyy=y.*conj(y);f=(0:(N/2-1));fori=1:N/2-1f(i)=f(i)*fs/N;endfigure(4)subplot(1,2,1),plot(f,pyy(1:N/2)),title
6、('滤波前的波形频谱图像');y=fft(yy1,N);pyy=y.*conj(y);f=(0:(N/2-1));fori=1:N/2-1f(i)=f(i)*fs/N;endsubplot(1,2,2),plot(f,pyy(1:N/2)),title('滤波后的波形频谱图像')其中采样点为256个,采样频率为600Hz,输入信号为100Hz、250Hz、270Hz的合成信号,设定的截止频率为200Hz,通过FIR滤波器后,期望保留的信号是100Hz的信号,200Hz以上的频率基本被滤掉。图1是滤波前的图形,图2是滤波后的图形,图3为
7、滤波器频谱图像,图4滤波前后的波形频谱图像。从这四个图中可以看住原始信号中的频率有100Hz、250Hz、270Hz,经过滤波后200Hz以上的信号成分基本上被滤掉。只留下100Hz的信号。图1滤波前波形图像图2滤波后波形图像图3滤波器的频谱图像图4.滤波前后的波形频谱图像1)在CCS环境的仿真首先配置处理器项,进入CCStudiov3.3中,编写程序,程序如下:.mmregs.reffilter_start.def_c_int00K_DATA_SIZE.set256K_BUFFER_SIZE.set32K_STACK_SIZE.se
8、t256K_B.set27K_CIR.setK_BUFFER_SIZESTACK.usect"stack",K_STACK_SIZESYSTEM_STACK.setK_STACK_SIZE+STACKDATA_DP.us