资源描述
语音信号滤波处理
MR YANG
(电子信息工程系 指导教师:余尤好)
摘要:语音信号滤波处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息形式。
Matlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种图的呈现等,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。信号处理是Matlab重要应用的领域之一。
本设计通过录制一段语音,对其进行了时域分析,频谱分析,分析语音信号的特性。并应用matlab平台对语音信号进行加噪然后再除去噪声,进一步设计两种种滤波器即高通滤波器、带通滤波器,基于这两种滤波器设计原理,对含加噪的语音信号进行滤波处理。最后对比滤波前后的语音信号的时域和频域特性,回放含噪语音信号和去噪语音信号。论文从理论和实践上比较了不同数字滤波器的滤波效果。
关键字:Matlab;语音信号;信号处理;傅里叶变换;滤波器
1 绪论
1.1课题研究的背景
通过语音传递倍息是人类最重要、最有效、最常用和最方便的交换信息的形式。语言是人类持有的功能,声音是人类常用的工具,是相互传递信息的最主要的手段。因此,语音信号是人们构成思想疏通和感情交流的最主要的途径。并且,由于语言和语音与人的智力活动密切相关,与社会文化和进步紧密相连,所以它具有最大的信息容量和最高的智能水平。现在,人类已开始进入了信息化时代,用现代手段研究语音信号,使人们能更加有效地产生、传输、存储、获取和应用语音信息,这对于促进社会的发展具有十分重要的意义。让计算机能听懂人类的语言,是人类自计算机诞生以来梦寐以求的想法。
随着计算机越来越向便携化方向发展,随着计算环境的日趋复杂化,人们越来越迫切要求摆脱键盘的束缚而代之以语音输人这样便于使用的、自然的、人性化的输人方式。作为高科鼓应用领域的研究热点,语音信号采集与分析从理论的研究到产品的开发已经走过了几十个春秋并且取得了长足的进步。它正在直接与办公、交通、金融、公安、商业、旅游等行业的语音咨询与管理.工业生产部门的语声控制,电话、电信系统的自动拨号、辅助控制与查询以及医疗卫生和福利事业的生活支援系统等各种实际应用领域相接轨,并且有望成为下一代操作系统和应用程序的用户界面。可见,语音信号采集与分析的研究将是一项极具市场价值和挑战性的工作。我们今天进行这一领域的研究与开拓就是要让语音信号处理技术走人人们的日常生活当中,并不断朝更高目标而努力。
语音信号采集与分析之所以能够那样长期地、深深地吸引广大科学工作者去不断地对其进行研究和探讨,除了它的实用性之外,另一个重要原因是,它始终与当时信息科学中最活跃的前沿学科保持密切的联系.并且一起发展。语音信号采集与分析是以语音语言学和数字信号处理为基础而形成的一门涉及面很广的综合性学科,与心理、生理学、计算机科学、通信与信息科学以及模式识别和人工智能等学科都有着非常密切的关系。对语音信号采集与分析的研究一直是数字信号处理技术发展的重要推动力量。因为许多处理的新方法的提出,首先是在语音信号处理中获得成功,然后再推广到其他领域。
1.2本文的主要工作及研究步骤
1.2.1本文的主要工作
本文简要介绍了语音信号采集与分析的发展史以及语音信号的特征、采集与分析方法,并通过录制自己的一段声音,运用Matlab进行仿真分析,最后对于加在声音中的噪声进行滤波处理,比较滤波前后的变化以及介绍语音信号的特点与采集,仿真主要是验证奈奎斯特定理,对语音信号进行时域、频域上的分析,率谱,是对语音信号的综合和分析,包括语音信号的调制和滤波。
1.2.2论文的研究步骤
1.理论依据
根据设计要求分析系统功能,掌握设计中所需理论(采样频率、采样位数的概念,采样定理;时域信号的FFT分析;数字滤波器设计原理和方法,各种不同类型滤波器的性能比较),阐明设计原理。
2.信号采集
采集语音信号,并对其进行FFT频谱分析,画出信号的时域波形图和频谱图。
3.构造受干扰信号并对其进行FFT频谱分析
对所采集的语音信号加入干扰噪声,对加噪信号进行回放,感觉加噪前后声音的变化,分析原因,得出结论。并对其进行FFT频谱分析,比较加噪前后语音信号的波形及频谱,对所得结果进行分析,阐明原因,得出结论。
4.数字滤波器设计
根据待处理信号特点,设计合适数字滤波器,绘制所设计滤波器的幅频和相频特性。
5.信号处理
用所设计的滤波器对含噪语音信号进行滤波。对滤波后的语音信号进行FFT频谱分析。画出处理过程中所得各种波形及频谱图。
对语音信号进行回放,感觉滤波前后声音的变化。比较滤波前后语音信号 的波形及频谱,对所得结果和滤波器性能进行频谱分析,阐明原因,得出结论。
1.3本文使用的软件Matlab介绍
MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分[4]。MATLAB在现实中应用很广泛,如今随处可见,在各个领域都是有广泛的使用。
MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
2语音信号处理的设计原理
2.1语音信号的采集
在MATLAB软件平台下,利用函数wavread( )对语音信号采集,并记录采样频率和采样点数。将语音信号转换成计算机能够运算的有限长序列。
wavread函数的调用格式如下:
y=wavread(file)
读取file所规定的wav文件,返回采样值放在向量y中。
[y,fs]=wavread(file)
采样值放在向量y中,fs表示采样频率(Hz)。
2.2 用FFT作谱分析
FFT即快速傅立叶变换,它是从DFT运算中发展起来的,利用系数 的对称性和周期性减少运算量。长度为N的序列直接计算DFT需要次复乘和次复加,而用FFT进行运算一般需要 次复乘和次复加,从而使DFT的运算大大简化。
用FFT对连续信号进行谱分析的步骤如下:
Sc(t)
LPF
A/D
DFT
图3.1 连续信号谱分析过程
引入前置低通滤波器LPF是为了消除或减少时域连续信号转换成序列时可能出现的频谱混叠现象。表示时域有限的窗函数。
2.3.设计滤波器去除语音信号的噪声
通过wavread()函数将语音信号读入,通过频率采样及fft ( )产生信号,并对之加噪,通过窗函数法设计滤波器滤掉该语音信号的噪声,对比滤波前后的语音波形和频谱。
3 语音信号处理的基本知识
3.1语音的录入和打开
在MATLAB中,[y,Fs,bit]=wavread('nihao'])用于读取语音,采样值放在向量y中,Fs表示采样频率(Hz),bit表示采样位数。
sound(x,Fs,bit); 用于对声音的回放。向量y则就代表了一个信号(也即一个复杂的“函数表达式”)也就是说可以像处理一个信号表达式一样处理这个声音信号。
3.2采样位数和采样频率
采样位数即采样值或取样值,用来衡量声音波动变化的参数,是指声卡在采集和播放声音文件时所使用数字声音信号的二进制位数。采样频率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。
采样位数和采样率对于音频接口来说是最为重要的两个指标,也是选择音频接口的两个重要标准。无论采样频率如何,理论上来说采样的位数决定了音频数据最大的力度范围。每增加一个采样位数相当于力度范围增加了6dB。采样位数越多则捕捉到的信号越精确。
3.3时域信号FFT分析
3.3数字滤波器原理
3.3.1数字滤波器概念
若滤波器的输入、输出都是离散时间信号,那么该滤波器的单位冲激响应h(n)也必然是离散的,这种滤波器称为数字滤波器(DF)。数字滤波器实质上是一种运算过程——用来描述离散系统输入与输出关系的差分方程的计算或卷积计算。数字滤波器的实质是用一有限精度算法实现的离散时间线性时不变系统,以完成对信号进行滤波处理的过程。它是数字信号处理的一个重要分支,具有稳定性好、精度高、灵活性强、体积小、质量轻等诸多优点。
3.3.2数字滤波器分类
数字滤波器根据不同的分类标准可以将滤波器分成不同的类别。
(1)根据单位冲激响应h(n)的时间特性分类
无限冲激响应(IIR)数字滤波器
有限冲激响应(FIR)数字滤波器
(2)根据实现方法和形式分类
递归型数字滤波器
非递归型数字滤波器
快速卷积型
(3)根据频率特性分类
低通数字滤波器、高通数字滤波器、带通数字波器、 带阻数字滤波器
4 设计方案
4.1设计内容
1) 利用Windows下的录音机录制一段自己的话音,时间在1s内。然后在Matlab软件平台下,利用wavread函数对语音信号进行采样,记住采样频率和采样点数;
2) 画出语音信号的时域波形,对采样后的语音信号进行快速傅立叶变换,得到语音信号的频谱特性;对语音信号分别加入正弦噪声和白噪声,画出加噪信号的时域波形和频谱图;
3) 根据对加噪语音信号谱分析的结果,确定滤除噪声所需滤波器的技术指标,设计合适的数字滤波器,并画出滤波器的频域响应;
4) 用所设计的滤波器对采集的信号进行滤波,在同一个窗口画出滤波前后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;利用sound(x)回放语音信号,验证设计效果;
4.2设计步骤
1) 打开录音机,录制一段在1s内的语音信号。更改语音采样频率为8000HZ,保存在电脑中。命名为“nihao.wav”。语音信号的相关参数如图4.1所示。
图4.1 语音信号的参数图
从上图可以看出,语音信号的采样频率和采样点数分别为8000HZ和8bit。
2) 在Matlab中使用Wavread函数,可得出信号的采样频率为8000,并且声音是单声道的。利用Sound函数可以清晰的听到命名为“nihao”的语音。对语音信号进行快速傅立叶变换,得到语音信号的频谱特性;对语音信号分别加入正弦噪声和白噪声,再画出加噪信号的时域波形和频谱图,将语音信号的时域和频域的波形图分别和正弦噪声及白噪声的图形画在同一张图中。加噪信号的程序如下。结果如图4.2和4.3所示。
G=fft(g,n);
图4.2 语音信号和加正弦噪声后的时、频图形 图4.3 语音信号和加高斯噪声后的时、频图
3) 根据对加噪语音信号谱分析的结果,确定滤除噪声所需滤波器的技术指标,设计合适的数字滤波器,并画出滤波器的频域响应;
画出的滤波器的频域响应如图4.4所示。
图4.4 滤波器的频域响应
4)用所设计的滤波器对采集的信号进行滤波,在同一个窗口画出滤波前后信号的时域波形和频谱,相应程序如下,利用sound(x)回放语音信号,验证设计效果;
滤波后的图形分别如图4.5和图4.6所示。
图4.5 用高通滤波器滤波后的图形 图4.6 用带通滤波器滤波后的图形
5 分析和体会
本文对语音信号处理系统的设计作了详细的介绍,采用一系列图像分析和处理技术,实现了语音信号的基本处理的功能,经过测试运行,本设计圆满的完成了对语音信号的读取与打开;较好的完成了对语音信号的频谱分析,通过fft变换,得出了语音信号的频谱图;在滤波这一块,课题主要是从数字滤波器入手来设计滤波器,基本实现了滤波,完成了各种滤波器的滤波效果比较,与课题的要求十分相符。
本文对语音信号处理系统的设计作了详细的介绍,采用一系列图像分析和处理技术,实现了语音信号的基本处理的功能,经过测试运行,基本达到预期目的。
本设计还存在许多可以改进的地方以及存在的问题,主要有以下几个方面:
(1)本程序仅能进行一般应用条件下的语音信号处理,功能比较单一,不能进行复杂的语音信号处理。
(2) 该程序由于编写简单,操作界面较小,对较大物理内存的语音信号文件不能进行处理。
(3)在设计过程中发现自己对于编程,还是存在很大的不足,本设计很多程序都是在查阅有关数字信号编程的书籍之下完成的,自己以后的学习的还是很多。
参考文献:
[1] 李勇、徐震,MATLAB辅助现代工程数字信号处理,西安电子科技大学出版社.
[2] 高西全、丁玉美,数字信号处理,西安电子科技大学出版社.
[3]周渊,王炳和,刘斌胜.基于MATLAB的噪声信号采集和分析系统的设计[M].噪声控制.2004(7):52-54.
[4]朱学芳,徐建平.计算机语音信号处理与语音识别系统[J].南京邮电学院学报,1998,18(5—6):113—11
[5]杨崇林,李雪耀,孙羽.强噪声背景下汉语语音端点检测和音节分割[J].哈尔滨工程大学学报,1997.18(5):28—32.
[6] 张雄伟,陈量,杨吉斌.现代语音处理技术及应用[M].北京:机械工业出版社.2003
附 录
clear
clc
[y,Fs,bit]=wavread ('nihao.wav');
%sound(y,Fs,bit);
n=length(y);
Y=fft(y,n);
f=0:Fs/n:Fs*(n-1)/n;
%%%%%%%%%%%%%%%加正弦噪声
T=1/Fs;t=0:T:(n-1)*T;
noise=0.5*sin(300*2*pi*t);
z=y+noise';
Z=fft(z,n);
%sound(z,Fs,bit);
%%%%%%%%%%%%%%%%设计巴特沃斯高通滤波器
fp=600; %通带截止频率
fs=400; %阻带截止频率
rp=0.1; %通带最大衰减
rs=40; %阻带最小衰减
wp=2*fp/Fs;
ws=2*fs/Fs; %计算数字滤波器设计指标
[N1,wc]=buttord(wp,ws,rp,rs);
[b,a]=butter(N1,wc,'high');
w=0:0.01*pi:pi;
[h1,w]=freqz(b,a,w);%计算高通滤波器频率响应
h1=20*log10(abs(h1));
%用巴特沃斯高通滤波器滤除正弦噪声
zl=filter(b,a,z); %滤波
Nzl=length(zl); %计算滤波后的长度
Zl=fft(zl,Nzl); %对滤除噪声后的信号进行DFT变换
sound(zl,Fs,bit); %回放滤波后的信号
%%%%%%%%%%%%%加高斯白噪声
g=awgn(y,80); %给语音信号加上信噪比为80的高斯白噪声
%sound(g,Fs,bit); %回放加噪信号
G=fft(g,n); %对加噪后的语音信号进行FFT变换
%%%%%%%%%%%%%%%%%%设计巴特沃斯带通滤波器
fp1=600;fp2=800;fs1=400;fs2=1000;
rp=0.1; %通带最大衰减
rs=40; %阻带最小衰减
wp=[2*fp1/Fs,2*fp2/Fs];
ws=[2*fs1/Fs,2*fs2/Fs]; %计算数字滤波器设计指标
[N2,wc]=buttord(wp,ws,rp,rs);
[b,a]=butter(N2,wc);
w=0:0.01*pi:pi;
[h2,w]=freqz(b,a,w);
h2=20*log10(abs(h2));
%用巴特沃斯带通滤波器滤除高斯白噪声
gl=filter(b,a,g);
%sound(gl,Fs,bit);
Ngl=length(gl);
Gl=fft(gl,Ngl);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%绘图部分%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(1)
subplot(2,2,1);
plot(t,y);grid;
title('原始语音信号时域波形');
subplot(2,2,2);
plot(abs(Y));grid;
axis([0,n/2,-20,250]);
xlabel('f/Hz');ylabel('幅度/dB');
title('原始语音信号频谱特性');
subplot(2,2,3);
plot(t,z);grid;
title('加正弦噪声语音信号的时域波形');
subplot(2,2,4);
plot(abs(Z));grid;
axis([0,n/2,-20,250]);
xlabel('f/Hz');ylabel('幅度/dB');
title('加正弦噪声语音信号的频谱特性');
figure(2)
subplot(2,2,1);
plot(t,y);grid;
title('原始语音信号时域波形');
subplot(2,2,2);
plot(abs(Y));grid;
axis([0,n/2,-20,250]);
xlabel('f/Hz');ylabel('幅度/dB');
title('原始语音信号频谱特性');
subplot(2,2,3);
plot(t,g);grid;
title('加高斯白噪声语音信号的时域波形');
subplot(2,2,4);
plot(abs(G));grid;
axis([0,n/2,-20,250]);
xlabel('f/Hz');ylabel('幅度/dB');
title('加高斯白噪声语音信号的频谱特性');
figure(3)
subplot(211)
plot(w,-abs(h1),'b');
axis([0,1,-120,20])
xlabel('\omega/\pi');ylabel('幅度(dB)')
title('巴特沃斯高通滤波器频域响应')
subplot(212)
plot(w,-abs(h2),'b');
axis([0,2,-120,20])
xlabel('\omega/\pi');ylabel('幅度(dB)')
title('巴特沃斯带通滤波器频域响应')
figure(4)
subplot(2,2,1);
plot(t,z);grid;
title('加正弦噪声语音信号的波形');
subplot(2,2,2);
plot(abs(Z));grid;
axis([0,n/2,-20,250]);
xlabel('f/Hz');ylabel('幅度');
title('加正弦噪声语音信号的频域波形');
subplot(2,2,3);
plot(t,zl);grid;
title('加正弦噪声语音信号滤波后的波形');
subplot(2,2,4);
plot(abs(Zl));grid;
axis([0,n/2,-20,250]);
xlabel('f/Hz');ylabel('幅度');
title('加正弦噪声语音信号滤波后的频域波形');
figure(5)
subplot(2,2,1);
plot(t,g);grid;
title('加高斯白噪声语音信号的时域波形');
subplot(2,2,2);
plot(abs(G));grid;
axis([0,n/2,-20,250]);
xlabel('f/Hz');ylabel('幅度/dB');
title('加高斯白噪声语音信号的频谱特性');
subplot(2,2,3);
plot(t,gl);grid;
title('加高斯白噪声语音信号滤波后的波形');
subplot(2,2,4);
plot(abs(Gl));grid;
axis([0,n/2,-10,250]);
xlabel('f/Hz');ylabel('幅度');
title('加高斯白噪声语音信号滤波后的频域波形');
展开阅读全文