视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于DSP的数字滤波器的设计与仿真实现--黄雄霞
2025-10-03 14:47:36 责编:小OO
文档
摘要

DSP数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。传感器数字信号处理是利用传感器对模拟信号或数字信号进行采集并把其转换成计算机可识别的电信号,并利用计算机对信号进行处理以达到计算机辅助控制或是计算机自动控制的目的。

随着计算机和信息技术的飞速发展,数字信号处理已经成为高速实时处理的一项关键技术,广泛应用在语音识别、智能检测、工业控制等各个领域。数字滤波器是对数字信号实现滤波的线性时不变系统。数字滤波实质上是一种运算过程,实现对信号的运算处理。

DSP 芯片是一种特别适合数字信号处理运算的微处理器,主要用来实时、快速地实现各种数字信号处理算法。用DSP 芯片实现IIR 数字滤波器,不仅具有精确度高、不受环境影响等优点,而且因DSP 芯片的可编程性,可方便地修改滤波器参数,从而改变滤波器的特性,设计十分灵活。

本课题主要应用MATLAB软件设计IIR数字滤波器,并对所设计的滤波器进行仿真;应用DSP集成开发环境——CCS调试汇编程序的实现方法。

关键词:IIR;DSP;MATLAB;数字滤波;

目录

1 绪论    3

1.1 数字滤波器的优越性    3

1.2 数字滤波器的分类    4

1.3 数字滤波器的实现方法    5

2 IIR数字滤波器的介绍    7

2.1 IIR滤波器的设计方法及原理    8

3 IIR滤波器的MATLAB实现    14

3.1 IR滤波器的设计过程    14

3.2 Matlab的IIR滤波器的滤波效果    14

4 IIR数字滤波器的DSP实现    16

4.1 DSP系统的特点    17

4.2 DSP系统的开发工具CCS    18

4.3 IIR滤波器设计总框图    20

4.4IIR滤波器的DSP实现效果    20

5 总结与体会    22

6 参考文献    23

7 致谢    23

8 附录    24

1 绪论

1.1 数字滤波器的优越性

DSP 芯片是一种特别适合数字信号处理运算的微处理器,主要用来实时、快速地实现各种数字信号处理算法。数字信号处理由于具有精度高、灵活性强等优点,已广泛应用于图像处理、数字通信、雷达等领域。数字滤波技术在数字信号处理中占有极其重要的地位,数字滤波器根据其单位脉冲响应可分为IIR(无限长冲激响应滤波器)和FIR(有限长冲激响应滤波器)两类。IIR滤波器可以用较少的阶数获得很高的选择特性,但在有限精度的运算中,可能出现不稳定现象,而且相位特性不好控制。数字滤波器本质上是一个完成特定运算的数字计算过程,也可以理解为是一台计算机。

数字滤波器又分为无限冲激响应滤波器(IIR)和有限冲激响应滤波器(FIR)。FIR滤波器具有不含反馈环路、结构简单以及可以实现的严格线性相位等优点,因而在对相位要求比较严格的条件下,采用FIR数字滤波器。同时,由于在许多场合下,需要对信号进行实时处理,因而对于单片机的性能要求也越来越高。由于DSP控制器具有许多独特的结构,例如采用多组总线结构实现并行处理,的累加器和乘法器以及丰富的寻址方式,采用 DSP控制器就可以提高数字信号处理运算的能力,可以对数字信号做到实时处理。DSP(数字信号处理器)与一般的微处理器相比有很大的区别,它所特有的系统结构、指令集合、数据流程方式为解决复杂的数字信号处理问题提供了便利,本文选用TMS320C5509作为DSP处理芯片,通过对其编程来实现IIR滤波器。

对数字滤波器而言,从实现方法上,有FIR滤波器和无限冲激响应(IIR)滤波器之分。由于FIR滤波器只有零点,因此这一类系统不像IIR系统那样易取得比较好的通带与阻带衰减特性。但是IIR系统与传统的通过硬件电路实现的模拟滤波器相比有以下优点:

1、单位冲击响应有无限多项;

2、高效率(因为结构简单、系数小、乘法操作较少)

3、与模拟滤波器有对3应关系

4、可以解析控制,强制系统在指定位置为零点

5、有极点,在设计时要考虑稳定性

6、具有反馈,可能产生噪声、误差累积

1.2 数字滤波器的分类

