DSP中的FIR滤波器论文

更新时间:2023-08-29 19:25:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

介绍了FIR的滤波器的实现方法

课程大作业实验报告

语音信号的FIR滤波器处理

课程名称:DSP

原理及应用

组 长: 何庆勇 学号:200830590308 年级专业班级:08通信3班 组员一: 陈纯明 学号:200830590301 年级专业班级:08通信3班

指导教师

徐梅宣

报告提交日期

2011年6月9日

介绍了FIR的滤波器的实现方法

摘 要

随着信息与数字技术的发展,数字信号处理已经成为当今极其重要而学科与技术领域之一。它在通信、语音、图像、自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。在数字信号处理的基本方法中,通常会涉及到变换、滤波、频谱分析、调制解调和编码解码等处理。其中滤波是应用非常广泛的一个环节,数字滤波器的理论和相关设计也一直都是人们研究的重点之一。FIR滤波器的是非递归的,稳定性好,精度高;更重要的是,FIR滤波器在满足幅频响应要求的同时,可以获得严格的线性相位特征。因此,它在高保真的信号处理,如数字音频、图像处理、数据传输和生物医学等领域得到广泛应用。

在数字信号处理中,滤波占有极其重要的地位。数字滤波是语音信号处理、图像处理、模式识别、频谱分析等应用的基本处理算法。用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好等特点。

本文介绍了数字滤波器的设计基础及用窗函数法设计FIR滤波器的方法,运用MATHLAB语言实现了低通滤波器的设计并用CCS 2.0进行观察效果。

关键词: FIR滤波 MATHLAB 窗函数法 CCS

介绍了FIR的滤波器的实现方法

目 录

1.设计要求 ................................................................ 1 2.滤波器的设计原理说明 .................................................... 1 2.1数字滤波器的设计原理 ................................................. 1 2.2 FIR滤波器的基本结构 ................................................. 1 2.3 FIR滤波器的主要特点 ................................................. 2 3.FIR滤波器的设计方法 ..................................................... 2 3.1 FIR滤波器设计 ....................................................... 2 3.2 窗函数设计的基本方法 ................................................. 2 3.3 滤波器的z算法实现 ................................................ 2 4.FIR滤波器的MATLAB实现 .................................................. 3 4.1用FIR1函数设计FIR滤波器............................................. 3 4.2用FIR2函数设计FIR滤波器............................................. 4 4.3用MATLAB工具箱(TOOLBOX)自带工具设计FIR滤波器 ...................... 4 5.FIR滤波器的DSP实现 ..................................................... 7 6.FIR滤波器的结果检验 ..................................................... 9 7. 调试问题 .............................................................. 10 8.心得体会 ............................................................... 11 参 考 文 献 ........................................................... 12

1

介绍了FIR的滤波器的实现方法

1. 设计要求

1) 设计一FIR低通滤波器,实现对语音信号的滤波。 2)用语音信号去检验该滤波器,查看滤波效果。

根据老师的要求,我们自己拟定了滤波器的指标:Fs=8000hz,Wp=1500 Hz,Ws=2000 Hz,通带波纹为0.01,阻带波纹为0.1,N=37。

2.滤波器的设计原理说明

2.1数字滤波器的设计原理

数字滤波器的设计问题就是寻找一组系数ai和bi,使得其性能在某种意义上逼近所要求的特性。如果在s平面上去逼近,就得到模拟滤波器,如果在z平面上去逼近,则得到数字滤波器。

数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列。一个线性位移不变系统的输出序列y(n)和输入序列x(n)之间的关系, 应满足常系数线性差分方程:

(2.1.1) y(n) bx(n i) ay(n i) n 0

N 1

M

i 0

i

i 1

i

x(n)为输入序列,y(n)为输出序列,ai、bi 为滤波器系数,N为滤波器的阶数。

2.2 FIR滤波器的基本结构

