FIR 滤波器设计

上传人:mg****2 文档编号:122127037 上传时间:2020-03-01 格式:DOC 页数:17 大小:319KB
返回 下载 相关 举报
FIR 滤波器设计_第1页
第1页 / 共17页
FIR 滤波器设计_第2页
第2页 / 共17页
FIR 滤波器设计_第3页
第3页 / 共17页
FIR 滤波器设计_第4页
第4页 / 共17页
FIR 滤波器设计_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《FIR 滤波器设计》由会员分享,可在线阅读,更多相关《FIR 滤波器设计(17页珍藏版)》请在金锄头文库上搜索。

1、.FIR带通滤波器的设计一、 设计要求试用DSP设计FIR滤波器,分别实现带通的功能,具体要求如下:(1) 滤波器的阶数5,截止频率自行选定,滤波系数用MATLAB确定。(2)编制C54XDSP实现FIR滤波器的汇编源程序。(3)用软件仿真器完成上述程序的模拟调试。(4)以数据文件形式自行设定滤波器输入数据,以数据文件形式输出滤波结果,并与输入数据进行比较分析。用软件仿真器有关工具显示FIR滤波器的输入输出波形,以证明滤波器滤波性能。二、 设计目的(1)了解FIR滤波器的原理及使用方法;(2)了解使用MATLAB语言设计FIR滤波器的方法;(3)了解DSP对FIR滤波器的设计及汇编方法;(4)

2、熟悉DSP的调试方法;三、 FIR滤波器的基本原理假设FIR滤波器的冲击响应为h(0)、h(1)、h(2)h(N-1),x(n)为滤波器的输入信号,则对应的滤波器输出由下列关系式确定,FIR滤波器的传递函数为:直接由差分方程得出的实现结构如图所示:图横截型(直接型卷积型) FIR滤波器的结构图一般只要实现了上面的关系式就相当于将信号进行了滤波,从上面的关系式我们可以看出首先必须知道FIR滤波器的冲击响应系数h(0)、h(1)、h(2)h(N-1),这和知道FIR滤波器的系数是一样的,我们必须在高级语言中将这些滤波器冲击响应的系数得到,在本次设计中我们使用MATLAB语言实现这一任务,然后将得到

3、的冲击响应系数应用到DSP汇编语言的程序中,实现上述计算公式,就可以方便的实现FIR滤波器,完成实验的要求,达到滤波的效果。四、 FIR滤波器的设计FIR滤波器的设计方法主要有窗函数法和频率采样法。其中,窗函数法是最基本的方法。本次设计采用窗函数法。一般是先给定所要求的理想滤波器频率响应,由导出,我们知道,理想滤波器的冲击响应是无限长的非因果序列,而我们要设计的是是有限长的FIR滤波器,所以要用有限长序列来逼近无限长序列,设:(-1) 常用的方法是用有限长度的窗函数w(n)来截取 即:(-) 这里窗函数就是矩形序列RN(n),加窗以后对理想低通滤波器的频率响应将产生什么样的影响呢?根据在时域是

4、相乘关系,在频域则是卷积关系: (-)其中,为矩形窗谱, 是FIR滤波器频率响应。通过频域卷积过程看的幅度函数H()的起伏现象,可知,加窗处理后,对理想矩形的频率响应产生以下几点影响:(1)使理想频率特性不连续点处边沿加宽,形成一个过渡带,其宽度等于窗的频率响应的主瓣宽度。(2)在截止频率的两边的地方即过渡带的两边,出现最大的肩峰值,肩峰的两侧形成起伏振荡,其振荡幅度取决于旁瓣的相对幅度,而振荡的多少,则取决于旁瓣的多少。(3)改变N,只能改变窗谱的主瓣宽度,改变的坐标比例以及改变的绝对值大小,但不能改变主瓣与旁瓣的相对比例(此比例由窗函数的形状决定)。(4)对窗函数的要求:a、窗谱主瓣尽可能

5、窄,以获取较陡的过渡带;b、尽量减小窗谱的最大旁瓣的相对幅度;即能量集中于主瓣,使肩峰和波纹减小,增大阻带的衰减。五、 CCS的使用步骤。1. 创建源文件:(1)打开CCS选择File New Source File命令; (2)编写源代码并保存; (3)保存源程序名为:*.C,选择File Save; (4) 创建其他源文件可重复上述步骤。2. 创建工程文件:(1)选择 Project New,创建一个新工程。 (2)点击Project选择Add file to project,添加所需文件。 (3)在弹出的对话框的下拉菜单中选择所需的源程序,点击打 开,即可添加到工程中。3. 设置编译与链