按照不同的分类方法,数字滤波器有许多种类,但总起来可以分成两大类:经典滤波器和现代滤波器。经典滤波器的特点是其输入信号中有用的频率成分和希望滤除的频率成分占有不同的频带,通过一个合适的选频滤波器滤除干扰,得到纯净信号,达到滤波的目的。但是,如果信号和干扰的频谱相互重叠,则经典滤波器不能有效地滤除干扰,最大限度地恢复信号,这时就需要现代滤波器,例如维纳滤波器、卡尔曼滤波器、自适应滤波器等最佳滤波器。现代滤波器是根据随机信号的一些统计特性,在某种最佳准则下,最大限度地抑制干扰,同时最大限度地回复信号,从而达到最佳滤波的目的。

经典数字滤波器从滤波特性上分类,可以分为:低通滤波器、高通滤波器、带通滤波器、带阻滤波器。

图1-1 各种理想滤波器的幅频特性

数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)数字滤波器和有限长冲激响应(FIR)数字滤波器。IIR 数字滤波器的特征是,具有无限持续时间冲激响应,需要用递归模型来实现,

其差分方程为:

      (式1-2)

系统函数为: 

     (式1-3)

设计IIR滤波器的任务就是寻求一个物理上可实现的系统函数H(z),使其频率响应H(z)满足所希望得到的频域指标,即符合给定的通带截止频率、阻带截止频率、通带衰减系数和阻带衰减系数。

1.3 数字滤波器的实现方法

目前数字滤波器的主要实现方法有:

1.在通用的微型计算机上用软件实现。软件可以是自己编写的,也可以使用现成的软件包,这种方法的缺点是速度太慢,不能用于实时系统,只能用于教学和算法的仿真研究。比如用MATLAB就几乎可以实现所有数字滤波器的仿真。而且在MATLAB下的部分仿真程序还可以通过转化为C语言,再通过DSP的C编译器直接在DSP硬件上运行。

2.用DSP(Digital Signal Processing)处理器实现

DSP处理器是专为数字信号处理而设计的,如TI公司的TMS320C54x系列,AD公司的ADSP2IX,ADSP210X系列等。它的主要数字运算单元是一个乘累加器(Multiply-accumulator,MAC),能够在一个机器周期内完成一次乘累加运算,配有适合于信号处理的指令,具备独特的循环寻址和倒序寻址能力。这些特点都非常适合数字信号处理中的滤波器设计的有效实现,并且它速度快、稳定性好、编程方便。

3.用固定功能的专用信号处理器实现

专用信号处理器采用专用集成电路ASIC(Application Specific Integrated Circuits)实现,适用于过程固定而又追求高速的信号处理任务,是以指定的算法来确定它的结构,使用各种随机逻辑器件组成的信号处理器。它们体积小、保密性好,具有极高的性能,但灵活性差。

4.用FPGA等可编程器件来开发数字滤波算法。由于FPGA产品的迅速发展,人们可以利用Atera、Xilinx等产品,使用其相关开发工具和VHDL等硬件开发语言,通过软件编程用硬件实现特定的数字滤波算法。这一方法由于具有通用性的特点并可以实现算法的并行运算,无论是作为的数字信号处理器,还是作为DSP芯片的协处理器,目前都是比较活跃的研究领域。

比较以上方法可见:可以采用MATLAB等软件来学习数字滤波器的基本知识,计算数字滤波器的系数,研究算法的可行性,对数字滤波器进行前期的设计和仿真。而后,用DSP处理器或FPGA进行数字滤波的硬件实现。本课题设计的IIR数字滤波器就是用MATLAB进行设计和仿真,用DSP处理器来实现。

2 IIR数字滤波器的介绍

数字滤波器是对数字信号实现滤波的线性时不变系统。数字滤波实质上是一种运算过程,实现对信号的运算处理。输入数字信号(数字序列)通过特定的运算转变为输出的数字序列,因此,数字滤波器本质上是一个完成特定运算的数字计算过程,也可以理解为是一台计算机。描述离散系统输出与输入关系的卷积和差分方程只是给数字信号滤波器提供运算规则,使其按照这个规则完成对输入数据的处理。时域离散系统的频域特性:

                  

其中、分别是数字滤波器的输出序列和输入序列的频域特性(或称为频谱特性),是数字滤波器的单位取样响应的频谱,又称为数字滤波器的频域响应。输入序列的频谱经过滤波后,因此,只要按照输入信号频谱的特点和处理信号的目的, 适当选择,使得滤波后的满足设计的要求,这就是数字滤波器的滤波原理。

