基于MATLAB的语音信号滤波设计与实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于M AT LAB的语音信号滤波设计与实现

张文 蒋猛 陈智

(内江师范学院物理学与电子信息工程系,四川内江641112)摘 要:滤波器设计是数字信号处理的重要组成部分。在计算机中录入一段语音信号,通过M atlab对语音信号进行时频变换与分析,同时构造一固定频率的干扰信号,对两个信号进行合成,设计一个数字滤波器,对含噪的的语音信号进行滤波处理,在时域和频域中对信号进行分析比较。

关键词:语音信号;滤波器;M AT L AB

中图分类号:T P312;T N713 文献标识码:A

0 引言

随着信息技术的发展,信号处理正向着数字化、软件化方向发展。数字信号处理的主要研究对象是语音信号和图像信号,语音信号的研究可以从时域和频域两个方面来进行。其中时域的分析处理有两种方法:一种是进行语音信号分析,这属于线性处理的范畴,主要是通过信号的加减、时移、倍乘、卷积、求相关函数等来实现;另一种是生成和变换成各种调制信号,这属于非线性的范畴,主要是对信号平均累加器的动态范围进行压缩扩张,用门限方法对噪声的抑制。对频域分析处理,即对信号的频率特性在频谱中加以分析研究,这拓展了信号分析的范围,是对不确定信号分析的主要方法。在实际应用中,信号的时域频分析经常同时进行[1]。

M atlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种图的呈现等,信号处理是M atlab重要应用的领域之一。本文是用M atlab 对含噪的的语音信号同时在时域和频域进行滤波处理和分析[2]。整个设计思路的设计原理示意图如图1所示。

图1 语音信号的滤波示意图

1 语音信号的采集与时频分析

1.1 语音信号的采集

利用PC机上的声卡和WI NDO WS操作系统可以进行数字信号的采集。将话筒输入计算机的语音输入插口上,启动录音机。按下录音按钮,接着对话筒说话 大家好,说完后停止录音,屏幕左侧将显示所录声音的长度。点击放音按钮,可以实现所录音的重现。以文件名 dajiahao保存入g: \M AT LA B\wo rk中。可以看到,文件存储器的后缀默认为.w av,这是WIN DOWS操作系统规定的声音文件存的标准。为了进一步看出它的特征,再单击属性。从图中可以看出整个文件的数据大小(字节),它的采样频点是8000Hz,量化为8位二进制码,编码方式为PCM(脉冲编码调制)。这几个数据格式是系统默认设定。要保存文件时,利用了计算机上的A/D转换器,把模拟的声音信号变成了离散的量化了的数字信号,放音时,它又通过D/A转换器,把保存的数字数据恢复为原来的模拟的声音信号。

1.2 语音信号的时频分析

在M atlab软件平台下可以利用函数w av read对语音信号进行采样,得到了声音数据变量x,同时把x的采样频率Fs=8000Hz和数据位Nbits=8Bit放进了M AT A LB的工作空间。其程序如下[3]:

Fs=8000Hz;%给出抽样频率

N bits=8Bit;%放入数据位

[x,fs,N bits]=w avread(!g:\Matlab\wor k\dajiahao. wav∀);%把语音信号进行加载入M atlab仿真软件平台中sound(x,fs);%对加载的语音信号进行回放

stem(x);title(!语音信号的时域波形∀);

上述程序是在M atlab软件中画出语音信号的时域波形(图略),回放录入声音。从图中可以看出在时域环境下,信号呈现出3个不规则的信号峰值。

然后对语音信号进行频谱分析,在M atlab中可以利用函数fft对信号行快速傅里叶变换,得到信号的频谱图如图2所示(注意标题),从图中可以看出对各个频点上的随机信号在频域进行抽样,抽样频率为8000Hz。其命令如下[4]: n=length(x);%求出语音信号的长度

x1=fft(x,n);%傅里叶变换

x2=fftshift(x1);%对频谱图进行平移

f=0:fs/s:fs*(s-1)/s;%得出频点

山西电子技术

2008年第2期

应用实践

收稿日期:2007-09-25 第一作者 张文 男 39岁 硕士 副教授

plot(f,abs(x2));title(!语音信号的频谱∀);

2 干扰信号的构建

在M atlab 中人为设计一固定频率的噪声干扰信号。噪声信号通常为随机序列,为方便设计,在本设计中用正弦序列代替,干扰信号构建命令如下:

k=1:1:s;%定义k 值

c1=10*sin(2*pi*2000*k);%噪声信号的函数plot(k(1:50),c1(1:50));%画出噪声信号的时域波形并取其中一段

