基于MATLAB的FIR滤波器的设计与实现

本文详细描述了一项实验,通过MATLAB实现FIR滤波器和正交移相器的设计,研究了不同窗函数对滤波器性能的影响,以及如何利用窗函数法设计低通滤波器以消除音频中的干扰。实验涉及到音频文件处理、窗函数的选择、滤波效果分析和性能优化策略。
摘要由CSDN通过智能技术生成

一、实验目的与原理

1.1 实验目的

(1)掌握 FIR 滤波器的窗化设计法

(2)了解各种窗函数对 FIR 滤波器特性的影响

(3)熟悉 FIR 正交移相器的特性及其冲击响应 h(n)

(4)掌握应用 FFT 实现序列通过数字滤波器的频域计算方法。

1.2 实验原理

1.2.1  FIR滤波器的窗化设计法

用窗函数法设计FIR 数字滤波器,首先要确定滤波器在频率域的要求, 一 般用理想滤波器H₄(el⁰)   作为希望逼近的滤波器,那么其单位脉冲响应可按下式求出:

                                   

由式求出的h₂(n) 往往是无限长的,将h₂(n) 用窗函数加以截断移位得:

                             

                                       

       

式中w(n) 为窗函数, M=(N-1)/2,N为窗长,h(n)为实际设计的滤波器的单位脉冲响应,其频率响应H(el⁰)  为:

                                              

根据设计指标确定窗函数和窗长。

用窗函数法设计滤波器,(7-2)式表明其性能取决于窗函数的性质及窗长 N,  各种窗函数的公式及特性可参考表7.1。

窗函数的作用在于压低旁瓣增加主瓣能量,以提高阻带衰减,但代价是使 过渡带加宽。各种窗函数的阻带最小衰减不同,过渡带的宽度也不同,可以根 据对阻带衰减的要求及过渡带的带宽,适当选择窗函数的形式及窗长N。

选择了窗函数的形式及窗长N 求出h(n), 按照(7-4)式求出H(e¹⁰)。 H(el⁰)能否满足要求需要验算,可以用FFT 算法检验H(el⁰) (将h(n)末尾加零,使h(n)长度满足2的正整数次幂),如果H(e¹⁰) 不满足要求,则可以重新 选择窗函数形式及长度N, 再次计算h(n)、 H(el⁰), 直到满足要求。

如果要求滤波器具有线性相位,则必须满足条件:

h(n)=±h(N-1-n)

1.2.2求复信号对LTI系统的输出

实际应用中大多是实信号,在用 FFT 快速计算线性卷积的基础上,再利用 实序列的特点可以进一步提高线性卷积的计算效率。

设两个有限长的实信号为x₁ (n)、x₂ (n), 它们要分别通过一个单位脉冲响 应为有限长实序列h(n)的系统(或滤波器),且

y₁(n)=x₁(n)×h(n)

y₂(n)=x₂(n)×h(n)

为了提高计算效率,将两次卷积合并为一次。构造一个复序列x(n), 使得:

x(n)=x₁(n)+jx₂(n)

该序列的 DFT为:

X(k)=FFT[x(X)]=X₁(k)+jX₂(k)

相应的输出序列为:

y(n)=IDFT[Y(k)]=x₁(n)×h(n)+jx₂(n)×h(n)

=y₂(n)+jy₂(n)

显然,由于x₁(n) 、x₂(n) 、h(n)   以及y₁(n) 、y₂(n)   都是实序列,所以其结果y(n)是唯一的。当序列x(n) 的长度N 远远大于h(n)的长度M 时,使用上述实序列卷积的方法,也不会得到很高的效率。在这种情况下,需要用重叠相加法或重叠保留 法来计算x(n) 与h(n) 的线性卷积(参考教材第四章)。

1.2.3 正交移相器(也称希尔伯特变换器)

在实际应用中,常常需要将某些信号的所有频率相移π/2,而幅度不变,即进行数字正交混频。此时,系统的频率响应H(el⁰)   如下:

                

称为正交移相器,其幅频响应为:

                                          

可见,正交移相器除直流等特殊频率外几乎是全通的。

正交移相器的相频响应为:

                                 

由(7-10)式可求出理想正交移相器的单位脉冲响应为:

                                       