数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)数字滤波器和有限长冲激响应(FIR)数字滤波器。IIR 数字滤波器的特征是,具有无限持续时间冲激响应,需要用递归模型

来实现,其差分方程为:

系统函数为:

设计IIR滤波器的任务就是寻求一个物理上可实现的系统函数H(z),使其频率响应H(z)满足所希望得到的频域指标,即符合给定的通带截止频率、阻带截止频率、通带衰减系数和阻带衰减系数。

2.1 IIR滤波器的设计方法及原理

IIR数字滤波器是一种离散时间系统,其系统函数为

                    

假设M≤N,当M>N时,系统函数可以看作一个IIR的子系统和一个(M-N)的FIR子系统的级联。IIR数字滤波器的设计实际上是求解滤波器的系数和 ,它是数学上的一种逼近问题,即在规定意义上(通常采用最小均方误差准则)去逼近系统的特性。如果在S平面上去逼近,就得到模拟滤波器;如果在z平面上去逼近,就得到数字滤波器。

(1)用脉冲相应不变法设计IIR数字滤波器 

利用模拟滤波器来设计数字滤波器,也就是使数字滤波器能模仿模拟滤波器的特性,这种模仿可以从不同的角度出发。脉冲响应不变法是从滤波器的脉冲响应出发,使数字滤波器的单位脉冲响应序列h(n)模仿模拟滤波器的冲激响应ha(t),即将ha(t)进行等间隔采样,使h(n)正好等于ha(t)的采样值,满足

                           h(n)=ha(nT)

式中,T是采样周期。

如果令Ha(s)是ha(t)的拉普拉斯变换,H(z)为h(n)的Z变换,利用采样序列的Z变换与模拟信号的拉普拉斯变换的关系得

(1-1)

则可看出,脉冲响应不变法将模拟滤波器的S平面变换成数字滤波器的Z平面,这个从s到z的变换z=esT是从S平面变换到Z平面的标准变换关系式。

图2-1脉冲响应不变法的映射关系

由(1-1)式,数字滤波器的频率响应和模拟滤波器的频率响应间的关系为

(1-2)

这就是说,数字滤波器的频率响应是模拟滤波器频率响应的周期延拓。

正如采样定理所讨论的,只有当模拟滤波器的频率响应是限带的,且带限于折叠频率以内时,即 

(1-3)

才能使数字滤波器的频率响应在折叠频率以内重现模拟滤波器的频率响应,而不产生混叠失真,即

                        (1-4)

但是,任何一个实际的模拟滤波器频率响应都不是严格限带的,变换后就会产生周期延拓分量的频谱交叠,即产生频率响应的混叠失真,如图7-4所示。这时数字滤波器的频响就不同于原模拟滤波器的频响,而带有一定的失真。当模拟滤波器的频率响应在折叠频率以上处衰减越大、越快时,变换后频率响应混叠失真就越小。这时,采用脉冲响应不变法设计的数字滤波器才能得到良好的效果。

图2-2脉冲响应不变法中的频响混叠现象

     对某一模拟滤波器的单位冲激响应ha(t)进行采样,采样频率为fs,若使fs增加,即令采样时间间隔(T=1/fs)减小,则系统频率响应各周期延拓分量之间相距更远,因而可减小频率响应的混叠效应。

脉冲响应不变法优缺点:

从以上讨论可以看出,脉冲响应不变法使得数字滤波器的单位脉冲响应完全模仿模拟滤波器的单位冲激响应,也就是时域逼近良好,而且模拟频率Ω和数字频率ω之间呈线性关系ω=ΩT。因而,一个线性相位的模拟滤波器(例如贝塞尔滤波器)通过脉冲响应不变法得到的仍然是一个线性相位的数字滤波器。

脉冲响应不变法的最大缺点是有频率响应的混叠效应。所以,脉冲响应不变法只适用于限带的模拟滤波器(例如,衰减特性很好的低通或带通滤波器),而且高频衰减越快,混叠效应越小。至于高通和带阻滤波器,由于它们在高频部分不衰减,因此将完全混淆在低频响应中。如果要对高通和带阻滤波器采用脉冲响应不变法,就必须先对高通和带阻滤波器加一保护滤波器,滤掉高于折叠频率以上的频率,然后再使用脉冲响应不变法转换为数字滤波器。当然这样会进一步增加设计复杂性和滤波器的阶数。

