姓名:许亮学号:10070401481目录一、设计项目----------------------------------------------------------------------------------------2FIR滤波器设计二、设计目的-----------------------------------------------------------------------------------------2三、设计任务----------------------------------------------------------------------------------------2任务简介四、设计原理----------------------------------------------------------------------------------------3(1)FIR的原理和参数生成公式(2)用MATLAB计算滤波系数(3)程序的自编函数及其功能五、设计方案----------------------------------------------------------------------------------------5六、设计代码及相关截图---------------------------------------------------------------------------6七、设计结果----------------------------------------------------------------------------------------9八、设计结论--------------------------------------------------------------------------------------11九、设计心得-----------------------------------------------------------------------------------------11姓名:许亮学号:10070401482一.设计项目设计一个FIR高通滤波器,其阶数为33,通带边界频率1440HZ,采样频率为9000HZ二.设计目的⑴掌握用窗函数法设计FIR数字滤波器的原理和方法。⑵熟悉线性相位FIR数字滤波器特性。⑶了解各种窗函数对滤波器特性的影响。三.设计任务3.1任务要求设计一个FIR低通(或高通、带通)滤波器。此次选择运用MATLAB窗函数法进行设计FIR低通滤波器(1)通带边界频率为1440Hz,通带纹波小于1dB;、(2)设计高通滤波器2000Hz,阻带衰减大于40dB;(3)采样频率9000Hz3.2FIR滤波器介绍有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。3.3工作原理在进入FIR滤波器前,首先要将信号通过A/D器件进行模数转换,把模拟信号转姓名:许亮学号:10070401483化为数字信号;为了使信号处理能够不发生失真,信号的采样速度必须满足乃奎斯特定理,一般取信号频率上限的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的原理和参数生成公式姓名:许亮学号:10070401484N/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).globalstart,fir设定全局变量。(2)COFF_FIR_START:.sectcoff_firIncludelowpass.inc(设定系数文件)姓名:许亮学号:10070401485提示:“lowpass.inc”提供低通系数(用MATLAB计算得出)。(3)K_FIR_BFFR.set32(滤波阶数)(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.设计设备计算机,CCS2(5000)。2.设计步骤⑴设计准备运用MATLAB建立工程“highpass”生成一个.INC文件(滤波系数);再建立一个新工程“dtinput”生成.DAT文件(滤波器输入高通信号)。并将之前生成的.INC文件和.DAT文件放入后面CCS2工程目录HIGH中。⑵启动“CodeComposerStudioSetup”,在“ImportConfiguration”对话框中单击“clear”按钮,消除原系统设置。在“AvailableConfigurations”列表中选择C5402Simulator,关闭窗口,重启CCS。⑶编译并下载程序。⑷打开观察窗口选择菜单“view”“Graph”“Time/Frequency...”进行如下设置:姓名:许亮学号:10070401486地址分别为input和output,buffersize:1,displaydatasize:200,samplingrate:8000,dspdatatype选择16位。在弹出的图形窗口中单击鼠标右键,选择“cleardisplay”。⑸设置断点和探点在标号“fir_loop”下面的“NOP”语句设置软件断点和探针。选择菜单“fileI/O”;加载之前“HIGH”文件夹中的.DAT文件,并在“adress”中输入d_filin,在“length”中输入1;在“warparound”项前面加上选中符号;单击“probepoint”列表中的“FIR.asmline38”行;在“connect”项选择“FILEIN:C:\..\dtinput.dat”;单击“replace”。⑹运行并观察结果1.选择“debug”菜单的“animate”项,或按F12键运行程序。2.观察“input”、“output”窗口中时域图形;观察滤波效果。3.设置“input”、“output”的时域图形窗口为频域窗口,即设置“displaytype”为“FFTmagitude”。4.按F12运行程序。5.观察“input”、“output”窗口中频域图形;理解滤波效果。⑺停止程序运行并退出。六、设计代码及相关截图MATLAB计算highpass.inc滤波系数以及滤波器输入输入信号滤波器系数姓名:许亮学号:10070401487滤波系数产生程序y=round(fir1(33,1440/9000*2)*32768);fid=fopen('highpass.inc','w');fprintf(fid,'.word%d\n',y);fclose(fid);滤波器输入信号产生的程序姓名:许亮学号:10070401488高通滤波器源程序:HIGHPASS.set1.globalstart,fir.mmregsCOFF_FIR_START:.sectcoff_fir.includehighpass.incK_FIR_BFFR.set33d_data_buffer.usectfir_bfr,64FIR_DP.usectfir_vars,0d_filin.usectfir_vars,1output.usectfir_vars,1input.usectfir_vars,1d_filout.usectfir_vars,100hstacksize.set256stack.usectfir_vars,stacksize.asgAR4,FIR_DATA_P.asgAR6,INBUF_P.asgAR7,OUTBUF_P.asgAR3,OUTBUF.asgAR2,INBUF.sectfir_prognopstart:stm#stack+stacksize,SPLD#FIR_DP,DPSTM#d_data_buffer,FIR_DATA_PRPTZA,#K_FIR_BFFR-1STLA,*FIR_DATA_P+STM#d_filin,INBUF_PSTM#d_filout,OUTBUF_PSTM#output,OUTBUFSTM#input,INBUFSTM#100h,BK姓名:许亮学号:10070401489fir_loop:NOP;AddBreakpoint&porbepointLD*INBUF_P,ASTLA,*INBUFCALLfirSTHA,*OUTBUF_P+%STHA,*OUTBUFmain_end:bfir_loopfir:SSBXSXMSSBXFRCTSTM#d_data_buffer,FIR_DATA_PSTLA,*FIR_DATA_PSTM#(d_data_buffer+K_FIR_BFFR-1),FIR_DATA_Pfir_task:RPTZA,#K_FIR_BFFR-1MACD*FIR_DATA_P-,COFF_FIR_START,ARET.end.CMD代码:MEMORY{PAGE0:PROG:o=80h,l=1000hPAGE1:DATA1:o=2600h,l=1000hDATA2:o=2100h,l=100hDATA3:o=2200h,l