基于汉宁窗的FIR高通滤波器设计

摘要:本课程设计使用MATLAB对基于汉宁窗的FIR高通滤波器进行设计,并对采集的语音信号进行滤波,从而实现语音去噪。在设计过程中,首先选用自行录制的一段音频音乐作为输入信号,并对录制的信号进行采样,绘制出采样后音频信号的时域图和频谱图;然后,通过在音频信号中叠加多个低频正弦频率分量进行加噪,并利用设计的基于汉宁窗的FIR高通滤波器,对叠加了低频噪声的音频信号进行高通滤波;最后依据滤波器的性能指标对仿真结果进行分析,通过回放录音对比去噪效果,并对比滤波前后的信号时域频域图的波形变化,给出滤波器特性曲线。最终,本课程设计出的滤波器性能指标和降噪效果都可以满足要求,验证了所设计巴特沃斯滤波器的有效性。

关键词:MATALB 汉宁窗 FIR高通滤波器 音频滤波 正弦噪声

1、引言

​ 数字信号处理在现代通信、音频和图像处理等领域中得到了广泛的应用,而数字滤波器是其中的重要组成部分。数字滤波器是一种用于信号处理的数学模型,其目的是将输入信号经过滤波器后输出所需的信号。一般数字滤波器从功能上分类,和模拟滤波器一样,可以分成低通、高通、带通和带阻等滤波器,它可以是时不变的或时变的、因果的或非因果的、线性的或非线性的。其中,高通FIR滤波器是数字滤波器的一种重要类型,其特点是通过去除低频分量并保留高频分量,可以提高信号的质量和准确性,被广泛应用于语音和图像处理等领域。

​ 本课程设计旨在研究和设计基于汉宁窗的高通FIR滤波器,以实现对低频分量的去除和高频分量的保留,提高信号的质量和准确性。该设计方法具有简单、有效、实用的特点,在实际应用中具有广泛的应用前景。在本文中,将介绍高通FIR滤波器的基本原理,详细阐述汉宁窗的特性及其在高通FIR滤波器设计中的应用,进而给出基于汉宁窗的高通FIR滤波器的设计方法和实现步骤,并通过实验验证设计的有效性和性能。最后,将讨论该设计方法的优缺点及其在实际应用中的适用性和局限性。

2、设计内容及要求

2.1 设计内容

​ 选用给定音频信号,或自行录制一段音频,要求时长5~10秒。在音频信号中叠加单个或多个低频频率分量。

​ 用汉宁窗函数法设计FIR高通滤波器,通带截止频率、阻带截止频率自行设定,以能够滤除叠加的低频分量为准。通带最大衰减、阻带最小衰减依据所选窗函数,自行设定。

​ 利用所设计的FIR高通滤波器,对叠加了低频噪声的音频信号进行高通滤波,对比滤波前后音频信号的变化。

​ 利用MATLAB软件进行系统建模,编写程序实现设计方案。

2.2 设计要求

1、掌握用汉宁窗函数法设计FIR高通滤波器的原理和设计方法。

2、用MATLAB画出滤波前、后音频信号的时域波形和频谱图。

3、用MATLAB画出FIR高通滤波器幅频特性、相频特性图。

4、对音频信号进行滤波,验证所设计的滤波器。

5、撰写规范的课程设计报告。

3. 设计原理

​ 本课程设计使用MATLAB对基于汉宁窗的FIR高通滤波器进行设计,并对采集的语音信号进行滤波,从而实现语音去噪。

3.1 窗函数法设计FIR数字滤波器的基本思想

​ 窗函数设计法的基本思想为,首先选择一个适当的理想的滤波器$H_d(e^{jw})$,然后用窗函数截取它的单位脉冲响应$h_d(n)$,得到线性相位和因果的FIR滤波器。这种方法的重点是选择一个合适的窗函数和理想滤波器,使设计的滤波器的单位脉冲响应逼近理想滤波器的单位脉冲响应。

​ 需要注意的是,数字滤波器的传输函数$H(e^{jw})$都是以$2π$为周期的,滤波器的低通频带处于$2π$的整数倍处,而高频频带处于$π$的奇数倍附近,这一点和模拟滤波器是有区别的。其次,因录制的音频信号是模拟信号,所以若使用数字滤波器对叠加了噪声的信号进行滤波,则必须在设计数字滤波器之前首先要进行模数转换,将模拟信号转换为数字信号。

3.2 窗函数法设计FIR数字滤波器的设计步骤

(1)给定理想滤波器的频率响应$H_d(e^{jw})$,在通带上具有单位增益和线性相位,在阻带上具有零响应。一个带宽为$w_c(w_c<\pi)$的低通滤波器由下式给定

其中$\alpha$为采样延迟,其作用是为了得到因果的系统。

(2)确定这个滤波器的单位脉冲响应

为了得到一个$h(n)$长度为$N$的因果的线性相位FIR滤波器,令${\alpha}=\frac{N-1}{2}$。

(3)用窗函数截取$h_d(n)$得到所设计的FIR数字滤波器$h(n)$

