Matlab的语音信号处理.docx
《Matlab的语音信号处理.docx》由会员分享,可在线阅读,更多相关《Matlab的语音信号处理.docx(15页珍藏版)》请在冰豆网上搜索。
![Matlab的语音信号处理.docx](https://file1.bdocx.com/fileroot1/2022-11/24/a1c05fbb-6187-42b7-bbd0-95e4033e38f8/a1c05fbb-6187-42b7-bbd0-95e4033e38f81.gif)
Matlab的语音信号处理
课程设计论文
姓名:
姜勇
学院:
机电与车辆工程学院
专业:
电子信息工程2班
学号:
1665090208
语音信号分析与处理系统设计
一、语音信号分析与处理系统设计摘要
语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。
通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息形式。
Matlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种图的呈现等,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。
信号处理是Matlab重要应用的领域之一。
本论文主要介绍的是的语音信号的简单处理。
本论文针对以上问题,运用数字信号学基本原理实现语音信号的处理,在matlab7.0环境下综合运用信号提取,幅频变换以及傅里叶变换、滤波等技术来进行语音信号处理。
我所做的工作就是在matlab7.0软件上编写一个处理语音信号的程序,能对语音信号进行采集,并对其进行各种处理,达到简单的语音信号处理的目的。
二、关键字:
1.Matlab;
2.语音信号;
3.傅里叶变换;
4.信号处理。
三、语音信号处理的总体方案
1系统基本概述、要求
本文是用Matlab对含噪的的语音信号同时在时域和频域进行滤波处理和分析,在MATLAB应用软件下设计一个简单易用的图形用户界面(GUI),来解决一般应用条件下的各种语音信号的处理。
2系统框架及实现
1)语音信号的采集
2)使用电脑的声卡设备采集一段语音信号,并将其保存在电脑中。
3)语音信号的处理
Ⅰ.语音信号的时域分析
1提取:
通过图形用户界面上的菜单功能按键采集电脑设备上的一段音频信号,完成音频信号的频率,幅度等信息的提取,并得到该语音信号的波形图。
2调整:
在设计的用户图形界面下对输入的音频信号进行各种变化,如变化幅度、改变频率等操作,以实现对语音信号的调整。
Ⅱ.语音信号的频域分析
①变换:
在用户图形界面下对采集的语音信号进行Fourier等变换,并画出变换前后的频谱图和变换后的倒谱图。
2滤波:
滤除语音信号中的噪音部分,可采用低通滤波、高通滤波、带通滤波和帯阻滤波,并比较各种滤波后的效果。
4)语音信号的效果显示
通过用户图形界面的输出功能,将处理后的信号的语音进行播放,试听处理后的效果。
3系统初步流程图
图1列出了整个语音信号处理系统的工作流程:
图1语音信号处理系统的工作流程
其中信号调整包括信号的幅度和频率的任意倍数变化。
如下图2
图2信号调整
信号的滤波采用了四种滤波方式,来观察各种滤波性能的优缺点:
图3语音信号滤波的方式
在以上三图中,可以看到整个语音信号处理系统的流程大概分为三步,首先要读入待处理的语音信号,然后进行语音信号的处理,包括信息的提取、幅度和频率的变换以及语音信号的傅里叶变换、滤波等;滤波又包括低通滤波、高通滤波、带通滤波和带阻滤波等方式。
最后对处理过的语音信号进行处理后的效果显示。
以上是本系统的工作流程,本文将从语音信号的采集开始做详细介绍。
四、语音信号处理实例分析
1图形用户界面设计
在MATLAB主窗口中,选择File菜单中的New菜单项,再选择其中的GUI命令,就会显示图形用户界面的设计模板。
MATLAB为GUI设计一共准备了4种模板,分别是BlankGUI(默认)、GUIwithUicontrols(带控件对象的GUI模板)、GUIwithAxesandMenu(带坐标轴与菜单的GUI模板)与ModalQuestionDialog(带模式问话对话框的GUI模板)。
设计语音信号处理系统的用户图形操作界面(GUI)SoundProcess,其中菜单主要包括File、Process和Output三大主要部分,其中File菜单包括输入(Input)、保存(Save)和退出(Quit)等功能;Process菜单主要包括提取(Extract)、调整(Extract)、变换(Transform)和滤波(Filter)菜单,其中调整(Extract)包括幅度调整(Range)和频率调整(Frequency),滤波(Filter)菜单包含低通滤波(LowpassFilter)、高通滤波(HighpassFilter)、带通滤波(BandpassFilter)和帯阻滤波(BandstopFilter)等功能菜单。
2信号的采集
该系统是以一段简短的的语音信号做为分析样本,通过计算机系统将一段“主人,信息收到了”的语音信号保存到到计算机中,并且保存格式为“*.wav”。
3语音信号的处理设计
3.1语音信号的提取
在Matlab中使用Wavread函数,可得出信号的采样频率为22500,并且声音是单声道的。
利用Sound函数可以清晰的听到“主人,信息收到了”的语音。
采集数据并画出波形图。
其中声音的采样频率Fs=22050Hz,y为采样数据,NBITS表示量化阶数。
部分程序如下:
fn=input('EnterWAVfilename:
','s');%获取一个*.wav的文件
[x,fs,nb]=wavread(fn);
ms2=floor(fs*0.002);
ms10=floor(fs*0.01);
ms20=floor(fs*0.02);
ms30=floor(fs*0.03);
t=(0:
length(x)-1)/fs;%计算样本时刻
subplot(2,1,1);%确定显示位置
plot(t,x);%画波形图
legend('Waveform');
xlabel('Time(s)');
ylabel('Amplitude');
运行后弹出语音信号处理系统的操作界面如图4:
图4语音信号处理系统的操作界面
然后点击File菜单中的子菜单Input,回到Matlab软件的输入界面如图5:
图5输入界面
输入要处理的语音信号的名称,便可得到语音语音的波形图如图6:
图6语音语音的波形图
如图中提取的语音的波形图所示,整段音频数据中得声音高低起伏与录入的声音信号基本一致,并且可以观察到其中包含部分高频噪声。
3.2语音信号的调整
在语音信号的研究中,经常会对语音信号进行进行多倍频率以及多倍幅度变换调整,日常应用中,这种变换调整也经常要用到。
所以在设计中也添加了这种功能,并能够观察调整后的信号的波形图得变化,而且能通过语音处理界面的输出功能试听处理后的语音信号。
3.2.1语音信号的频率调整
在设计中,可以将语音信号的采样频率提高或降低,来实现语音信号的调整,得到理想的语音信号。
例如将采样频率提高一倍,即可得到语音信号频率为原频率2倍新的语音信号。
运行ProcessAdjustFrequency,得到如图7的信号波形图,并试听调整后的效果。
图7频率调整后波形图
与原语音信号相比,经过调整后的信号周期变为原来的1/2,此时的语速明显变快,即实现了信号的2倍频功能。
3.2.2语音信号的振幅调整
在设计中,可以将语音信号的幅度进行提高或降低操作,来实现语音信号的调整,得到声音音量大小不同的语音信号,例如将原语音信号的幅度提高一倍,得到如下图8的信号波形图,可以通过GUI操作界面的输出功能试听调整后的效果。
图8幅度调整后波形图
此时听到的调整后声音声调变高,但不是很明显,可以将幅度的变化值设置的比较大,那样的话就可以得到效果相当明显的语音信号了。
3.3语音信号的傅里叶变换
倒谱分析是指信号短时振幅谱的对数进行傅里叶反变换。
它具有可近似地分离并提取出频谱包络信息和细微结构信息的特点。
对语音信号进行频谱分析,在Matlab中可以利用函数fft对信号行快速傅里叶变换,得到信号的频谱图,并进行倒谱分析,得到倒谱图。
傅里叶变换的部分程序如下:
x=y(44101:
55050,1);%提取原语音信号的一部分
t=(0:
length(x)-1)/fs;%计算样本时刻
subplot(3,1,1);%确定显示位置
plot(t,x);%画波形图
legend('波形图');
xlabel('Time(s)');
ylabel('Amplitude');
Y=fft(x,hamming(length(x)));%做加窗傅里叶变换
fm=5000*length(Y)/fs;%限定频率范围
f=(0:
fm)*fs/length(Y);%确定频率刻度
subplot(3,1,2);
plot(f,20*log10(abs(Y(1:
length(f)))+eps));
legend('频谱图');%画频谱图
ylabel('幅度(db)');
xlabel('频率(Hz)');
c=fft(log(abs(x)+eps));%倒频谱计算
ms1=fs/1000;
ms20=fs/50
q=(ms1:
ms20)/fs;%确定倒频刻度
subplot(3,1,3);
plot(q,abs(c(ms1:
ms20)));%画倒谱图
legend('倒谱图');
xlabel('倒频(s)');
ylabel('倒频谱幅度(Hz)');
运行ProcessTransform,对语音信号的一部分进行傅里叶变换,并进行倒谱分析,得到如图9
图9声音样本波形图、频谱图和倒谱图
从上面的倒谱图可以看出.当读“主人,信息收到了”时,所对应的频率大概在200Hz左右。
这与人的语音信号频率集中在200Hz到4.5kHz之间是相一致的。
而在未发声的时间段内,相对的小高频部分(200500Hz)应该属于背景噪声。
3.4语音信号的滤波
从图7中发现,语音信号中包含背景噪声,这些噪声的频率一般较高。
所以可以利用MATLAB软件中的滤波器进行滤波处理,得到较为理想的语音信号。
3.4.1语音信号的低通滤波
系统中设计了一个截止频率为200Hz切比雪夫—I型低通滤波器,它的幅频特性如下图10:
图10低通滤波器的幅频特性
低通滤波器性能指标:
wp=0.075pi,ws=0.125pi,Rp=0.25;As=50dB;
经过低通滤波器处理后,比较处理前后的波形图的变化,如下图11:
图11低通滤波后波形和频谱的变化
低通滤波后,声音稍微有些发闷、低沉,原因是高频分量被低通滤波器衰减。
但是很接近原来的声音。
3.4.2语音信号的高通滤波
运用切比雪夫—Ⅱ型数字高通滤波器,对语音信号进行滤波处理。
高通滤波器性能指标:
wp=0.375pi,ws=0.425pi,Rp=0.25;As=50dB;然后将其与原信号的比较图如下图12:
图12高通滤波后波形和频谱的变化
高通滤波后,此时只有少许杂音,原因是低频分量被高通滤波器衰减,而人声部分正好是低频部分,所以只剩下杂音,或者发出高频杂音但人的耳朵听不到。
3.4.3语音信号的带通滤波
运用椭圆数字带通滤波器函数,对语音信号进行滤波处理后其与原信号的比较图如下图13:
图13带通滤波后波形和频谱的变化
3.4.4语音信号的带阻滤波
运用切比雪夫—Ⅱ型数字带阻滤波器,对语音信号进行滤波处理后其与原信号的比较图如下图14:
图14帯阻滤波后波形和频谱的变化
从以上各种数字滤波器经过滤波后得出的语音信号相比较,低通滤波后,声音稍微有些发闷,但是很接近原来的声音;高通滤波后听不到人的声音;带通滤波后声音有点像机器人小叮当发出的声音。
带阻滤波后,声音比较接近原来的声音。
从频谱图中我们可以看出声音的能量主要集中在低频(0.2pi即2204.5Hz以内)部分。
4语音信号的输出
可以将处理后的语音信号在Matlab软件先播放,体验处理后的语音信号的效果。
还可以将处理后的语音信号保存在电脑上。
运行FileSave,保存处理后的语音信号。
如果没有语音信号被处理,则系统会出现提示如下图15:
图4.12保存提示界面
如果有语音信号被处理,运行FileSave,系统会出现提示如下图4.13:
图15保存界面
保存后,整个操作过程就完成了。
五、总结
本文对语音信号处理系统的设计作了详细的介绍,采用一系列图像分析和处理技术,实现了语音信号的基本处理的功能,经过测试运行,本设计圆满的完成了对语音信号的读取与打开;较好的完成了对语音信号的频谱分析,通过fft变换,得出了语音信号的频谱图;在滤波这一块,课题主要是从数字滤波器入手来设计滤波器,基本实现了滤波,完成了各种滤波器的滤波效果比较,与课题的要求十分相符。
本设计主要有以下优点:
1)操作界面简练。
在进行语音信号处理的操作界面中,菜单按键明了,每个功能只对应一个按键,省去了大型软件的操作复杂步骤。
2)处理速度较快。
由于整个操作过程存在多个分步骤,并且每个步骤的联系不是很紧密,所以每个步骤中的运行速度很快。
3)占用内存空间比较小。
整个程序仅占用数十KB的物理空间,省去了软件的安装麻烦。
本设计还存在许多可以改进的地方,主要有以下几个方面:
1)本程序仅能进行一般应用条件下的语音信号处理,功能比较单一,不能进行复杂的语音信号处理。
2)由于系统定位于一般条件下的语音信号处理,计算精度比较低,不能进行精度较高的语音信号处理。
3)该程序由于编写简单,操作界面较小,对较大物理内存的语音信号文件不能进行处理。
六、参考文献
[1]李勇、徐震,MATLAB辅助现代工程数字信号处理,西安电子科技大学出版社。
[2]陈怀琛,数字信号处理教程——Matlab释义与实现,电子工业出版社。
[3]王一世,数字信号处理,北京理工大学出版社。
[4]程佩青,数字信号处理教程,清华大学出版社。
[5]刘幺和、宋庭新,语音识别与控制技术,科学出版社。
[6]高西全、丁玉美,数字信号处理,西安电子科技大学出版社。
[7]苏金明、张莲花、刘波,MATLAB工具箱应用,电子工业出版社。