(2)用双线性变换法设计IIR数字滤波器

脉冲响应不变法的主要缺点是产生频率响应的混叠失真。这是因为从S平面到Z平面是多值的映射关系所造成的。为了克服这一缺点,可以采用非线性频率压缩方法,将整个频率轴上的频率范围压缩到-π/T~π/T之间,再用z=esT转换到Z平面上。也就是说,第一步先将整个S平面压缩映射到S1平面的-π/T~π/T一条横带里;第二步再通过标准变换关系z=es1T将此横带变换到整个Z平面上去。这样就使S平面与Z平面建立了一一对应的单值关系,消除了多值变换性,也就消除了频谱混叠现象,映射关系如图2-3所示。

图2-3双线性变换的映射关系

为了将S平面的整个虚轴jΩ压缩到S1平面jΩ1轴上的-π/T到π/T段上,可以通过以下的正切变换实现

(1-5)

式中,T仍是采样间隔。

当Ω1由-π/T经过0变化到π/T时,Ω由-∞经过0变化到+∞,也即映射了整个jΩ轴。将式(1-5)写成

将此关系解析延拓到整个S平面和S1平面,令jΩ=s,jΩ1=s1,则得

再将S1平面通过以下标准变换关系映射到Z平面

                    z=es1T

从而得到S平面和Z平面的单值映射关系为:

(1-6)

(1-7)

式(1-6)与式(1-7)是S平面与Z平面之间的单值映射关系,这种变换都是两个线性函数之比,因此称为双线性变换。

首先,把z=ejω,可得                                     (1-8)

即S平面的虚轴映射到Z平面的单位圆。

其次,将s=σ+jΩ代入式(1-8),得

因此

由此看出,当σ<0时,|z|<1;当σ>0时,|z|>1。也就是说,S平面的左半平面映射到Z平面的单位圆内,S平面的右半平面映射到Z平面的单位圆外,S平面的虚轴映射到Z平面的单位圆上。因此,稳定的模拟滤波器经双线性变换后所得的数字滤波器也一定是稳定的。

双线性变换法优缺点

双线性变换法与脉冲响应不变法相比,其主要的优点是避免了频率响应的混叠现象。这是因为S平面与Z平面是单值的一一对应关系。S平面整个jΩ轴单值地对应于Z平面单位圆一周,即频率轴是单值变换关系。这个关系如式(1-8)所示,重写如下:

上式表明,S平面上Ω与Z平面的ω成非线性的正切关系,如图2-4所示。

图2-4双线性变换法的频率变换关系

由图1-4看出,在零频率附近,模拟角频率Ω与数字频率ω之间的变换关系接近于线性关系;但当Ω进一步增加时,ω增长得越来越慢,最后当Ω→∞时,ω终止在折叠频率ω=π处,因而双线性变换就不会出现由于高频部分超过折叠频率而混淆到低频部分去的现象,从而消除了频率混叠现象。但是双线性变换的这个特点是靠频率的严重非线性关系而得到的,如式(1-8)及图1-4所示。由于这种频率之间的非线性变换关系,就产生了新的问题。首先,一个线性相位的模拟滤波器经双线性变换后得到非线性相位的数字滤波器,不再保持原有的线性相位了;其次,这种非线性关系要求模拟滤波器的幅频响应必须是分段常数型的,即某一频率段的幅频响应近似等于某一常数(这正是一般典型的低通、高通、带通、带阻型滤波器的响应特性),不然变换所产生的数字滤波器幅频响应相对于原模拟滤波器的幅频响应会有畸变,如图2-5所示。

图2-5双线性变换法幅度和相位特性的非线性映射

对于分段常数的滤波器,双线性变换后,仍得到幅频特性为分段常数的滤波器,但是各个分段边缘的临界频率点产生了畸变,这种频率的畸变,可以通过频率的预畸来加以校正。也就是将临界模拟频率事先加以畸变,然后经变换后正好映射到所需要的数字频率上。

3 IIR滤波器的MATLAB实现

3.1 IIR滤波器的设计过程

根据以上IIR数字滤波器设计方法,下面运用双线性变换法基于MATLAB设计一个IIR低通滤波器,其中通带截止频率ωp=0.4π,阻带截止频率ωs=0.6π;通带最大衰减αp=3dB;阻带最小衰减αs=30dB。

