MATAB课程设计语音信号的时域频域分析.docx
《MATAB课程设计语音信号的时域频域分析.docx》由会员分享,可在线阅读,更多相关《MATAB课程设计语音信号的时域频域分析.docx(8页珍藏版)》请在冰豆网上搜索。
MATAB课程设计语音信号的时域频域分析
1.语音信号的采集
为了将原始模拟语音信号变为数字信号,必须经过采样和量化两个步骤,从而得到时间和幅度上均为离散的数字语音信号。
取样是将时间上连续的语音信号离散化为一个样本序列。
根据取样定理,当取样频率大于信号的两倍带宽时,取样过程不会丢失信息,且从取样信号中可以精确地重构原始信号波形。
经过预滤波和采样后,由A/D变换器变换为二进制数字码。
这种防混叠滤波通常与模数转换器做在一个集成块内,因此目前来说,语音信号的数字化的质量还是有保证的。
市面上购买到的普通声卡在这方面做的都很好,语音声波通过话筒输入到声卡后直接获得的是经过防混叠滤波、A/D变换、量化处理的离散的数字语音信号。
实际工作中,我们可以通过很多种方式录制语音信号,如手机、电脑、MP3、录音笔等,然后通过转换工具将音频格式转换为MATLAB可以识别的音频文件格式,这里的转换工具可以是千千静听或者其它的专用音频文件格式转换软件,可以获得任何我们想要的音频格式。
本设计中我们利用windows自带的录音机录制语音文件,图1-1是基于PC机的语音信号录制过程,声卡可以完成语音波形的A/D转换,获得WAV文件,为后续的处理储备原材料。
wav
A/D
采样
滤波
麦克风
声卡
声音
Windows自带的录音机
图1-1基于PC机的语音信号录制过程
本设计先用电脑自带的录音机录制自己的一段语音,保存在MATLAB软件的工作目录下,命名为“abc.wav”,然后经过MATLAB软件绘制出其时域波形图和频谱图。
之后通过rand随机函数产生一个噪声,叠加到原信号中去,作为滤波器的输入。
2.语音信号的时、频域分析
2.1语音信号的时域分析
语音信号的时域分析就是分析和提取语音信号的时域参数。
进行语音分析时,最先接触到并且也是最直观的是它的时域波形。
语音信号本身就是时域信号,因而时域分析是最早使用,也是应用最广泛的一种分析方法,这种方法直接利用语音信号的时域波形。
时域分析通常用于最基本的参数分析及应用,如语音的分割、预处理、大分类等。
这种分析方法的特点是:
表示语音信号比较直观、物理意义明确。
实现起来比较简单、运算量少。
可以得到语音的一些重要的参数。
④只使用示波器等通用设备,使用较为简单等。
MATLAB数据采集箱中提供的进行语音信号分析的函数命令如下:
wavread :
wavread 用于读取扩展名为“.wav”的声音文件。
其调用形式为:
y = wavread (‘filename’) 。
其作用是读取wave 文件,将读取的采样数据送到y 中。
sound:
音频信号是以向量的形式表示声音采样的。
sound 函数用于将向量转换为声音,其调用形式为:
sound (y ,fs) ,作用是向扬声器送出向量y 中的音频信号(采样频率为fs) 。
通过wavread和plot()函数即可显示语音信号的时域波形。
图形如下图2-1上面的图所示。
2.2语音信号的频域分析
语音信号的频域分析就是分析语音信号的频域持征。
从广义上讲,语音信号的频域分析包括语音信号的频谱、功率谱、倒频谱、频谱包络分析等,而常用的频域分析方法有带通滤波器组法、傅里叶变换法、线件预测法等几种。
本文介绍的是语音信号的傅里叶分析法。
因为语音波是一个非平稳过程,因此适用于周期、瞬变或平稳随机信号的标准傅里叶变换不能用来直接表示语音信号,而应该用短时傅里叶变换对语音信号的频谱进行分析,相应的频谱称为“短时谱”
在MATLAB的信号处理工具箱中函数FFT和IFFT用于快速傅立叶变换和逆变换。
函数FFT用于序列快速傅立叶变换,其调用格式为y=fft(x),其中,x是序列,y是序列的FFT,x可以为一向量或矩阵,若x为一向量,y是x的FFT且和x相同长度;若x为一矩阵,则y是对矩阵的每一列向量进行FFT。
函数FFT的另一种调用格式为y=fft(x,N),式中,x,y意义同前,N为正整数。
函数执行N点的FFT,若x为向量且长度小于N,则函数将x补零至长度N;若向量x的长度大于N,则函数截短x使之长度为N;若x为矩阵,按相同方法对x进行处理。
利用上述函数即可画出语音信号的频谱图,如下图2-1下面的图所示。
3.对语音信号进行加噪处理
利用MATLAB中的随机函数(randn)产生噪声加入到语音信号中,模仿语音信号被污染,并对其进行频谱分析。
程序见附录。
加入噪声后的时域图和频谱图如下:
图3-1
4.数字滤波器的设计
4.1滤波器的设计选择
设计数字滤波器的任务就是寻求一个因果稳定的线性时不变系统,并使系统函数H(z)具有指定的频率特性。
数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。
IIR滤波器的特征是,具有无限持续时间冲激响应。
这种滤波器一般需要用递归模型来实现,因而有时也称之为递归滤波器。
FIR滤波器的冲激响应只能延续一定时间,在工程实际中可以采用递归的方式实现,也可以采用非递归的方式实现。
FIR滤波器的最主要的特点是没有反馈回路,故不存在不稳定的问题;同时,可以在幅度特性是随意设置的同时,保证精确的线性相位。
它的最大好处是稳定、线性相位和广泛的适用范围,而它的最大缺点是阶数高,从而带来时延大、存储单元多等问题。
而IIR滤波器的首要优点是可在相同阶数时取得更好的滤波效果,对计算手段的要求较低,对频率分量的选择性好。
故本课程设计设计IIR滤波器。
4.2 IIR数字滤波器的设计
IIR数字滤波器是一种离散时间系统,其系统函数为
在设计IIR数字滤波器时,通常利用模拟滤波器来设计数字滤波器。
现广泛采取这种方法的原因是:
(1)模拟滤波器的技术已经非常成熟;
(2)可得闭合形式的解;(3)关于模拟滤波器的设计有大量的程序和表格可用。
可用双线性变换法或者冲激响应不变法将模拟滤波器转换为数字滤波器。
在实际应用中的滤波器一般都不是带限的,所以在用冲激响应不变法将模拟滤波器转换为数字滤波器时,会出现频谱混叠。
而IIR滤波器没有频谱混叠,故用双线性变换法设计IIR数字滤波器。
用双线性变换法设计数字滤波器的一般步骤如下:
(1)由模拟频率和数字频率的关系
(2)由模拟滤波器的指标设计模拟滤波器的H(s);
(3)用双线性变换法将模拟滤波器H(s)转换为数字滤波器H(z)。
用双线性变换法设计巴特沃斯数字低通滤波器的函数如下:
[N,Wc]=buttord(Wp,Ws,Ap,As,'s')
[num,den]=butter(N,Wc,'s')
函数buttord的输入参数Wp和Ws分别表示滤波器的通带截频和阻带截频,Ap和As表示滤波器的通带衰减和阻带衰减。
's'表示所设计的是模拟滤波器。
返回参数N为BW滤波器的阶数,Wc等于BW滤波器的3dB截频Wc。
[numd,dend]=bilinear(num,den,Fs)
num、den分别表示模拟滤波器系统函数H(s)的分子多项式和分母多项式。
numd、dend分别表示变换后数字滤波器系统函数H(z)的分子多项式和分母多项式。
Fs=1/T。
本设计中设计的IIR数字低通滤波器如下图4-1所示。
图4-1
4.3对含噪语音信号进行滤波
用上面设计好的IIR数字滤波器对录制的含噪语音信号进行滤波,在MATLAB中IIR滤波器利用函数filter对信号进行滤波,画出语音信号滤波前后的时域波形和频谱图,可以看出滤波前后的时域、频域变化。
如下图4-2所示:
5.心得体会
历时一周的课程设计结束了,虽然只是短暂的一周,但在这期间,却让我学到了东西,感觉受益匪浅!
最初看到设计题目,对语音信号进行时域和频域分析,感觉很熟悉,平常对时域、频域这两个名字接触得很多,从学习信号与系统、数字信号处理到数字语音信号处理,无不涉及时域和频域分析!
但深入研究题目才发现并不简单,尤其是对含噪语音信号的滤波感觉无从下手,数字信号处理的相关知识遗忘了很多。
经过一个星期的学习,我大体上明白了利用MATLAB进行语音信号处理的思路和方法,以及从构思到分析再到编程实现完成要求是多么的不易。
在这期间我明白了自己学习的不足,需要更好的掌握数字信号处理、数字语音信号处理和MATLAB的相关知识体系,应提高自己查阅资料以及使用MATLAB编程的能力。
通过这次课程设计,我还意识到了学习本专业课程的重要性,为以后的学习起了很好的引导和督促作用。
学会了怎样按照步骤完成老师布置任务,学会了分析问题和解决问题的能力;如何把理论知识运用到实际中去;提高了独立思考问题,和同学们讨论解决问题的能力。
这次课程设计经过了多次修改、补充,才最终完成。
更让我坚定了认真学习理论知识,并运用到实际中的决心。
另外这次课程设计,使我对语音信号有了更新的认识,对数字信号处理的知识又有了深刻的理解,在之前数字信号与处理的学习以及完成课后的作业的过程中,已经使用过MATLAB,对其有了一些基础的了解和认识。
通过这次练习是我进一步了解了信号的产生、采样及频谱分析的方法。
以及其中产生信号和绘制信号的基本命令和一些基础编程语言。
让我感受到只有在了解课本知识的前提下,才能更好的应用这个工具;并且熟练的应用MATLAB也可以很好的加深我对课程的理解,方便我的思维。
这次设计使我了解了MATLAB的使用方法,学会分析滤波器的优劣和性能,提高了分析和动手实践能力。
同时我相信,进一步加强对MATLAB的学习与研究对我今后的学习将会起到很大的帮助。
一周的课程设计虽然结束了,但是在这期间所学的知识和老师的指导却让我难以忘记。
参考文献
[1]赵力著,语音信号处理(第2版)[M],机械工业出版社,2010.
[2]胡航著,语音信号处理(第四版)[M],哈尔滨工业大学出版社,2009.
[3]张雄伟等著,现代语音处理技术及应用[M],机械工业出版社,2009.
[4]张雪英著,数字语音处理及MATLAB仿真,电子工业出版社,2010.
[5]徐靖涛.基于MATLAB的语音信号分析与处理[J].重庆科技学院学报2008年1月
[6]韩纪庆,张磊,郑铁然.语音信号处理.北京:
清华大学出版社,2004年9月
[7]易克初,田斌,付强.语音信号处理.北京:
国防工业出版社,2000年6月
[8]程佩青.数字信号处理教程(第二版).北京:
清华大学出版社,2001年8月
[9]贾永红.数字图像处理.武汉大学出版社,2003年9月
[10]陈怀琛.MATLAB及在电子信息课程中的应用[M].北京:
电子工业出版社.2008年1月
附录
程序1:
用MATLAB对语音信号进行分析,画出它的时域波形和频谱图
[x1]=wavread('ab.wav'); %读取语音信号的数据,赋给变量x1
sound(x1);
figure
(1);
subplot(2,1,1);
plot(x1); %做原始语音信号的时域图形
title('语音信号时域波形');
xlabel('采样点');
ylabel('幅值');
n=length(x1);
y1=fft(x1,n); %对信号做FFT变换
subplot(2,1,2);
plot(abs(y1)); %原始语音信号的频域图形
axis([0150000250])
title('语音信号频谱图');
xlabel('Hz');
ylabel('幅值');
程序2:
对语音信号进行加噪处理
[y,fs,nbits]=wavread('ab.wav');
N=length(y); %求出语