在式2.1.1中,若所有的ai均为0,则得FIR滤波器的差分方程:

N 1

(2.2.1) y(n) bix(n i)

i 0

对式(2.2.1)进行z变换,可得FIR滤波器的传递函数:

Y(z) i(2.2.2) H(z) biz

N 1

X(z)

i 0

由此可得到FIR滤波器的结构如图1所示。

介绍了FIR的滤波器的实现方法

FIR滤波器的单位冲击响应h(n)是一个有限长序列。若h(n)为实数,且满足偶对称或奇对称的条件,即h(n)=h(N-1-n)或h(n)=-h(N-1-n),则FIR滤波器具有线性相位特性。

2.3 FIR滤波器的主要特点

1)单位冲击响应只有有限项;

2)FIR滤波器无反馈回路,是一种无条件稳定系统; 3)FIR滤波器可以设计成具有线性相位特性。

3.FIR滤波器的设计方法

3.1 FIR滤波器设计

N 1

n

n 0

H(z) h( n)z ,使其响应 FIR滤波器的设计问题在于寻求一系统函数

H(e

j

j ) H(z)|z ej 逼近滤波器要求的理想频率响应 H(e)。

d

3.2 窗函数设计的基本方法

从时域出发,设计h(n)逼近理想hd(n),设理想滤波器的单位脉冲响应为hd(n),

则有

j

Hd(e

) 12

n

hd(n)eHd(e

jn

hd(n)

j

)e

jn

d

hd(n)一般是无限长的,且是非因果的。 所求得的

要想得到一个因果的有限长的滤波器h(n),最直接的方法是截断 hd(n),或者说用

w(n)对 一个窗口函数 hd(n)进行加窗处理,即

h(n) hd(n)w(n)。因此,应选择合适的

窗函数。

3.3 滤波器的z算法实现

FIR滤波器的输出表达式为

1

式中,为滤波器系数;x(n)表示滤波器在n时刻的输入;y(n)为n时刻的输出。 它的基本算法是一种乘法-累加运算,即不断地输入样本x(n),经过延时后,再进行乘法-累加,最后输出滤波结果y(n)。

介绍了FIR的滤波器的实现方法

1)线性缓冲区法

线性缓冲区法又称延迟线法。其特点:

·对于N级的FIR滤波器,在数据存储器中开辟一个N单元的缓冲区(滑窗),用来存放最新的N个输入样本;

·从最老样本开始取数,每取一个样本后,将此样本向下移位; ·读完最后一个样本后,输入最新样本存入缓冲区的顶部。

2)循环缓冲区法

本次设计的FIR滤波器所采用的就是循环缓冲区法。 循环缓冲区法的特点如下:

·对于N级FIR滤波器,在数据存储器中开辟一个N单元的缓冲区(滑窗),用来存放最新的N个输入样本; ·从最新样本开始取数;

·读完最后一个样本(最老样本)后,输入最新样本来代替最老样本,而其他数据位置不变;

·用片内BK(循环缓冲区长度)寄存器对缓冲区进行间接寻址,使循环缓冲区地址首尾相邻。

4.FIR滤波器的MATLAB实现

MATLAB是一种功能强、效率高、便于进行科学和工程计算的交互式软件包,它集数值分析、矩阵运算、信号处理和图形显示于一体,为用户提供了方便、友好的界面环境。

MATLAB中的工具箱(Toolbox)包含了许多实用程序。它提供了多种FIR滤波器设计方法。

4.1用fir1函数设计FIR滤波器

fir1函数用来设计标准频率响应的基于窗函数的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为用来决定滤波器的类型,

介绍了FIR的滤波器的实现方法

当ftype=high时,可设计高通滤波器;当ftype=stop时,可设计带阻滤波器。Window为用来指定滤波器采用的窗函数类型,Window参数可采用的窗口函数有: Boxcar,Hanning,Bartlett,Blackman,Kasier和chebwin等,其默认时为Hamming窗,从而得到滤波器的系数。