设计步骤:

(1)根据任务,确定性能指标:在设计低通滤波器之前,首先根据工程实际的需要(噪声为2500Hz的正弦叠加噪声)确定滤波器的技术指标:

    采样频率为fs为44100Hz;

通带截止频率ωp=0.4π,阻带截止频率ωs=0.6π;阻带最小衰减αs=3dB和通带最大衰减αp=30dB;

(2)设计模拟低通原型滤波器。用模拟低通滤波器设计方法得到模拟低通滤波器的传输函数Ha(s);借助巴特沃斯(Butterworth)滤波器、切比雪夫(Chebyshev)滤波器、椭圆(Cauer)滤波器、贝塞尔(Bessel)滤波器等。

(3)调用lp2lp函数将模拟低通滤波器转化为模拟带通滤波器。

(4)利用双线性变换法将模拟低通滤波器Ha(s)转换成数字带低滤波器H(z)。

3.2 Matlab的IIR滤波器的滤波效果

(1)我们先导入一段自己先前录好的语音信号(hxx.wav),再加入频率为2500Hz的正弦噪声,噪声+原始信号的频谱图前1500Hz内为原始信号,2500Hz处叠加了噪声信号,原始信号、噪声信号、信号+噪声的波形及频谱图分别如下3-1,3-2所示。

图3-1 各信号(原始信号、噪声信号、原始信号+噪声波形图)

图3-2 各信号(原始信号、噪声信号、原始信号+噪声频谱图)

  (2)由噪声频谱与语音信号频谱可知,语音信号多为低频信号,只需设计一个低通滤波器,滤掉相对高频的噪声信号即可,图3-2为滤波器的频响图、滤波后信号的波形图和频谱图。如图对比可知,滤波器大体在2500Hz截止,滤波后的频谱可清晰的看到2500Hz之后的信号都通过不了。

图3-3  滤波器的频响图和滤波后的波形、频谱图

4 IIR数字滤波器的DSP实现

数字信号处理器(Digital Signal Processor)是一种适合对数字信号进行高速实时处理的专用处理器,其主要用来实时快速地实现各种数字信号处理算法。在当今的数字化时代,DSP己成为通信设备、计算机和其它电子产品的基础器件。

数字信号处理器与数字信号处理有着密不可分的关系,我们通常说的“DSP”可以指数字信号处理(Digital Signal Processing),也可以代表数字信号处理器(Digital Signal Processor)在本文里均指数字信号处理器。数字信号处理是一门包括了许多学科并应用于很多领域的学科,是指利用计算机或是专用处理设备,以数字形式对信号进行分析、采集、合成、变换、滤波、估值、压缩、识别等处理,得到符合要求的信号形式。数字信号处理器是用于处理数字信号的器件,因此它是伴随着数字信号处理才产生的。

DSP发展历程大致分为三个阶段:20世纪70年代理论先行,80年代产品普及和90年代的突飞猛进。在DSP出现之前数字信号处理只能依靠微处理器(MPU)来完成。但MPU较低的处理速度无法满足高速实时的要求。因此,直到20世纪70年代,有人才提出了DSP的理论和算法基础。随着大规模集成电路技术的发展,1982年世界上诞生了第一片DSP芯片。几年后,第二代基于CMOS工艺的DSP芯片应运而生。80年代后期,第三代DSP芯片问世。90年代DSP发展最快,相继出现了和第五代DSP器件。经过20多年的发展,DSP产品的应用己扩大到人们的学习、工作和生活的各个方面,并逐渐成为电子产品更新换代的决定因素。

4.1 DSP系统的特点

DSP系统的开发是一个复杂的过程,在系统的设计和调试中不但需要数字信号处理方面的理论知识,而且还要熟悉掌握各种DSP芯片、外围硬件电路以及DSP开发工具等。

DSP系统是以数字信号处理为基础的,因此不但具有数字处理的全部优点而且还具有以下特点[24]:

1.接口方便:DSP应用系统与其他以现代数字技术为基础的系统或设备都是相互兼容的,这样的系统接口以实现某种功能要比模拟系统与这些系统接口要容易得多。

2.编程方便:DSP应用系统中的可编程DSP芯片,能灵活方便地进行修改和升级。

3.稳定性好:DSP应用系统以数字处理为基础,受环境温度及噪声的影响较小、可靠性高,无器件老化现象。