由(7-13)式可以看出, h₄(n)  是无限长的,但随着|n| 的增加, h₄(n) 的值趋于零。因此,用窗函数截断h(n) 构成一个新的序列h。(n), 即

h(n)=h₄(n)w(n)

h(n) 是有限长非因果序列,将h。(n)作线性移位得h(n)=h,(n-M), h(n) 即为正交移相器的单位脉冲响应。

实际正交移相器除了给信号带来90°的相移以外,由于移位M 的影响还 附加了一个线性相位。因此,利用正交移相器产生正交信号时要依照图7.1  所示的模型,输出的两路信号x(n-M) 和x(n-M) 才是正交的。此时,正交移相器的长度N 为奇数,输入信号x(n)经过的延迟M 是整数。

y(n)=x(n-M)+j*(n-M)

二、实验内容

用MATLAB编程,将采样频率不同的两个音频文件读出(后缀为32的表明采样频率为32kHz,后缀为44 的表明采样频率为44.1kHz),音频文件由音乐(带宽14kHz,最高频率7kHz)、干扰1(9kHz 处)、干扰2(14kHz 处)组成。

1、设计选择不同窗函数的正交移相器,将音频文件读出,令其分别通过这些正交移相器(用重叠相加或重叠保留方法),形成复信号,观察复信号频谱,确定正交移相器的性能与移相器的阶数、窗函数的关系。

2、设计不同窗函数的FIR 低通滤波器,令通过正交移相器后的复信号通过数字低通滤波器,要求滤除干扰,将音乐通过声卡放出。观察各种窗函数对干扰1、2 的滤除效果,不同采样频率对滤波器阶数的影响。

三、程序代码说明

给出几种常见窗函数,为后续窗函数法设计希尔伯特滤波器和低通滤波器做准备工作。

希尔伯特滤波器的设计部分,此处采用汉明窗为例。

读取目标音频文件,并得到时移后的信号,绘制出二者时域图像,观察其区别。

此处给出三种信号过系统方式,第一种convolution函数为自己根据重叠相加法封装的函数,相对执行效率较低。第二种为直接卷积法。第三种为MATLAB官方封装的利用重叠相加法设计的卷积算法。

此处为信号实部与虚部相加得到一路复信号的内容。其中需要注意由于卷积算法而导致两个向量长度不同造成的问题,故添加了向量长度拓展的部分,并及时释放无用的y1 y2向量,减小对硬件设备性能的消耗。

绘制原始信号与复信号的频域图像

低通滤波器设计部分,其中设计通带截止频率为9khz

将复信号通过设计的低通滤波器,并绘制滤波前后的幅频特性曲线,观察其区别。

以上为基于MATLAB的主程序,其主要功能是利用窗函数法设计希尔伯特滤波器和低通滤波器。其中通过audioread函数读取音频文件,并并将音频数据存储在xn中,采样率存储在Fs中。通过希尔伯特滤波器得到其正交信号,并与时移后的原信号加和得到复信号。将复信号通过设计好的低通滤波器。绘制滤波前后的信号频谱图。

五、实验结果与分析

5.1 给出正交移相器的最佳设计方法,分析阶数、窗函数与正交移相器性能的关系

155阶汉明窗的希尔伯特滤波器

15阶汉明窗的希尔伯特滤波器

155阶矩形窗希尔伯特滤波器

155阶汉宁窗希尔伯特滤波器

155阶布莱克曼窗希尔伯特滤波器

通过上述几组对比可以得到在窗函数和阶数对滤波器性能的影响

阶数与性能关系:

阶数越高,滤波器的频率响应越陡峭,可以更好地分离不同频率的信号。

阶数越低,滤波器的过渡带越平缓,性能越差。

窗函数与性能关系:

窗函数可以改善滤波器的频率响应,减小滤波器的波纹和副瓣。

常用的窗函数有矩形窗、汉宁窗、汉明窗等,不同的窗函数适用于不同的应用场景。

选择合适的窗函数可以平衡滤波器的主瓣宽度和副瓣抑制。

其中矩形窗性能最差,其他三种窗函数各有优劣但总体较好。

综上所述,正交移相器的最佳设计方法是根据具体的应用需求选择合适的阶数和窗函数。较高的阶数可以提高滤波器的性能,但会增加计算复杂度。合适的窗函数可以改善滤波器的频率响应,平衡主瓣宽度和副瓣抑制