6、接选项:(1)点击project选择Build options 在弹出的对话框中 设置相应的参数,一般按照默认参数即可:4. 工程编译与调试:(1)点击Project选择Build all,对工程进行编译,如正确则产生Out文件。若需修改程序,可以使用Project中的Build命令进行链接它只对修改部分做编译链接。(2)点击file中的load program,在弹出的对话框中载入Debug文件夹下的.out可执行打开。(3)装载完毕。5. 运行程序:在view菜单下选择Watch window选项来观测变量值。一次输入input和output来观测输入输出变量值。分别为滤波前的输入数据和滤

7、波后的输出数据的首地址。在本次设计中,输入首地址为:0x00a6;输出首地址为:0x2400.6. 观察波形:在View菜单下拉选项Garph/time freguence.弹出一个话框。根据要求设计响应参数,来观测输入输出波形。六、 带通滤波器设计指标本次要设计一个FIR带通滤波器,其采样频率fs=15000Hz,通带为2000Hz3000Hz,即保留频率在2000Hz3000Hz范围内的信号成分,幅度失真小于1dB;阻带边界频率为1000Hz和4000Hz,衰减小于30dB。同时,FIR滤波器的阶数N=20。七、 设计思路及实现步骤 1.基于Matlab工具箱Signal中的fir1函数设

8、计FIR带通滤波器,选择Hamming窗函数法,进而获取FIR带通滤波器的系数b,并保存为fir01.txt数据文件。这里FIR滤波器的阶数N=20。 程序格式为:b=fir1(N-1.ws1,ws2,style); 实现代码如下:clear allfs=10000; %采样频率;fs=10000; %采样频率;fd1=1000; %阻带下截止频率f1=2000; %通带下截止频率f2=3000; %通带上截止频率fd2=4000; %阻带下截止频率w1=f1/10000*2; w2=f2/10000*2; %频率的归一化处理;b=fir1(19,w1,w2,bandpass);fp=fope

9、n(fir01.txt,wt);fprintf(fp,.%20.4fn,b);fclose(fp); 获得的FIR带通滤波器的系数b如下:b= -0.0007 0.0031 0.0092 -0.0217 -0.0421 0.0696 0.1012 -0.1321 -0.1568 0.1706 0.1706 -0.1568 -0.1321 0.1012 0.0696 -0.0421 -0.0217 0.0092 0.0031 -0.0007同时,通过Matlab中的滤波器设计工具,可以得到满足设计要求的FIR带通滤波器的频率特性和相位特性。 其中,参数设计如下: 阻带下截止频率Fstop1=10

10、00HZ; 通带下截止频率Fass1=2000HZ; 通带上截止频率Fpass2=3000HZ; 阻带上截止频率Fstop2=4000HZ; 具体如下图所示: FIR滤波器的频率特性FIR滤波器的相位特性2. 建立DSP汇编程序的FIR滤波器系数文件程序如下:clear allfs=10000; fstop1=1000; f1=2000; f2=3000; fstop2=4000; w1=f1/10000*2; w2=f2/10000*2; b=fir1(19,w1,w2,bandpass);fp=fopen(firdata.inc,wt);fprintf(fp,.word%5.0fn,b*3

11、2768);fclose(fp); 利用上述程序产生的firdata.inc文件,内容如下:N .set 20COFF_FIR: .sect “COFF_FIR”.word 101.word 300.word -711.word-1379.word 2281.word 3317.word-4330.word-5139.word 5589.word 5589.word-5139.word-4330.word 3317.word 2281.word-1379.word -711.word 300.word 101.word -243用MATLAB产生输入信号 产生一个由1000HZ、3000HZ、

12、4500HZ合成的正弦信号。代码如下,该代码会生成一个名为indata.inc的文件。clear all;f1=3000;f2=1000;f3=4500;fs=10000; N=128; T=1/fs; n=0:N-1;x1=0.08*sin(2*pi*f1*n*T);x2=0.08*sin(2*pi*f2*n*T);x3=0.08*sin(2*pi*f3*n*T);xn=ceil(32768*(x1+x2+x3);figure(1);plot(xn)figure(2)yff=abs(fft(xn);df=n*(fs/N);plot(df,yff);fid=fopen(indata.inc,w

13、);fprintf(fid, .word%5.0fn,xn); fclose(fid);4.产生滤波器输入信号的firinput.c文件设计滤波器的输入信号为f1=1800Hz,f2=2800Hz,f3=4500Hz的混频信号。#include#includevoid main()int i;double f256;FILE *fp; / FILE是变量类型,C语言定义的标准数据结构,用于文件if(fp=fopen(“firin.inc”,”wt”)=NULL) / 打开firin文件用于写printf(“cant open file!n”);return;fprintf(fp,”INPUT: .sect %cINPUT %c n”,”,”);for(i=0;i=255;i+) fi=sin(2*3.14159*i*1500/18000)+sin(2*3.14159*i*2800/10000)+sin(2*3.14159*i*4500/10

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号