​ 据过渡带宽及阻带衰减要求,选择窗函数的类型并估计窗口长度N(或阶数M=N-1),窗函数类型可根据最小阻带衰减As独立选择,因为窗口长度N对最小阻带衰减As没有影响,在确定窗函数类型以后,可根据过渡带宽小于给定指标确定所拟用的窗函数的窗口长度N,设待求滤波器的过渡带宽为Δw,它与窗口长度N近似成反比,窗函数类型确定后,其计算公式也确定了,不过这些公式是近似的,得出的窗口长度还要在计算中逐步修正,原则是在保证阻带衰减满足要求的情况下,尽量选择较小的N,在N和窗函数类型确定后,即可调用MATLAB中的窗函数求出窗函数w(n)。

MATLAB函数 窗函数 MATLAB 函数 窗函数
boxcar 矩形窗函数 blackman 布莱克曼窗函数
hanning 汉宁窗函数 kaiser 凯瑟窗函数
hamming 海明窗函数
窗函数 旁瓣峰值 主瓣宽度 过渡带宽 最小阻带衰减(dB)
矩形窗 -13 $\frac{4\pi}{N}$ $\frac{1.8\pi}{N}$ -21
汉宁窗 -31 $\frac{8\pi}{N}$ $\frac{6.2\pi}{N}$ -44
海明窗 -41 $\frac{8\pi}{N}$ $\frac{6.6\pi}{N}$ -53
布莱克曼窗 -57 $\frac{12\pi}{N}$ $\frac{11\pi}{N}$ -74

(4)验算技术指标是否满足要求。

​ 在使用窗函数法设计FIR滤波器时要满足窗谱主瓣尽可能地窄,以获得较陡的过渡带;尽量减少窗谱的最大旁瓣的相对幅度,也就是使能量尽量集中于主瓣,减小峰肩和纹波,进而增加阻带的衰减。

4. 设计方案

​ 本课程设计首先完成对音频信号的采集,并对所采集的音频信号加入不同的干扰噪声,对加入噪声的信号进行频谱分析,针对受干扰音频信号的特点设计不同的滤波器,然后利用窗函数法设计低通、高通、带通等滤波器对采集到的音频信号进行滤波处理,分析音频信号各频率段的特性。对加噪信号进行滤波,回复原始信号。将原始音频信号、加噪音频信号和滤波器后的信号进行时域分析和频域分析,画出它们的时域波形和频域波形图,从视觉角度比较分析滤波的效果。本课程设计的系统实现框图如下:

4.1 音频信号的采集与输入

​ 本课程设计利用一段公开的音频信号作为输入信号,命名为High_Frequency.wav。使用MATLAB中的audioread函数对该音频进行读取,并将采样值放如向量y中,用Fs表示采样频率(Hz),bits表示采样位数。

​ 在MATLAB中,实现音频的读入,并绘出了音频信号的原始信号图如下,根据MATLAB的输出可以得知音频信号的采样频率为44100Hz。

​ FFT即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。对音频信号进行FFT变换就是得到它的频域的图形,便于从图中观察出信号的幅度等特性。如图所示即为原始音频信号频谱图

​ 从频谱图可以看出,分布频率在950Hz以下存在很小的幅度,可以利用此低幅度频率来计算截止频率,从而设计出高通滤波器,减小原音频的损失。

4.2 含噪信号的合成

​ 在MATLAB软件平台下,给原始的音频信号叠加上噪声,噪声类型分为如下几种:白噪声、单频噪声(正弦干扰)、多频噪声(多正弦干扰)、其他干扰,可设置为低频、高频、带限噪声、Chirp干扰、冲激干扰。本课程设计选择四个单频正弦噪声,频率f设置为930、950、970、1000Hz,与原音频相加即可得加噪声后的音频,即得到含噪信号。含噪音频信号的时域和频域图分别如图4-4、图4-5所示。

​ 与原始信号对比,加入噪声后的波形与原始信号相比出现了很大的区别,从时域图可以看出,幅度变得更加宽了,从频域图可以看出在950Hz左右出现了冲激函数曲线,即印证了我们所加的是正弦噪声。将用sound函数进行播放加入噪声之后的音频,发现在伴随音乐播放的同时,有一低频声音也在干扰,所以加噪声后的音频设计成功。

4.3 汉宁窗FIR高通滤波器的设计

​ 数字滤波器的作用是利用离散时间系统的特性对输入信号波形(或频谱)进行加工处理,或者说利用数字方法按预定的要求对信号进行变换。FIR滤波器可以得到严格的线性相位,然而由于FIR滤波器传输函数的极点固定在原点,所以只能用较高的阶数达到高的选择性;对于同样的滤波器设计指标,FIR滤波器所要求的阶数可以比IIR滤波器高5~10倍。

4.3.1 理想高通滤波器

​ 根据设计方案提出的FIR滤波器设计步骤,在设计汉宁窗FIR高通滤波器前虚首先确定线性相位理想数字高通滤波器的单位冲激响应。