title(!噪声信号的时域波形图∀);

从图2中可以看出,给出的干扰信号为一个正弦信号。针对上面的语音信号,采集了其中一段。再对噪音信号进行频谱变换得到其频谱图如图2所示,从图中可以看出干扰信号在2000Hz 和6000Hz 频点处有一高峰,其中2000Hz 正是本设计所要利用的。其命令如下:

s=leng th(c1);%求噪声信号的长度xc=fft(c1,s);%频谱变换

xcc=fftshift(x c);%对频谱图进行平移f=0:fs/s:fs*(s-1)/s;%得出频点plot(f,abs(xcc));title(!噪声的频谱∀)

;

图2 仿真结果显示

3 信号合成

在M atlab 中把语音信号与噪声信号进行叠加。对其进行播放,并画出其频谱图如图2所示,从图中可以看出,在该语音信号的2000Hz 处有一高峰,这正是干扰所造成的。其命令如下:

z=x ∀+c1;%噪声信号的叠加

y=fft(z,s);%对叠加信号进行频谱变换y1=fftshift(y );%对频谱图平移f=0:fs/s:fs*(s-1)/s;%得出频点plot(f,abs(y1));%绘出频谱图

ax is([080000400]);title(∀含噪语音信号的频谱∀);pause;sound(z,fs);

4 数字滤波

4.1 数字滤波器的设计

数字滤波器分为F IR 数字滤波器和IIR 数字滤波器两种,可以用硬件和软件来设计实现。软件设计主要有脉冲响

应不变法、双线性变换法、窗口函数法。本设计是用双线性变换法设计BW 带阻型滤波器。

针对以上语音信号设定滤波器的性能指标,用双线性变换法设计。在M AT L AB 中,可以利用函数butterworth,设计I IR 滤波器,利用M AT LA B 中的函数freqz 画出各滤波器的频率响应。程序如下:

f0=2000/4000;c=100/4000;%给出指标

ws=[f0-0.5*fc f0+0.5*fc];%ws 为带阻滤波器阻带截频

wp=[f0-fc f0+fc];%wp 为带阻滤波器通带截频Ap=1;s=30;%Ap 是滤波器的通带衰减,As 是滤波器的阻带衰减

[n wc]=buttord(wp,s,p.s,∀s ∀);%n 为BW 滤波器的阶数,wc 等于BW 滤波器3db 截频

[num,den]=butter (n,c,∀stop ∀);%设计带阻滤波器的系数

w =linspace(0,pi,512);

[h,w]=fr eqz(num,den,fs);%设计带阻滤波器的系数plot(w /pi,20*log10(abs(h)));%得出滤波器的频谱图gr id;title(!BW 型阻带滤波器∀);

由以上命令得出BW 型带阻滤波器,画出其增益响应曲线如图所示。该滤波器的通带和阻带衰减分别为A p =1;A s =30。4.2 数字滤波

用设计好的带阻滤波器对含噪语音信号进行滤波,在M atlab 中FIR 滤波器利用函数fftfilt 对信号进行滤波,IIR 滤波器利用函数filter 对信号进行滤波。在一个窗口同时画出滤波前后的波形及频谱如图2所示。从图中可以看出,2000Hz 看到的高峰消失了,语音信号与开始的一样,滤波器成功的滤除了干扰信号。其程序如下[5]:

y=filter(num,den,z);%对加入噪声的语音信号进行滤波X=fft(y ,s);%滤波后的信号进行FFT 变换Y =fftshift(X);%对得出的频谱图进行平移n=length(Y);%求Y 的长度

plot(f,abs(Y ));%画出滤波后的语音信号频谱title (!滤波后的语音信号频谱图∀);pause;Sound(y ,fs);

5 结束语

加入噪声后回放的声音与原始的语音信号有明显的不同,其伴随较尖锐的干扰啸叫声。从含噪语音信号的频谱图中可以看出是含噪的语音信号的频谱,在2000Hz 处有上高峰,这正是干扰所造成的。当用BW 型带阻滤波器滤波后的含噪声语音信号,2000Hz 的噪声被成功滤除。

因此,可用软件设计的滤波器代替硬件滤波器,软件设计的滤波器可以完成硬件的滤波功能。在数字系统中,任何信号处理器件都可以看成是一个滤波器。滤波器的设计是数字信号处理的重要内容,设计时要根据信号的特征,确定滤波器的类型、阶数、截止频率、衰减幅度等,才能有效地滤

30 山 西 电 子 技 术 2008年

相关文档
最新文档