4.2用fir2函数设计FIR滤波器

fir2函数用来设计有任意频率响应的各种加窗FIR滤波器。具体语法如下:

b=fir2(n,f,m)

b=fir2(n,f,m,Window) b=fir2(n,f,m,npt)

b=fir2(n,f,m,npt,Window) b=fir2(n,f,m,npt,lap)

b=fir2(n,f,m,nptt,lap,Window)

其中n为滤波器的阶数;f为频率点矢量;m为幅度点矢量;Window用来指定所使用的窗函数类型,默认值为汉明(Hamming)窗;npt用来指定fir2函数对频率响应进行内插的点数;lap用来指定fir2函数在重复频率点附近插入的区域大小,从而得到滤波器的系数。

4.3用MATLAB工具箱(Toolbox)自带工具设计FIR滤波器 该方法为本次设计所采用的方法,实现流程如下图2所示: (1)打开Filter Design & Analysis Tool

介绍了FIR的滤波器的实现方法

图2

如图3设置本设计参数:

介绍了FIR的滤波器的实现方法

图3

点击Design Filter,再点击Filter Coefficients按钮得如图4所示

图4

介绍了FIR的滤波器的实现方法

由此可以得到滤波器参数:

-8*32768/10000,-32*32768/10000 16*32768/10000,56*32768/10000 36*32768/10000,-89*32768/10000 -77*32768/10000,92*32768/10000 188*32768/10000,-53*32768/10000 -289*32768/10000,-76*32768/10000 423*32768/10000,322*32768/10000 -531*32768/10000,-851*32768/10000

595*32768/10000,3113*32768/10000 4298*32768/10000 3113*32768/10000,595*32768/10000 -851*32768/10000,-531*32768/10000 322*32768/10000,423*32768/1000 0 -76*32768/10000,-289*32768/10000 -53*32768/10000,188*32768/10000 92*32768/10000,-77*32768/10000 -89*32768/10000,36*32768/10000 56*32768/10000,16*32768/10000 -32*32768/10000,-8*32768/10000

5.FIR滤波器的DSP实现

所选取的N=37,滤波器的算法为

y(n)=b0x(n)+b1x(n-1)+b2x(n-2)+···+b36x(n-36)

根据我们所选择使用的循环缓冲区法可以编写得到FIR滤波器的源程序如下:

.title "fir.asm" .mmregs .def start .bss yn,1

xn .usect "xn",37 hn .usect "hn",37 indata .usect "indata",300 outdata .usect "outdata",256 .data fir_coff:

.word -8*32768/10000,-32*32768/10000 .word 16*32768/10000,56*32768/10000 .word 36*32768/10000,-89*32768/10000 .word -77*32768/10000,92*32768/10000 .word 188*32768/10000,-53*32768/10000 .word -289*32768/10000,-76*32768/10000

介绍了FIR的滤波器的实现方法

.word 423*32768/10000,322*32768/10000 .word -531*32768/10000,-851*32768/10000 .word 595*32768/10000,3113*32768/10000 .word 4298*32768/10000

.word 3113*32768/10000,595*32768/10000 .word -851*32768/10000,-531*32768/10000 .word 322*32768/10000,423*32768/10000 .word -76*32768/10000,-289*32768/10000 .word -53*32768/10000,188*32768/10000 .word 92*32768/10000,-77*32768/10000 .word -89*32768/10000,36*32768/10000 .word 56*32768/10000,16*32768/10000 .word -32*32768/10000,-8*32768/10000 .text start:

ssbx frct ;使用小数运算 stm #hn,ar1 ;系数首地址 rpt #36 ;将系数移入循

mvpd fir_coff,*ar1+ ;环缓冲区 stm #-1,ar0 stm #outdata,ar5 stm #indata,ar4 stm #xn+36,ar2

