《高通滤波器设计报告.docx》由会员分享,可在线阅读,更多相关《高通滤波器设计报告.docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目录一、 设计项目-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低通(或高通、带通)滤波器。此次选择
2、运用MATLAB窗函数法进行设计FIR低通滤波器(1) 通带边界频率为1440Hz,通带纹波小于1dB;、(2) 设计高通滤波器2000Hz,阻带衰减大于40dB;(3) 采样频率9000Hz3.2 FIR滤波器介绍有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。3.3工作原理在进入FIR滤波器前,首先要将信号通过A/D器件进行模数转换,把模拟信号转化为数字信号;为了使信号处理能够不发生失真,信号的采样速度必
3、须满足乃奎斯特定理,一般取信号频率上限的4-5倍做为采样频率;一般可用速度较高的逐次逼进式A/D转换器,不论采用乘累加方法还是分布式算法设计FIR滤波器,滤波器输出的数据都是一串序列,要使它能直观地反应出来,还需经过数模转换,因此由FPGA构成的FIR滤波器的输出须外接D/A模块。FPGA有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来说,其并行性和可扩展性更好,利用FPGA乘累加的快速算法,可以设计出高速的FIR数字滤波器。有限长单位冲激响应(FIR)滤波器有以下特点:(1) 系统的单位冲激响应h (n)在有限个n值处不为零(2) 系
4、统函数H(z)在|z|0处收敛,极点全部在z = 0处(因果系统)(3) 结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(例如频率抽样结构)也包含有反馈的递归部分。设FIR滤波器的单位冲激响应h (n)为一个N点序列,0 n N 1,则滤波器的系统函数为H(z)=h(n)*z-n就是说,它有(N1)阶极点在z = 0处,有(N1)个零点位于有限z平面的任何位置。四设计原理4.1 FIR的原理和参数生成公式N/2-1y(n)= h(k)x(n-k)+(n-(N-1+K) N=0,1,2,3. K=0FIR设计原理: 根据系数h是偶对称为了简化运算产生如下计算方法如果一个FIR滤波有一
5、个冲激响应,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)xn-(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时
6、,可设计高通滤波器; 当ftype=stop时,可设计带阻滤波器。 Window:用来指定滤波器采用的窗函数类型,其默认值为汉明(hamming)窗。采用汉明窗设计低通FIR滤波器使用b=fir1(n, Wn)可得到低通滤波。0Wn1,Wn=1相当于0.5fs。 格式:b=fir1(n, Wn)4.3程序的自编函数及其功能(1) .global start, fir 设定全局变量。(2) COFF_FIR_START: .sectcoff_fir Include lowpass.inc(设定系数文件) 提示:“lowpass.inc”提供低通系数(用MATLAB计算得出)。(3) K_FIR_
7、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 .设计步骤设计准备运用MAT
8、LAB建立工程“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.
9、”进行如下设置: 地址分别为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.
10、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.
11、inc滤波系数以及滤波器输入输入信号滤波器系数滤波系数产生程序y=round(fir1(33,1440/9000*2)*32768);fid=fopen(highpass.inc,w);fprintf(fid, .word %dn,y);fclose(fid);滤波器输入信号产生的程序高通滤波器源程序:HIGHPASS.set1.globalstart,fir.mmregsCOFF_FIR_START: .sect coff_fir.includehighpass.incK_FIR_BFFR.set33d_data_buffer.usectfir_bfr,64FIR_DP.usectfir_v
12、ars,0d_filin.usectfir_vars,1output.usectfir_vars,1input.usect fir_vars,1d_filout .usectfir_vars,100hstacksize .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 tfir_prog nopstart:stm #stack+stacksize,SPLD#FIR_DP,DPSTM#d_data_
13、buffer,FIR_DATA_PRPTZ A,#K_FIR_BFFR-1STLA,*FIR_DATA_P+STM#d_filin,INBUF_PSTM#d_filout,OUTBUF_P STM#output,OUTBUFSTM#input,INBUFSTM#100h,BKfir_loop: NOP ;Add Breakpoint & porbe pointLD*INBUF_P,ASTLA,*INBUFCALLfirSTHA,*OUTBUF_P+%STHA,*OUTBUFmain_end:bfir_loop fir:SSBXSXM SSBX FRCT STM#d_data_buffer,FI
14、R_DATA_PSTLA,*FIR_DATA_PSTM#(d_data_buffer+K_FIR_BFFR-1),FIR_DATA_P fir_task: RPTZA,#K_FIR_BFFR-1MACD*FIR_DATA_P-,COFF_FIR_START,ARET.end.CMD代码:MEMORYPAGE 0:PROG:o= 80h,l= 1000h PAGE 1:DATA1:o= 2600h, l= 1000hDATA2:o= 2100h, l= 100hDATA3:o= 2200h,l= 100hDATA4:o= 2300h,l= 100hDATA5:o= 2400h,l= 100hDA
15、TA6:o= 2500h,l= 100hSECTIONS coff_fir : PROGPAGE 0fir_prog : PROGPAGE 0fir_vars : DATA1PAGE 1 fir_coff : DATA2PAGE 1fir_bfr : DATA3PAGE 1七设计结果高通滤波器MATLAB仿真图频域图放大图时间与频域完整图此图四个窗口,分别是“input”和“output”的时域与频域窗口。窗口一:输入信号的频域波形 输入信号由2个信号叠加而成,一个为1000赫兹,一个为3000赫兹窗口二:输出信号的频域波形 从图可以看出两个信号中,低于通带边界频率1440Hz被滤掉(1000
16、Hz)剩下3000Hz不受影响窗口三:输入信号的时域波形 输入信号由2个信号叠加而成,一个为1000赫兹,一个为3000赫兹窗口四:输出信号的时域波形 滤波之后,波形规律性强八设计结论课程设计项目,我选择的是FIR高通滤波器的设计,其中使用到MATLAB为滤波器设计计算参数(highpass.inc),滤波器输入信号(dtinput.dat)以及MATLAB仿真图;在设计过程中查找一些资料,编写FIR高通滤波器程序等,最终成功将混合信号1000Hz,3000Hz中的低频信号滤掉。九设计心得设计的第一天,自己遇到了很多问题:首先就是不知道如何使用MATLAB,所以整个上午都感觉无从下手,high
17、pass.inc ,dtinput.dat 文件是通过自己手动输入的,相当的麻烦。回去查阅资料后知道了MATLAB的使用,以及.inc .dat文件可以用其直接使用代码生产,这个过程做完后后面的步骤就很简单了。在使用CCS的工程中总是会遇到各种的错误,最多的就是highpass.inc错误,最后找到原因就是 .word不能顶格,必须有空格。其他的问题不是很大。这次设计过程需要一个完整的整体思路,知道每一步该做什么。这次学习过程对自己动手能力,网上搜集资源的能力,以及处理问题的能力都有很大的作用,每一个事件的完成绝不是单一的努力可以的,整体逻辑很重要。DSP课程设计让我们学会了一个道理:就算你的理论有多么的扎实,如果没有实践都是空话。有理论不一定能做出来,能做出来的或多或少对理论有更深的理解。