FIR数字滤波器设计与实现.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
FIR数字滤波器设计与实现

电子科技大学通信与信息工程学院 标 准 实 验 报 告 (实验)课程名称 DSP设计与实践 电子科技大学教务处制表 电 子 科 技 大 学 实 验 报 告 学生姓名: 学 号: 指导教师:向超 实验地点: 实验时间: 一、实验室名称:科B341 二、实验项目名称:FIR数字滤波器设计与实现 三、实验学时:4课时 四、实验原理: FIR滤波器的实现 如果FIR滤波器的冲激响应为h(0),h(1), ...,h(N-1)。X(n)表示滤波器在n时刻的输入,则n时刻的输出为: y(n) = h(0)x(n) + h(1)x(n-1) + ... + h(N-1)x[n-(N-1)] 使用MAC或FIRS指令可以方便地实现上面的计算。 图4-1说明了使用循环寻址实现FIR滤波器的方法。为了能正确使用循环寻址,必须先初始化BK,块长为N。同时,数据缓冲区和冲激响应(FIR滤波器的系数)的开始地址必须是大于N的2的最小幂的倍数。例如,N=11,大于N的最小2的幂为16,那么数据缓冲区的第一个地址应是16的倍数,因此循环缓冲区起始地址的最低4位必须是0。 图4-1 FIR滤波器存储器里的数据存储方式 在图4-1中,滤波系数指针初始化时指向h(N-1),经过一次FIR滤波计算后,在循环寻址的作用下,仍然指向h(N-1)。而数据缓冲区指针指向的是需要更新的数据,如x(n)。在写入新数据并完成FIR运算后,该指针指向x(n-(N-1))。所以,使用循环寻址可以方便地完成滤波窗口数据的自动更新. 使用带MAC指令的循环寻址模式实现FIR滤波器,程序片段如下:(输入数据在AL中,滤波结果在AH中) STM #1,AR0 ; AR0=1 STM #N,BK ; BK=N,循环寻址BUFFER大小为N STL A,*FIR_DATA_P+% ; 更新滤波窗口中的采样数据 RPTZ A,#(N-1) ;重复MAC指令N次,先将A清零 MAC *FIR_DATA_P+0%,*FIR_COFF_P+0%,A ; 完成滤波计算。 ;注意FIR滤波系数存放在数据存储区 另一种方法是利用C54x系列芯片的提供的FIRS指令来实现FIR滤波器。图4-2为一种有限单位冲激响应呈现对中心点对称的FIR滤波器。长度为N 的线性相位FIR滤波器的输出表达式为: 图4-2 N阶均衡FIR滤波器框图 要利用FIRS指令,需要将输入数据缓冲分成两个,循环缓冲区大小寄存器的值设为N/2。图4-3显示了输入序列在两个循环缓冲器里的存储情况。设辅助寄存器AR2指到缓冲区1(Buffer1)的顶部,AR3指到缓冲区2(Buffer2)的底部。每次进行滤波之前,应先将缓冲区1顶部的数据移到缓冲区2的底部,新来的一个样本存储到缓冲区1中时,并对缓冲区1指针AR2加1(使用循环寻址)。处理器然后使用FIRS指令进行乘加运算,即h(0){x(0)+x(-N+1}。当然,在使用FIRS指令前,需要预先计算一次求和,以初始化A 。在RPTZ重复指令和循环寻址的配合下,完成FIR滤波.滤波完成后,需要对两个数据缓冲的指针进行修正,以便对下一个点进行处理。将Buffer1的指针减1和Buffer2的指针减2,使他们指向各自缓冲的数据队列的最后。 使用带FIRS指令的循环寻址模式实现FIR滤波器,程序片段如下:(输入数据在AL中,滤波结果在B中) STM #1,AR0 ; AR0=1 STM #(N/2),BK ; BK=N/2,循环寻址BUFFER大小为N MVDD *ar2, *ar3 ; 更新Buffer2 STL A, *ar2+% ; 更新滤波窗口中的采样数据 ADD *ar2+0% , *ar3+0% ; 初始化A RPTZ B, #(N/2-1) ; 重复FIRS指令N/2次,先将B清零 FIRS *ar2+0%, *ar3+0%,filter_coff+N/2 ;完成滤波计算。注意FIR ;滤波系数存放在程序存贮区,filter_coff为系数起始地址 MAR *ar2-% ; 修改Buffer1指针 MAR *+ar3(-2)% ; 修改Buffe

文档评论(0)

wuailuo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档