rpt #36 ;将输入数据移入 mvdd *ar4+,*ar2+0% ;循环缓冲区 stm #xn+36,ar2 ;指向第一个输入 stm #hn+36,ar3

stm #37,bk ;缓冲区大小37 stm #255,brc ;块重复256次

介绍了FIR的滤波器的实现方法

stm #-1,ar0

rptb loop-1 ;块程序重复大小 rptz a,#36 ;计算一个输出 mac *ar2+0%,*ar3+0%,a sth a,*(yn) ;保存输出 mvkd *(yn),*ar5+

mvdd *ar4+,*ar2+0% ;读进一个输入 loop: nop

b loop .end

6.FIR滤波器的结果检验

(1)点击View—>Graph—>Time/Frequency...

如图设置好参数,如图5所示。点击OK,可得到输入信号的时域波形。

图5

(2)重复上述操作,改变Display Type,得到输入信号频域波形,输出信号时域波形,输出信号频域波形。如图6所示。

介绍了FIR的滤波器的实现方法

图6

可知能达到设计要求,将输入的较高频2500hz的信号滤除,让低频1000hz的信号通过。

7.调试问题

1)实验时,未做初始化设置直接进入,没有装入gel文件及相关参数,导致输入代码编译链接后不能载入程序。

解决方法:初始化设置软件仿真cpu和硬件仿真cpu,并设置其中所用的gel文件,保存并退出启动dsp选择忽略进入编辑编译初始化界面,由软件仿真cpu进入编辑编译工具。 2)在解决问题1后,载入程序,载入数据,并设置载入数据的初始地址和长度,运行程序,发现程序一直卡死在某个地方,无法显示正确的时域图和频域图。

解决方法:换了一台电脑运行,发现问题已被解决,可能原因是自己电脑安装时装少了一些文件。

介绍了FIR的滤波器的实现方法

8.心得体会

刚开始面对大作业的时候,我们都还是觉得很生疏,不知从哪里入手,尽管做过实

验。对于自己选的题目,具体需要做什么,能不能做出来,我们并不清楚。但当时间一天天过去后,我们开始认真起来了。从复习课本,再到复习实验,相互探讨编程思路,上网搜索资料,调试实验等,我们都在努力的自学着。通过这次FIR滤波器的设计,我们都有不同程度的收获。

首先,是学习上的巩固。一方面,通过复习课本和实验,对DSP的基础知识又有了很大的巩固。其次,通过对用Mathlab实现FIR滤波器的设计,熟悉了matlab软件的一些相关的窗口函数以及相关功能的调用,如怎样实现窗函数的调用,怎样实现滤波,等等。

第二,增进了与同学的交流。平常除了上课,大家也比较少接触。而每次做课程设计的时候,大家总会互相探讨,发表自己的看法,帮忙解决遇到的问题,分享自己的心得,于是交流也就不由自主的变得相对频繁些了,感觉也就更亲切了。

第三,对FIR的滤波器性能和作用有了更深一层的了解。FIR滤波器的应用十分广泛,当今许多信号处理系统和图像处理系统等都要求信号具有线性相位特性。在这方面,FIR滤波器有十分独特的优点,运用mathlab语言,我们能够很容易的设计出具有严格线性相位的FIR滤波系统,以及比较容易的实现。此外,我们还知道了FIR滤波器是永远稳定的,因为FIR滤波器的冲激响应是有限长序列,其系统函数为一个多项式,它所含的的极点多为原点。

介绍了FIR的滤波器的实现方法

参 考 文 献

【1】. 程佩青,数字信号处理,清华大学出版社 【2】.邹彦,唐东,DSP原理与应用,电子工艺出版社

【3】.王宏,MATLAB6.5在信号处理中的应用,清华大学出版社 【4】.谷萩隆嗣,数字滤波器与信号处理,科学出版社

本文来源:https://www.bwwdw.com/article/gm2i.html

Top