余会娟
摘要:有限长冲激响应(FIR)数字滤波器具有描述方便、系统稳定、易于实现线性相位等特点,获得了广泛的应用。该文采用FIR数字滤波器的窗函数法设计滤波器,针对语音信号中出现的加性噪声进行消除,并在matlab软件中进行实现。
关键词:FIR数字滤波器;窗函数法;matlab;语音信号处理
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)03-0183-03
数字滤波器是数字信号处理的一个重要技术分支,利用它可以在形形色色的信号中提取所需信号,抑制不需要的信号(干扰、噪声等)。有限长脉冲响应FIR滤波器在保证幅度特性满足技术要求的同时,很容易做到有严格的线性相位特性,因此在高保真的信号处理领域得到了广泛应用。滤波器的设计过程分三步完成:①技术要求,在设计之前,根据具体用途确定技术指标;②近似,用选用的设计方法表述滤波器,它可以是一个差分方程的形式,或者是一个系统函数H(Z)的形式,或者是一个脉冲响应h(n)的形式,这种表述逼近于所给定的技术指标;③实现,依据上一步的滤波器表述,在计算机上通过MATLAB软件实现这个滤波器。本文旨在用FIR数字滤波器的窗函数法设计滤波器,针对语音信号中出现的加性噪声进行消除。并在matlab软件中实现。
1 FIR数字滤波器设计原理
FIR数字滤波器的单位脉冲响应是有限长的,使得它在以下方面具有明显的优势:
(1) 有限长序列的Z变换在整个Z平面上收敛,因此,不存在稳定性问题;
(2) 只要经过一定的时延,任何非因果的有限长序列都可以变成因果的有限长序列,都可以用因果系统来实现;
(3) 由于单位脉冲响应是有限长的,可以用快速傅立叶变换算法实现信号的滤波,使运算效率大大提高。
因此,FIR数字滤波器日益引起人们的注意,在各个领域广泛应用。
如果FIR数字滤波器的单位脉冲响应h(n)为实数,且满足以下任何一个条件:
偶对称:h(n)=h(N-1-n);
奇对称:h(n)=-h(N-1-n)
其对称中心在(N-1)/2处,则滤波器就具有准确的线性相位。
将频率响应表示成,其中是幅度函数,是相位函数。
2 基于窗函数法的 FIR数字滤波器设计
理想的數字滤波器的频率响应可以用傅立叶级数展开为:
其中傅立叶系数为 :
显然,就是理想滤波器的单位脉冲响应。 但是直接用(2)式设计FIR滤波器是不可能的,因为是一个无限长非因果序列。根据线性相位FIR数字滤波器理论,单位脉冲响应应该是有限长的因果序列。因此,设计FIR滤波器就是解决向逼近的问题。可以直接用截断的方法逼近,使n取有限项,那么,(1)式就变为:
截取后,我们要保证截取的一段对(N-1)/2对称,这样就构成一个长度为N的线性相位滤波器。
但是,用直接截断的方法会使得频率响应的间断会出现吉布斯(Gibbs)效应,该效应会引起通带内和阻带内的波动性,尤其使阻带内的衰减减小,从而满足不了技术上的要求。这种吉布斯(Gibbs)效应是由于将直接截断引起的,也常称为截断效应。
2.1 设计原理
获得FIR数字滤波器的一个有效的方法就是利用有限的“加权”序列w(n),也就是所谓的“窗函数”来修正(1)和(2)式。这种方法称为“窗函数法”。通常,是将h(n)看作理想单位脉冲响应hd(n)与窗函数w(n)的乘积。即
利用复卷积定理可得:
上式表明,是理想频率响应与窗函数频率响应的循环卷积。因此,对的逼近程度完全决于窗函数的频率特性。
加窗函数后,对滤波器的理想特性影响有以下几点:
(1) Hd(w)在截止频率的间断点变成了连续的曲线,使得Hd(w)出现了一个过渡带,它的宽度等于窗函数的主瓣宽度,由此可知,如果窗函数的主瓣越宽,过渡带就越宽。
(2) 由于窗函数旁瓣的影响,使得滤波器的幅度频率特性出现了波动,波动的幅度取决于旁瓣的相对幅度。旁瓣范围的面积越大,通带波动和阻带的波动就越大,也就是说阻带的衰减减小。而波动的多少,取决于旁瓣的多少。
(3) 增加窗函数的长度,只能减少窗函数的幅度频率特性W(w)的主瓣宽度,而不能减少主瓣和旁瓣的相对值,该值取决于窗函数的形状,即增加截取函数的长度N只能相应的减小过渡带,而不能改变滤波器的波动。
因此,通过改变窗函数的形状来改善滤波器的幅度频率特性。窗函数的选择原则是:
(1) 具有较低的旁瓣幅度,尤其是第一旁瓣的幅度。
(2) 旁瓣的幅度下降的速率要快,以利于增加阻带的衰减。
(3) 主瓣的宽度要窄,这样可以得到比较窄的过渡带。
通常上述的几点难以同时满足,实际上选用的窗函数往往是它们的折中。
窗函数的种类繁多,而且还可以根据需要自己设计窗函数,在设计FIR数字滤波器时,选择窗函数的原则是在保证阻带衰减满足要求的情况下,尽量选择主瓣窄的窗函数。
2.2 设计步骤
FIR数字滤波器的窗函数法设计步骤:
(1) 依据给定的技术指标得出理想的频率响应;
(2) 选择窗函数,根据其过渡带宽△W,估计h(n)的长度N;
(3) 根据理想频率响应计算理想单位脉冲响应;
(4) 用选择的窗函数对进行加窗得出,;
(5) 计算数字滤波器的频率响应。
2.3 设计与MATLAB实现
对采样频率为220v、50HZ的语音信号人工引入高频5KHZ余弦噪声后,对信号在频域进行滤波。滤波后显示的语音信号的波形与原始语音信号波形基本相同。
2.3.1 信号采集程序
fs=22050;
x1=wavread('C:\Documents and Settings\laurence\桌面\新建文件夹\数字.wav'); sound(x1,22050);
y1=fft(x1,1024);
f=fs*(0:511)/1024;
figure(1)
plot(x1)
title('原始語音信号');
xlabel('time n');
ylabel('fuzhi n');
figure(2)
freqz(x1)
title('频率响应图')
figure(3)
subplot(2,1,1);
plot(abs(y1(1:512)))
title('原始语音信号FFT频谱')
subplot(2,1,2);
plot(f,abs(y1(1:512)));
title('原始语音信号频谱')
xlabel('Hz');
ylabel('fuzhi');
2.3.2 加上5kHz高频余弦噪声后的信号采集程序
fs=22050;
x1=wavread('C:\Documents and Settings\laurence\桌面\新建文件夹\数字.wav');
f=fs*(0:511)/1024;
t=0:1/22050:(size(x1)-1)/22050;
Au=0.03;
d=[Au*cos(2*pi*5000*t)]';
x2=x1+d;
sound(x2,22050);
y2=fft(x2,1024);
figure(1)
plot(t,x2)
title('加噪后的信号');
xlabel('time n');
ylabel('fuzhi n');
figure(2)
subplot(2,1,1);
plot(f,abs(y1(1:512)));
title('原始语音信号频谱');
xlabel('Hz');
ylabel('fuzhi');
subplot(2,1,2);
plot(f,abs(y2(1:512)));
title('加噪后的信号频谱');
xlabel('Hz');
ylabel('fuzhi');
2.3.4 窗函数法设计滤波器程序
fs=22050;
x1=wavread('C:\Documents and Settings\laurence\桌面\新建文件夹\数字.wav');
t=0:1/22050:(size(x1)-1)/22050;
Au=0.03;
d=[Au*cos(2*pi*5000*t)]';
x2=x1+d;
wp=0.25*pi;
ws=0.3*pi;
wdelta=ws-wp;
N=ceil(6.6*pi/wdelta);
wn=(0.2+0.3)*pi/2;
b=fir1(N,wn/pi,hamming(N+1));
figure(1)
freqz(b,1,512)
f2=filter(bz,az,x2)
figure(2)
subplot(2,1,1)
plot(t,x2)
title('滤波前的时域波形');
subplot(2,1,2)
plot(t,f2);
title('滤波后的时域波形');
sound(f2,22050);
F0=fft(f2,1024);
f=fs*(0:511)/1024;
figure(3)
y2=fft(x2,1024);
subplot(2,1,1);
plot(f,abs(y2(1:512)));
title('滤波前的频谱')
xlabel('Hz');
ylabel('fuzhi');
subplot(2,1,2)
F2=plot(f,abs(F0(1:512)));
title('滤波后的频谱')
xlabel('Hz');
ylabel('fuzhi');
3 结束语
语音信号是最能体现信号非线性的一个领域。本文运用MATLAB软件,设计出符合技术要求的数字滤波器,对加入单一频率语音信号进行消噪处理,结果显示还是非常有效的。FIR滤波器对语音信号滤波能够取得较好的效果。对于高斯噪声引入及消噪的方法需要用到现代滤波器的设计方法,传统滤波器只能削弱而不能消除噪声的影响。当然,对语音信号进行处理技术还有很多方面,如语音压缩和语音编码,语音识别等。结合语音语义理论的研究, 循环平稳信号分析、多谱分析和时频尺度理论,关键特征的捕捉等多层次的语音信号研究,有很重要的应用前景。
参考文献:
[1] 陈明军,毛樟梅.改进窗函数在FIR数字滤波器设计中的应用[J].继电器,2007,35(13):64-68.
[2] 孙强.运用MATLAB实现数字滤波器的设计[J].电脑学习,2005(2):32-34.
[3] 苏玉萍,郑琼琼,余冬菊.基于MATLAB的FIR滤波器设计[J].中国科技信息,2008(8):44-46.
[4] 周辉,董正宏.数字信号处理基础及MATLAB实现[M].北京:北京希望出版社,2006:230-260.
[5] 丁玉美,高西全.数字信号处理[M].2版.西安:西安电子科技大学出版社,2000:195-222.