目录一、设计项目----------------------------------------------------------------------------------------2FIR滤波器设计二、设计目的-----------------------------------------------------------------------------------------2三、设计任务----------------------------------------------------------------------------------------2任务简介四、设计原理----------------------------------------------------------------------------------------3(1)FIR的原理和参数生成公式(2)用MATLAB计算滤波系数(3)程序的自编函数及其功能五、设计方案----------------------------------------------------------------------------------------5六、设计代码及相关截图---------------------------------------------------------------------------6七、设计结果----------------------------------------------------------------------------------------9八、设计结论--------------------------------------------------------------------------------------11九、设计心得-----------------------------------------------------------------------------------------11一.设计项目设计一个FIR高通滤波器,其阶数为33,通带边界频率1440 HZ,采样频率为9000 HZ二.设计目的⑴掌握用窗函数法设计FIR数字滤波器的原理和方法。
⑵熟悉线性相位FIR数字滤波器特性。
⑶了解各种窗函数对滤波器特性的影响。
三.设计任务3.1任务要求设计一个FIR低通(或高通、带通)滤波器。
此次选择运用MATLAB窗函数法进行设计FIR低通滤波器(1)通带边界频率为1440Hz,通带纹波小于1dB;、(2)设计高通滤波器2000Hz,阻带衰减大于40dB;(3)采样频率9000Hz3.2FIR滤波器介绍有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。
因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。
3.3工作原理在进入FIR滤波器前,首先要将信号通过A/D器件进行模数转换,把模拟信号转化为数字信号;为了使信号处理能够不发生失真,信号的采样速度必须满足乃奎斯特定理,一般取信号频率上限的4-5倍做为采样频率;一般可用速度较高的逐次逼进式A/D转换器,不论采用乘累加方法还是分布式算法设计FIR滤波器,滤波器输出的数据都是一串序列,要使它能直观地反应出来,还需经过数模转换,因此由FPGA构成的FIR滤波器的输出须外接D/A模块。
FPGA有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来说,其并行性和可扩展性更好,利用FPGA乘累加的快速算法,可以设计出高速的FIR数字滤波器。
有限长单位冲激响应(FIR)滤波器有以下特点:(1) 系统的单位冲激响应h (n)在有限个n值处不为零(2) 系统函数H(z)在|z|>0处收敛,极点全部在z = 0处(因果系统)(3) 结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(例如频率抽样结构)也包含有反馈的递归部分。
设FIR滤波器的单位冲激响应h (n)为一个N点序列,0 ≤n ≤N —1,则滤波器的系统函数为H(z)=∑h(n)*z^-n就是说,它有(N—1)阶极点在z = 0处,有(N—1)个零点位于有限z平面的任何位置。
四.设计原理4.1FIR的原理和参数生成公式N/2-1y(n)=∑h(k)[x(n-k)+(n-(N-1+K))] N=0,1,2,3......K=0FIR设计原理:根据系数h是偶对称为了简化运算产生如下计算方法如果一个FIR滤波有一个冲激响应,h(0),h(1),...,h(N-1),和x(n)描绘输入的时常滤波n,输出滤波y(n)的n给出以下方程式:Y(n)=h(0)+h(1)x(n-1)+h(2)x(n-2)+...+h(N-1)x[n-(n-1)]4.2用MATLAB计算滤波系数用来设计标准频率响应的基于窗函数的FIR滤波器,可实现加窗线性相位FIR数字滤波器的设计。
语法:b=fir1(n,Wn)b=fir1(n,Wn,'ftype')b=fir1(n,Wn,Window)b=fir1(n,Wn,'ftype',Window)n:滤波器的阶数;Wn:滤波器的截止频率;ftype:用来决定滤波器的类型,当ftype=high时,可设计高通滤波器;当ftype=stop时,可设计带阻滤波器。
Window:用来指定滤波器采用的窗函数类型,其默认值为汉明(hamming)窗。
采用汉明窗设计低通FIR滤波器使用b=fir1(n, Wn)可得到低通滤波。
0≤Wn≤1,Wn=1相当于0.5fs。
格式:b=fir1(n, Wn)4.3程序的自编函数及其功能(1) .global start, fir 设定全局变量。
(2) COFF_FIR_START: .sect"coff_fir"Include "lowpass.inc"(设定系数文件)提示:“lowpass.inc”提供低通系数(用MATLAB计算得出)。
(3) K_FIR_BFFR .set 32(滤波阶数)(4) d_filin(存放输入波形)(5)d_filout(存放输出波形)(6)指定寄存器:指定AR4为FIR_DATA_P数据寄存器。
指定AR6为INBUF_P输入数据寄存器。
指定AR7为OUTBUF_P输出数据寄存器。
汇编程序部分说明:Start 部分:程序初始化部分指定寄存器,清空寄存器。
fir_loop部分:循环调入输入数据,并调用子程序fir进行计算。
main_end部分:跳转至循环部分。
fir部分:子程序部分。
其中fir_task部分:进行计算并返回计算结果五.设计方案1.设计设备计算机,CCS 2(5000)。
2 .设计步骤⑴设计准备运用MATLAB建立工程“highpass”生成一个.INC文件(滤波系数);再建立一个新工程“dtinput”生成.DAT文件(滤波器输入高通信号)。
并将之前生成的.INC文件和.DAT文件放入后面CCS 2工程目录HIGH中。
⑵启动“Code Composer Studio Setup”,在“Import Configuration”对话框中单击“clear”按钮,消除原系统设置。
在“Available Configurations”列表中选择C5402 Simulator,关闭窗口,重启CCS。
⑶编译并下载程序。
⑷打开观察窗口选择菜单“view”“Graph”“Time/Frequency...”进行如下设置:地址分别为input和output,buffersize:1,display data size:200,sampling rate:8000,dsp data type 选择16位。
在弹出的图形窗口中单击鼠标右键,选择“clear display”。
⑸设置断点和探点在标号“fir_loop”下面的“NOP”语句设置软件断点和探针。
选择菜单“file I/O”;加载之前“HIGH”文件夹中的.DAT文件,并在“adress”中输入d_filin,在“length”中输入1;在“warp around”项前面加上选中符号;单击“probe point”列表中的“FIR.asm line 38”行;在“connect”项选择“FILE IN:C:\..\dtinput.dat”;单击“replace”。
⑹运行并观察结果1.选择“debug”菜单的“animate”项,或按F12键运行程序。
2.观察“input”、“output”窗口中时域图形;观察滤波效果。
3.设置“input”、“output”的时域图形窗口为频域窗口,即设置“display type”为“FFT magitude”。
4.按F12运行程序。
5.观察“input”、“output”窗口中频域图形;理解滤波效果。
⑺停止程序运行并退出。
六、设计代码及相关截图MATLAB计算highpass.inc滤波系数以及滤波器输入输入信号滤波器系数滤波系数产生程序y=round(fir1(33,1440/9000*2)*32768); fid=fopen('highpass.inc','w');fprintf(fid,' .word %d\n',y);fclose(fid);滤波器输入信号产生的程序高通滤波器源程序:HIGHPASS .set 1.global start,fir.mmregsCOFF_FIR_START: .sect "coff_fir".include "highpass.inc"K_FIR_BFFR .set 33d_data_buffer .usect "fir_bfr",64FIR_DP .usect "fir_vars",0 d_filin .usect "fir_vars",1 output .usect "fir_vars",1 input .usect "fir_vars",1d_filout .usect "fir_vars",100h stacksize .set 256stack .usect "fir_vars",stacksize.asg AR4,FIR_DATA_P.asg AR6,INBUF_P.asg AR7,OUTBUF_P.asg AR3,OUTBUF.asg AR2,INBUF.sec t "fir_prog"nopstart:stm #stack+stacksize,SPLD #FIR_DP,DPSTM #d_data_buffer,FIR_DATA_PRPTZ A,#K_FIR_BFFR-1STL A,*FIR_DATA_P+STM #d_filin,INBUF_PSTM #d_filout,OUTBUF_PSTM #output,OUTBUFSTM #input,INBUFSTM #100h,BKfir_loop:NOP ;Add Breakpoint &porbe pointLD *INBUF_P,ASTL A,*INBUFCALL f irSTH A,*OUTBUF_P+%STH A,*OUTBUFmain_end:b fir_loopfir:SSBX SXMSSBX FRCTSTM #d_data_buffer,FIR_DATA_PSTL A,*FIR_DATA_PSTM #(d_data_buffer+K_FIR_BFFR-1),FIR_DATA_P fir_task:RPTZ A,#K_FIR_BFFR-1MACD *FIR_DATA_P-,COFF_FIR_START,ARET.end.CMD代码:MEMORY{PAGE 0:PROG: o= 80h,l= 1000hPAGE 1:DATA1: o= 2600h, l= 1000hDATA2: o= 2100h, l= 100hDATA3: o= 2200h, l= 100hDATA4: o= 2300h, l= 100hDATA5: o= 2400h, l= 100hDATA6: o= 2500h, l= 100h}SECTIONS{coff_fir : {}> PROG PAGE 0fir_prog : {}> PROG PAGE 0fir_vars : {}> DATA1 PAGE 1fir_coff : {}> DATA2 PAGE 1fir_bfr : {}> DATA3 PAGE 1 }七.设计结果高通滤波器MATLAB仿真图频域图放大图时间与频域完整图姓名:许亮学号:1007040148此图四个窗口,分别是“input”和“output”的时域与频域窗口。