4.精度高:16位数字系统可以达到10-5级的精度。

5.可重复性好:模拟系统的性能受元器件参数性能变化的影响比较大,而数字系统基本不受影响,因此数字系统便于测试、调试和大规模生产。

6.集成方便:DSP应用系统中的数字部件有高度的规范性,便于大规模集成。

当然,数字信号处理也存在一些缺点。例如,对于简单信号处理任务,若采用DSP则使成本增加。DSP系统中的高速时钟可能带来高频干扰和电磁泄漏等问题,而且DSP系统消耗的功率也较大。此外,DSP技术更新速度快,对于数学知识要求高,开发和测试工具还有待进一步完善。

4.2 DSP系统的开发工具CCS

CCS是一种针对TMS320系列DSP的集成开发环境,在Windows操作系统下,采用图形接口界面,提供有环境配置、源文件编辑、程序调试、跟踪和分析等工具。

CCS有两种工作模式,即

软件仿真器模式:可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。

硬件在线编程模式:可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序。 

CCS的开发系统主要由以下组件构成: 

1.TMS320C54x集成代码产生工具;

2.CCS集成开发环境;

3.DSP/BIOS实时内核插件及其应用程序接口API;

4.实时数据交换的RTDX插件以及相应的程序接口API;

5.由TI公司以外的第三方提供的各种应用模块插件。    

CCS的功能十分强大,它集成了代码的编辑、编译、链接和调试等诸多功能,而且支持C/C++和汇编的混合编程,其主要功能如下: 

1.具有集成可视化代码编辑界面,用户可通过其界面直接编写C、汇编、.cmd文件等;

2.含有集成代码生成工具,包括汇编器、优化C编译器、链接器等,将代码的编辑、编译、链接和调试等诸多功能集成到一个软件环境中;

3.高性能编辑器支持汇编文件的动态语法加亮显示,使用户很容易阅读代码,发现语法错误;

4.工程项目管理工具可对用户程序实行项目管理。在生成目标程序和程序库的过程中,建立不同程序的跟踪信息,通过跟踪信息对不同的程序进行分类管理;

5.基本调试工具具有装入执行代码、查看寄存器、存储器、反汇编、变量窗口等功能,并支持C源代码级调试;

6.断点工具,能在调试程序的过程中,完成硬件断点、软件断点和条件断点的设置;

7.探测点工具,可用于算法的仿真,数据的实时监视等;

8.分析工具,包括模拟器和仿真器分析,可用于模拟和监视硬件的功能、评价代码执行的时钟;

9.数据的图形显示工具,可以将运算结果用图形显示,包括显示时域/频域波形、眼图、星座图、图像等,并能进行自动刷新; 

10.提供GEL工具。利用GEL扩展语言,用户可以编写自己的控制面板/菜单,设置GEL菜单选项,方便直观地修改变量,配置参数等;

11.支持多DSP的调试;

12.支持RTDX技术,可在不中断目标系统运行的情况下,实现DSP与其他应用程序的数据交换;

13.提供DSP/BIOS工具,增强对代码的实时分析能力。

4.3 IIR滤波器设计总框图

IIR滤波器设计总框图如图4-1所示

图4-1 滤波器设计框图

4.4IIR滤波器的DSP实现效果

     在CCS上实现Matlab到DSP的滤波器的移植,首先要获取Matlab上设计好的低通滤波器的阶数(13)、系数、采样频率(44100)等。

  (1)此低通滤波器采用的是2000Hz的正弦波(充当原始信号)+12000Hz的正弦波(充当噪声信号),目的是滤除12000Hz的正弦波。滤波前正弦波叠加的波形图与频谱图分别如图4-2,4-3。

图4-2  2000Hz+12000Hz叠加的正弦波波形

图4-3  2000Hz+12000Hz叠加的频谱图

(2)滤波器为阻带频率为2000Hz的低通滤波,可滤除12000Hz的高频正弦波,滤波后的波形与频谱图分别如图4-4和图4-5。

图4-4  滤波后即2000Hz信号的波形图

图4-5  滤波后即2000Hz信号的频谱图