其中,$w_c=\frac{2{\pi}f_c}{F_s}$为截至角频率,$F_s$是抽样频率,$f_s$是截止频率,$M=\frac{N-1}{2}$为滤波器阶数。

4.3.2 加汉宁窗的滤波器

​ 对$h_d(n)$加N点汉宁窗,即$h(n)=h_d(n)w(n)$,其中$w(n)$是汉宁窗函数,即可得到汉宁窗FIR高通滤波器,将该原理在MATLAB中转化为一个程序函数,即理想高通滤波器。MATLAB中产生窗函数的命令如下

MATLAB 函数 窗函数 MATLAB 函数 窗函数
boxcar 矩形窗函数 blackman 布莱克曼窗函数
hanning 汉宁窗函数 kaiser 凯瑟窗函数
hamming 海明窗函数

​ 本课程设计要求为汉宁窗函数,查表可知汉宁窗阻带最小衰减为43.9dB;过渡带带宽$Δw=\frac{3.11\pi}{M}$,根据所涉及的带宽,可据此算出滤波器的阶数为865。根据采用的正弦噪声频率分别为930,950,970,1000Hz,再根据观察原始音频信号的频谱图,相结合系统设计图,设计通带截至频率为$f_p=1110Hz$,阻带截至频率为$f_s=950Hz$,则$f_c=\frac{f_p+f_s}{2}=1030Hz,Δw=f_p-f_s=160Hz$,代入即可秋娥的滤波器阶数。

5. 结果即分析

5.1 滤波器的实现

​ 依据上面所给原理,在MATLAB实现之后,进行画图检验性能指标,即滤波器的幅频特性曲线如下图

​ 由上图的幅频特性(db)曲线可知,最大衰减大于43.9db则验证成功,从幅频曲线(Hz)其通带截止频率为1110Hz,阻带截止频率为950Hz,滤波器截止频率为1030Hz,且由于滤波器的阶数高,所得曲线比较陡峭,说明验证成功。

​ 从相频曲线图可以看出滤波器,呈现线性相位,则为FIR滤波器,对不同频率的相位特征不同,则验证成功。从脉冲响应图,可以看出此冲激响应大概位于序列420-440之间,很好的解释了高通滤波器的前项序列过滤,后项序列保留的特征,则验证成功。

​ 由零极点图看出,在z=1处有零点,则为高通滤波器。由此说明基于汉宁窗的FIR高通滤波器设计成功。

5.2 滤波器滤波实现

​ 将加噪声之后的音频在MATLAB中用filter函数进行滤波,所得结果进行可视化展示,与滤波结果和加噪声之后的结果进行对比。

由图可以清晰的对比出,频谱图上原始音频信号和加噪信号音频在1030Hz之前都有小幅度,但经过滤波器的过滤之后,截止频率为1030Hz的音频全部过滤去,在图中也可以清晰的对比出,音频的时域图也恢复的和原始音频大致相同,并用sound函数进行播放对比,音频无失真,实验成功。

6. 总结

​ 要求录制一段音频信号,要求长度不小于6秒,并对录制的信号进行采样。在MATLAB中[y,fs,bits]=wavread();用于读取音频,sound(),用于音频播放。

​ 音频信号是一种非平稳的时变信号,它携带着各种信息。音频信号分析的目的就在与方便有效的提取并表示音频信号所携带的信息。音频信号分析可以分为时域和变换域等处理方法,其中时域分析是最简单的方法,直接对音频信号的时域波形进行分析,提取的特征参数。音频信号经过FFT变换之后,就可以得到信号的频域图形,另外,频域图形使信号的某些特性变得更明显,信号的傅立叶表示在信号的分析与处理中起着重要的作用。因为对于线性系统来说,可以很方便地确定其对正弦或复指数和的响应,所以傅立叶分析方法能完善地解决许多信号分析和处理问题。

​ 应用MATLAB 根据给定的技术指标进行FIR 数字滤波器设计时,可根据设计要求,以高通滤波器的冲激响应函数进行设计滤波器,可以加深对MATLAB的使用和对数字信号的理解。 使用汉宁窗设计高通滤波器,并对正弦噪声后的音频信号进行滤波。比较滤波前后的时域波形和频谱并进行分析。在频域波形中,我们可以明显的看到设计的滤波器对音频信号进行了滤波处理,将噪声进行了滤除。此次滤波基本达到了要求,完成了设计指标。

​ 总之,加噪声的后的音频信号经过FIR滤波器的滤波处理,时域和频域图与原始信号都几乎一样,这说明噪声几乎全被滤掉了,同时也说明FIR滤波器设计还算理想,能满足所需要求。

​ 本课程设计的主要目的是在MATLAB环境下,使用汉宁窗函数设计法设计一个FIR高通滤波器,并对叠加了正弦噪声后的音频信号进行滤波去噪。此次滤波基本达到了要求,完成了设计指标。

​ 本次课设中遇到了很多问题,基础知识的不牢固,MATLAB程序编写函数的使用不熟悉都是问题,希望以后逐渐改进。