5.2 给出重叠相加法或重叠保留法中间点数的选取原则

重叠相加法中间点数的选取原则是根据滤波器的长度和每段卷积后的长度来确定。具体原则如下:

(1)计算滤波器长度M和每段卷积后的长度N,其中N = L + M - 1。

(2)初始化重叠区缓存mem为长度为N的全零数组。

(3)对输入信号x进行分段,每段长度为L。

(4)对每个分段进行卷积计算,得到卷积结果y_n。

(5)将卷积结果的前L个点与重叠区缓存的前L个点相加,得到每段卷积后的结果y[n]。

(6)更新重叠区缓存mem,将卷积结果的第L个点之后的值加到重叠区缓存的对应位置上,并将重叠区缓存的前M-1个点向前移动L个点。

(7)重复步骤3至步骤6,直到对所有分段进行卷积计算。

(8)将每段卷积后的结果展平为一维数组,作为最终的输出结果。

5.3 分析各种窗函数对近端干扰(如干扰1)和远端干扰(如干扰2)的滤除

1)滤波器的频率特性曲线

滑动平均绘图

布莱克曼窗

滑动平均绘图

矩形窗

滑动平均绘图

汉明窗

滑动平均绘图

汉宁窗

2)滤波后信号的频率特性曲线

汉宁窗

布莱克曼窗

汉明窗

矩形窗

由于矩形窗的衰减系数不足,导致在单次滤波后不能将噪声信号衰减到0dB以下,但在实际实验过程中由于噪声信号也得到了一定程度上的衰减故在播放滤波后音频时即使是矩形窗设计的滤波器,播放出来的音乐噪声也并不明显。

5.4 分析采样率对FIR滤波器的影响

以矩形窗设计的窗函数为例,通带截止频率设为9khz不变,观察采样率对滤波器频率响应的影响。

9000/44100=0.2041

可以观察到与频率响应中通带截止频率相符合

当采样率改为32khz时,不改变滤波器的其他参数,只观察其频率响应。

通过上图可以观察到其通带截止频率已经变大约为0.28

经过理论计算9000/32000=0.2813

实际值与理论值相符合。

故当采样率改变时,即使滤波器的截止频率(模拟频率)不改变的情况下,根据公式

                                   

可以得到数字角频率的改变。

六、总结

1.影响希尔伯特滤波器性能的总结。

(1)窗函数。矩形窗最差,汉明窗,汉宁窗,布莱克曼窗三者差异不大。

(2)滤波器阶数。阶数越高过渡带越陡峭,性能越高。阶数越低,过渡带越平缓,性能越差。

2.重叠相加法与直接卷积的比较

按理论情况,重叠相加法是对直接卷积算法的改进,一定程度上节约了空间和时间,减轻了硬件压力。但是由于实验是在PC机上完成,与实际工程中的dsp设备存在一定的差异。就导致在实际实验中出现直接卷积法在时间上由于重叠相加法的现象。

3.分析各种窗函数对近端干扰(如干扰1)和远端干扰(如干扰2)的滤除性能,给出窗函数选取原则。

对于低通滤波器而言,在高于通带截止频率的部分随着频率增加而衰减度不断提高。因此远端干扰相对于近端干扰而言更容易滤除。对于能量较大的近端干扰,需要选择衰减系数较大的窗函数(如汉明窗和汉宁窗)。

常见的窗函数包括矩形窗、汉宁窗、汉明窗、布莱克曼窗等。其中,矩形窗具有最小的主瓣宽度,但副瓣幅度较大;汉宁窗具有较好的副瓣抑制能力,主瓣宽度相对较大;汉明窗在主瓣宽度和副瓣抑制能力之间取得了一定的平衡;布莱克曼窗在主瓣宽度和副瓣抑制能力上都相对较好。

在选择窗函数时,需要根据具体的应用需求来进行选择。一般来说,如果对频率分辨率要求较高,可以选择矩形窗;如果对副瓣抑制能力要求较高,可以选择汉宁窗或汉明窗;如果需要在频率分辨率和副瓣抑制能力之间取得平衡,可以选择布莱克曼窗。

这是一篇我的课程实验报告,源码和音频附件不方便公开上传,如有需要请及时联系,

  • 19
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值