5 总结与体会

    本文对IIR滤波器的设计作了详细的介绍,实现了语音信号的基本处理的功能,经过测试运行,基本达到预期目的。完成了对语音信号的语音信号的频谱分析,通过fft变换,得出了语音信号的频谱图;在滤波这一块,基本实现了滤波,完成了滤波器的滤波效果前后比较,与课设的要求十分相符。

 本课设采用了高效快捷的开发工具——MATLAB,实现了语音信号的采集,对语音信号加噪声及设计滤波器滤除噪声的一系列工作,再将其获得的滤波器系数导入CCS中,利用DSP高速完成大量数据的读取,验证IIR滤波器滤波功能。本实验中还是存在一些问题,比如滤波器的设计种类还比较单一、没有做更多的滤波效果比较、CCS波形输出时的操作问题等。课设主要是先借由MATLAB仿真得出正确的低通滤波器的系数、阶数、采样频率等,再在CCS上移植完成DSP实现滤波器的验证,在实验最开始由于没有设置断点,导致后台读取数据时,数据一直得不到实时更新,还有CCS的graph画图部分的参数设置(采样频率、缓冲尺寸等)也很让人费解,不过庆幸的是,通过学长耐心的解答和自己百度搜索的答案,我还是相对顺利的完成了课设。

6 参考文献

[1].罗军辉. MATLAB 7.0在数字信号处理中的应用[M]. 机械工业出版社, 2005.

[2].王芳, 于金兰. Matlab在电子信息类课程中的应用[C]// 全国高等学校电子信息科学与工程类专业教学协作会议. 2008.

[3].邹彦. DSP原理及应用.修订版[M]. 电子工业出版社, 2012.

[4].程佩青. 数字信号处理教程.第2版[M]. 清华大学出版社, 2001.

[5].张雄伟陈亮徐光辉. DSP集成开发与应用实例[M]. 电子工业出版社, 2002.

7 致谢

     经过努力和完善,系统终于可以正常的运行。 在这里首先感谢老师,在这段时间认真负责的监督我们的进度,学长耐心的指导我们使我们能够按时的完成任务。还有感谢学校为我们提供的良好实验环境以及充足的实验设备,为我们的设计和调试提供了很大的方便。还要感谢在实验过程中帮助我的同学,感谢他们热心的帮助,耐心的讲解和示范。在这段时间学到了很多,虽然由于自身的不足没有能够为系统提出更好的解决方案。但这对我来说绝对是一个非常宝贵的历练。从中,我切身体会到了理论和现实的差距,只有真正动手去做才能发现问题。最后,感谢所有对我提供过帮助的人。谢谢。

8 附录

1、Matlab代码

[x,fs,bits]=wavread('hxx.wav');

f=2500;

x=x(:,1);

N=length(x);%测定语音信号长度

x=x';%对语音信号进行转置,使N行1列矩阵变为1行N列矩阵

n=0:1/fs:(N-1)/fs;

s=0.05*sin(2*pi*f*n);%噪声信号

y=x+s;%信号加噪声

f1=0:fs/N:fs*(N-1)/N;%横坐标,f1为频率

x1=fft(x,N);

s1=fft(s,N);

Y=fft(y,N);

figure(1);

subplot(311);plot(n,x);title('原始信号波形图');

xlabel('t/s');ylabel('幅值');

subplot(312);plot(n,s);title('噪声信号波形图');ylim([-0.08,0.08]);

xlabel('t/s');ylabel('幅值');

subplot(313);plot(n,y);title('信号+噪声信号波形图');

xlabel('t/s');ylabel('幅值');

 

figure(2);

subplot(311);plot(f1,abs(x1));title('原始信号频谱图');

xlabel('频率/Hz');  ylabel('频率响应幅度');xlim([0,fs/12]);

subplot(312);plot(f1,abs(s1));title('噪声信号频谱图');

xlabel('频率/Hz');  ylabel('频率响应幅度');xlim([0,fs/12]);

subplot(313);plot(f1,abs(Y));title('信号+噪声频谱图');

xlabel('频率/Hz');  ylabel('频率响应幅度');xlim([0,fs/12]);

 

%%%%%%%%%%%%%%滤波器设计%%%%%%%%%%%%%%%%%%%%

%%根据原始信号与噪声信号频谱图,选择巴特沃斯低通滤波器

%%滤波器性能指标:Rp=2,Rs=15

%选择滤波器的最小阶数

wp=1500*2*pi;ws=2000*2*pi;Rp=3;Rs=30;

%wp=2000*2*pi;ws=44100*2*pi;Rp=2;Rs=25;

[N1,Wn]=buttord(wp,ws,Rp,Rs,'s');

%创建butterworth模拟滤波器

[Z,P,K]=buttap(N1);

%把滤波器的零极点模型转化为传递函数模型

[Bap,Aap]=zp2tf(Z,P,K);

%把模拟滤波器原型转换成截止频率为Wn的低通滤波器

[b,a]=lp2lp(Bap,Aap,Wn);

%[b,a]=lp2hp(Bap,Aap,Wn);%高通滤波器

%用双线性变换法实现模拟滤波器到数字滤波器的转换

[bz,az]=bilinear(b,a,fs);

%绘制频率响应曲线

[H,W]=freqz(bz,az);

 

figure(3);

subplot(311),

plot(W*fs/(2*pi),abs(H));  grid  

title('butterworth低通滤波器频响图');xlabel('频率/Hz');  ylabel('频率响应幅度');

%%%%%%%用所设计的滤波器对语音+噪声信号y滤波%%%%%%%

y1=filter(bz,az,y);

Y1=abs(fft(y1,N));

subplot(312),plot(n,y1);title('滤波后信号波形图');

xlabel('t/s');  ylabel('频率响应幅度');

subplot(313),plot(f1,Y1);title('低通滤波后信号频谱图');

 xlabel('频率/Hz'); ylabel('频率响应幅度');xlim([0,fs/12]);

 

sound(x,fs);%播放语音信号

%csvwrite('hxx.dat',x);

sound(s,fs);%播放噪声信号

sound(y,fs);%播放语音+噪声信号

sound(y1,fs);%播放滤波后的信号

2、DSP代码(C语言)    

#include"math.h"

#include "stdio.h"

#define IIRNUMBER 14      //滤波系数个数,阶数为13阶

#define SIGNAL1F 2000      //模拟频率

#define SIGNAL2F 12000     //模拟频率

#define SAMPLEF  44100    //采样频率

#define PI 3.1415926

float InputWave();

float IIR(float);

float fBn[IIRNUMBER] = {

 0.0001,0.0017,0.0100,0.0361,0.0923,0.1621,0.2216,0.2162,0.1662,0.0902, 0.0369,0.0098,0.0017,0.0001

 };  //分子系数

float fAn[IIRNUMBER] = {

    1.0000,-11.1948,57.9522,-183.6743,397.6242,-620.8442,719.22,-625.9845,409.24, -198.4933,

   69.4203,-16.5778,2.4227,-0.1636

 };  //分母系数

float dd[IIRNUMBER]={0.0};   //中间变量

float fInput,fOutput;

float fSignal1,fSignal2;

float fStepSignal1,fStepSignal2;

float f2PI;

int j;

float fIn[256],fOut[256];

int nIn,nOut;

main()

{

          nIn=0; nOut=0;

          f2PI=2*PI;

          fSignal1=0.0;      //初始相位

          fSignal2=PI*0.1;   //初始相位

          fStepSignal1=2*PI * SIGNAL1F / SAMPLEF;   //波形1数字频率

        fStepSignal2=2*PI * SIGNAL2F / SAMPLEF;   //波形2数字频率

    while (1)

    {

        fInput=InputWave();   //输入Xn

        fIn[nIn]=fInput;

        nIn++; nIn%=256;      //防止溢出

        fOutput=IIR(fInput);  //输出Yn

        fOut[nOut]=fOutput;

        nOut++;                  // 请在此句上设置软件断点 

     if (nOut>=256) //防止溢出

        {

            nOut=0;        

        }

    }

}

float InputWave()     //产生波形

{

    float Xn;

    Xn = sin(fSignal1)+0.5*sin(fSignal2);

    fSignal1+=fStepSignal1; 

if (fSignal1>=f2PI)    fSignal1-=f2PI;

    fSignal2+=fStepSignal2;

if(fSignal2>=f2PI)    fSignal2-=f2PI;

    return(Xn);

}

float IIR(float Xn)    //直接II型IIR滤波

{

    float Yn=0.0;

    float ya=0.0; 

for(j=IIRNUMBER-1;j>0;j--) //中间变量dd[i]向后移一位

    {         

          dd[j]=dd[j-1];

    }

for(j=1;j    {         

           ya+=fAn[j]*dd[j];

    }

        ya=Xn-ya;         //输入Xn

        dd[0]=ya;        //更新中间变量dd       

    

for(j=0;j    {

            Yn+=fBn[j]*dd[j];

    }

    return Yn;       //输出Yn

}下载本文

显示全文
专题