语音信号处理.docx
《语音信号处理.docx》由会员分享,可在线阅读,更多相关《语音信号处理.docx(32页珍藏版)》请在冰点文库上搜索。
语音信号处理
目录
第1章引言··························································2
第2章总体设计方案·················································3
2.1设计思路····················································3
2.2总体设计框图·················································3
第3章设计原理·····················································5
3.1系统功能模块分析············································5
3.2WAV文件格式分析·············································5
3.3语音的录制和采集············································6
3.4时域和频域分析···············································8
3.5数字滤波器的设计原理·········································9
3.6软件介绍····················································11
第4章系统实现······················································12
第5章总结··························································14
附录一:
效果图
附录二:
程序
参考文献
摘要
语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科,是一门新兴的交叉学科,是在多门学科基础上发展起来的综合性技术。
它涉及到数字信号处理、模式识别、语言学、语音学、生理学、心理学及认知科学和人工智能等许多学科领域。
语音信号处理是目前发展最为迅速的信息科学研究领域中的一个,其研究设计一系列前沿课题,切处于发展之中。
其研究成果具有重要的学术及应用价值!
语音信号的采集和分析技术的应用和发展与语音学、声音测量学、电子测量技术等学科紧密联系,其中语音采集和分析仪器的小型化、智能化、数字化以及多功能化的发展越来越快,分析速度较以往也有了大幅度的提高。
本次课程设计主要介绍了语音信号的录制、语音信号的采集与分析、语音信号的采样、语音信号的合成、加噪后滤波器的设计。
通过PC机或录制一段语音信号,运用MATLAB与vc++6.0,设计滤波器加入噪声进行滤波处理,比较前后语音的区别。
关键词:
语音信号,采集与分析,语音合成,加噪,滤波器,MATLAB
第一章引言
语言是人类最重要的交流工具,它自然方便、准确高效。
随着社会的不断发展,各种各样的机器参与到了人类生产活动和社会活动,因此改善了人和机器之间的关系,使人对机器的操纵更加便利就显得越来越重要。
随着电子计算机和人工智能机器的广泛应用,人们发现:
人和机器之间最好的通信方式是语言通信,而语音是语言的声学表现方式。
要使机器听懂人讲话,并说出话来,需要做很多工作,这就是科研工作者研究了几十年的语音信号处理技术。
语音信号处理技术是计算机智能接口与人机交互的重要手段之一。
就语音识别技术而言,其基本任务是将输入的语音转化为相应的文本或命令。
语音识别也可将文字以口授的方式输入到计算机中,即广泛开展的听写机研究。
语音识别技术还可用于自动口语翻译,可将输入的语音翻译成另外一种语言的语音输出,实现跨语言的交流。
基于信号的情感处理研究是当前一个重要的研究方向,人们发现情感和态度所引起的变化对语音合成、语音识别、说话人确认等方面的影响较大,因而语音信号中情感处理的研究逐步引起了人们的重视。
目前许多研究者都在致力于研究情感对语音的影响以及情感状态下语音信号处理的有效方法。
对说话人识别技术,近年来已经在安全加密、银行电话查询服务等方面得到了很好的应用。
此外,在公安机关破案和法庭取证方面也发挥着重要的作用。
语音合成技术,现在已经在很多方面得到了实际应用,发挥了很好的社会效益,如公共交通中的自动报站、电话自动查询服务和文本校对中的语音提示等。
在电信声讯服务领域的智能电话查询系统中,满足了海量数据和动态查询的需求,可查询一些动态信息,如股票、成绩、节目、机场等信息。
因此,我们此次做了基于VC和MATLAB的数字语音信号处理课程设计。
第二章总体设计方案
2.1设计思路
1.语音信号采集
(1)使用电脑的声卡设备或其他录音设备采集一段语音信号,并将其保存为WAV格式在电脑中。
(2)原语音在MATLAB中进行预处理,并显示波形和频谱。
2.语音信号的处理
在MATLAB中,编写相应程序,实现对原始语音的合成、滤波、加噪等处理。
3.语音信号的呈现
在Vc中利用链接程序,把它与MATLAB连接起来,再通过Vc内部的编写程序实现语音信号在其界面中的显示。
图2.1语音信号设计流程图
2.2总体设计框图
总体设计是对信号源(即原始语音信号)进行观察与测量,然后进行信号表示,再进行信号的处理和变换,最后对信号进行提取和利用。
图2.2信号处理总体示意图
第三章设计原理
3.1系统功能模块分析
本系统根据研究内容涉及到语音的采集、播放、存储、分析等方面的内容,语音采集、播放、存储主要是为时域分析、频域分析等处理与分析提供底层服务支持,从而可以划分两大基本块:
底层服务和分析处理。
主要功能模块图如下:
图3.1系统功能模块示意图
3.2WAVE文件格式分析
WAVE文件是多媒体中使用语音文件格式之一,以RIFF格式为标准。
RIFF是英文ResourceInterchangeFileFormat的缩写,每个WAVE文件的头四个字节便是“RIFF”。
WAVE文件由文件头和数据体两大部分组成。
其中文件头又分为RIFF/WAV文件标识段和声音数据格式说明段两部分。
常见的声音文件主要有两种,分别对应于单声道(11.025KHz采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。
采样率是指:
声音信号在“模→数”转换过程中单位时间内采样的次数。
采样值是指每一次采样周期内声音模拟信号的积分值。
对于单声道声音文件,采样数据为八位的短整数(shortint00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。
WAVE文件数据块包含以脉冲编码调制(PCM)格式表示的样本。
WAVE文件是由样本组织而成的。
在单声道WAVE文件中,声道0代表左声道,声道1代表右声道。
在多声道WAVE文件中,样本是交替出现的。
WAVE文件的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数。
首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,这样8位和16位的PCM波形样本的数据格式
3.3语音的录制和采集
对于语音信号的录制与采集主要可以使用两种方法:
使用windows自带录音机录制、使用其他录音工具sndren32。
1.语音信号的录制
<一>使用window自带录音工具
使用windows自带录音机录制语音文件,进行数字信号的采集。
将话筒输入计算机的语音输入查扣上,启动录音机。
录制一段录音,录音停止后,文件存储器的后缀默认为.Wav。
将录制好文件保存,记录保存路径。
图3.2windows自带录音机
<二>使用其他录音设备
使用sndren32录音设备录制声音。
打开设备后,点开始录音键进行录音,默认保存为WAV格式,而且还可以进行频率的选择。
图3.3sndren32界面图3.4sndren32选择区
2.语音信号的采集
利用MATLAB进行对语音的处理,来获取原始语音信号的波形和频谱。
代码:
closeall;
i=1;
[x,fs,bits]=wavread('91.wav')
sound(x,fs,bits);
N=length(x);
n=0:
N-1;
figure(i);
subplot(2,1,1);
plot(n,x);
xlabel('n');
ylabel('x(n)');
title('原始语音信号');
subplot(2,1,2);
[H,f]=freqz(x,1,512,fs);
plot(f,20*log10(abs(H)));
xlabel('n');
ylabel('x(n)');
title('原始语音信号的频谱');
结果图:
3.5原始语音的波形和频谱
3.4时域和频域分析
1.时域分析
语音信号本身就是时域信号,进行语音信号分析时,最直观的就是语音信号的时域波形,因而时域分析是最早使用、应用范围最广的一种方法。
时域分析具有简单直观、清晰易懂、运算量小、物理意义明确等优点。
语音信号是一种典型的非平稳信号。
但是,由于语音的形成过程是与发音器官的运动密切相关的,这种物理运动比起声音振动速度要缓慢的多,因此语音信号常常可假定为短时平稳的,即在10~20ms这样的时间段内,其频谱特性和某些物理特征参量可近似地看作是不变的。
这样,我们就可以采用平稳过程的分析处理方法来处理了。
所以在时域分析过程中采用的短时能量分析、短时过零率分析、短时平均振幅都是在这种短时平稳假定下从时域来分析的一些物理参量。
2.频域分析
语音信号的频域分析就是分析语音信号的频域特征。
从广义上将,语音信号的频域分析包括语音信号的频谱、功率谱、倒频谱、频谱包络等,而常用的频域分析方法有带通滤波器组法、傅立叶变换发、线性预测法等几种。
因为语音信号是非平稳过程,因此适用于周期、瞬变、或平稳随机信号。
标准傅里叶变换不能直接表示语音信号,而应该用短时傅立叶变换对语音信号的频谱进行分析,相应的频谱成为“短时谱”
把语音信号加载入MATLAB仿真软件平台的工作空间中,然后画出信号的时域波形,然后再对语音信号进行频谱分析。
MATLAB提供了快速傅立叶变换算法FFT计算DET的函数fft。
图3.6傅里叶变换与反变换关系图
在时域内,语音信号具有“短时性”的特点,即在总体上,语音信号的特征是随着时间而变化的,但在一段较短的时间间隔内,语音信号保持平稳。
在浊音段表现出周期信号的特征,在清音段表现出随机噪声的特征。
在频域内,语音信号的频谱分量主要集中在300~3400Hz的范围内。
利用这个特点,可以用一个防混迭的带通滤波器将此范围内的语音信号频率分量取出,然后按8kHz的采样率对语音信号进行采样,就可以得到离散的语音信号。
信号x(n)的短时傅里叶变换定义为
式中,w(n)为窗口函数。
可以从两个角度理解函数
的物理意义:
一是当n固定时,例如
是将窗函数的起点移至
处的截取信号x(n),再经傅利叶变换得到的一个频谱函数。
这是直接从频率轴方向来理解的。
二是从时间轴方向来理解,当频率固定时,例如
可以看作是信号经过一个中心频率为
的带通滤波器产生的输出。
这是因为窗口函数w(n)通常具有低通频率响应,而指数
对语音信号x(n)有调制的作用,可使频谱产生移位,即将x(n)频谱中对应于频谱
的分量平移到零频。
3.7基于短时傅里叶频谱之间的转换
3.5数字滤波器的设计原理
数字滤波是语音信号分析中的重要组成部分之一,与模拟滤波相比,它具有精度和稳定性高、系统函数容易改变、灵活性强、便于大规模集成和可实现多维滤波等有点。
在信号的过滤、检测和参数的估计等方面,经典数字滤波器是使用最广泛的一种线性系统。
数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化过程中,是信号按预定的形式变化。
数字滤波器的作用是利用离散时间系统的特性对输入信号波形(或频谱)进行加工处理,或者说利用数字方法按预定的要求对信号进行变换。
数字滤波器有多种多类,根据数字滤波器冲级响应的时域特征,可讲数字滤波器分为两种,即无限长冲击响应(IIR)滤波器和有限长冲击响应(FIR)滤波器。
从性能上来说,IIR滤波器传输函数的极点可位于单位圆内的任何地方,因此可用较低的阶数获得高的选择性,所用的存储单元少,所以经济而效率高。
但是这个高效率是以相位的非线性为代价的。
选择性越好,则相位非线性越严重。
相反,FIR滤波器却可以得到严格的线性香味,然而由于FIR滤波器传输函数的极点固定在原点,所以只能用较高的阶数达到高的选择性;对于同样的滤波器设计指标,FIR滤波器所要求的阶数可以比IIR滤波器高5~10倍,结果,成本较高,信号延时也较大;如果按相同的选择性和相同的线性要求来说,则IIR滤波器就必须加全通网络进行相位矫正,同样增加滤波器的阶数和复杂性。
设计数字滤波器的的任务就是寻求一个因果稳定的线行使不变系统,并使系统函数H(z)具有指定的频率特性。
IIR滤波器和FIR滤波器的设计方法完全不同。
IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。
其设计步骤是:
先设计过渡模拟滤波器得到系统函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。
FIR滤波器比鞥采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。
对于线性相位滤波器,经常采用FIR滤波器。
对于数字高通、带通滤波器的设计,通用方法为双线性变换法。
可以借助于模拟滤波器的频率转换设计一个所需类型的过渡模拟滤波器,再经过双线性变换将其转换策划那个所需的数字滤波器。
以下函数为MATLAB中提供的相关函数,可以用于IIR和FIR滤波器的实现:
(1)卷积函数conv
调用格式:
c=conv(a,b)
功能描述:
计算两向量a和b的卷积,可以直接用于对有限长信号采用FIR滤波器和滤波。
(2)函数filter
调用格式:
y=filter(b,a,x)
功能描述:
该格式采用数字滤波器对数据进行滤波,既可以用于IIR滤波器,也可以用于FIR滤波器。
其中向量b和a分别表示系统函数的分子、分母多项式的洗漱,如a=1,此时表示FIR滤波器,否则就是IIR滤波器。
该函数是利用所给出的向量b和a,对x中的数据进行滤波,结果放入向量y。
(3)函数fftfilt
调用格式:
y=fftfilt(b,x)
功能描述:
改格式是利用基于FFT的重叠相加法对数据进行滤波,这频域滤波技术只对FIR滤波器有效。
该函数是通过向量b描述的滤波器x数据进行滤波。
(4)低通滤波器的性能指标:
fp=1000Hz,fc=1200Hz,As=100db,Ap=1dB
(5)高通滤波器的性能指标:
fp=3500Hz,fc=4000Hz,As=100dB,Ap=1dB;
(6)带通滤波器的性能指标:
fp1=1200Hz,fp2=3000hZ,fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB
3.6软件介绍
1.MATLAB
MATLAB的名称源自于MatrixLaboratory,它是一种科学计算软件,专门以矩阵的形式处理数据。
MATALB将高性能的数值计算和强大的数据可视化功能集成在一起,并提供了大量的内置函数,从而被广泛地应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作,而且利用MATLAB产品的开放式结构,可以非常容易地对MATLAB的功能进行扩充,从而在不断深化对为题认识的同时,不断完善MATALB产品以提供哦啊产品自身的竞争能力!
MATLAB主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
2.VC开发平台
本系统采用VisualC++平台进行开发,VisualC++提供MFC(MicrosoftFoundationClasses,微软基础类库),MFC是微软公司提供的类库(classLibraries),以C++类的形式封装了Windows的API(ApplicationProgrammingInterface,应用程序编程接口),并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含的类包含大量句柄封装类和很多Windows的内建控件和组件。
第4章系统实现
1.查阅资料
一开始布置课设时,我就去图书馆借了大量有关基于VC和MATLAB混合编码处理语音信号的图书,并且上网搜索了很多关于这方面的文章,为课程设计的后续开展做了保障。
2.语音的录制
我负责采集全组五个人的语音信号,并且保存为WAV格式。
3.设计界面
我负责设计总体的显示界面。
通过MFC打开对话框,然后加入相应的按键、选项和图片控件,形成基本的显示界面(如图4.1)。
然后在进行各个按键的功能设置。
首先对各个按键建立相应的类向导,再从Messages中选择BN_CLICKED,添加Function后,进行相应的控件程序编译。
总体程序我会在后面的附录里面给出。
图4.1设计界面
4.整体调试
在各自分工完成后,组内成员把各自成果给我,做最后的调试。
先在工具选项里面的目录中的includefiles、libraryfiles和sourcefiles中添加MATLAB相应的文件路径;再从工程设置的连接中的对象/库模块中添加libmx.lib、libmat.lib、libeng.lib和libmex.lib;然后在总程序中添加关于MATLAB的相应头文件。
最后再输入相关MATLAB语音处理的程序就可以完成最终的调试工作了。
图4.2调试相关截图
第5章总结
通过此次课程设计,我了解了自己有很多的不足,比如编写程序不顺、总体方案绘制不合理等等。
同时,我也学会了很多东西,更加熟练了用VC做界面和MATLAB处理语音信号;强化了C++语法的学习,更加深入的了解了其作用;掌握了灵活的程序检测错误的手段,在编写代码时要多加注释,更加安全的使用指针;在编写程序过程中还要多次保留重要的文档记录,设计的界面要更加的人性化等等。
回想整个课程设计,一开始入手的时候感觉不是很难,但实际的困难还是阻碍了我的步伐。
在设计界面功能显示和VC与MATLAB链接时我花费了大量的时间和精力。
设计界面时,每个功能键是都要进行链接和建立类向导的,但是怎么样链接这个问题一直困扰着我,最后通过不懈的努力我放弃了这个功能模块,转用其他方式显示相关的功能。
其中,在设计界面显示波形时,我在图书馆借了一本相关的书,里面有把波形图显示在图像控件中的实例,但是需要先安装别的SDK插件,由于其中一个SDK没有找到,所以没有试验成功。
在VC与MATLAB链接时,我也是查阅了相关资料和请叫其他同学,最后完成了相关链接。
其中在界面设置成员单选按键时,我花费了大量的时间,最后在同学的帮助下完成了需要的功能。
这让我懂得了团队协作的重要性和必要性。
我们设计的语音信号处理系统的基本功能是对语音信号进行采集、合成、滤波和加噪,其中没有完成老师所要求的分解和复原,在这里我们表示遗憾和对不起。
同时我们的设计还有一点瑕疵,就是在显示完采集的结果后,在按别的功能键就会在采集的图像中显示重影,最后我们也没有解决此问题,希望老师指点一下。
我们以后会更加努力的学习相关知识和专业技能,以完成老师和自己的目标。
最后感谢老师对我们组课程设计答辩的考核,我们有信心我们的成果会得到老师的认可,同时这对于我们以后的学习和工作将有很大的帮助。
同时,老师对我们的建议也会有很大的帮助。
我以后一定会扬长避短,刻苦学习相关知识,不断的充实自己。
附录一:
效果图
附录二:
程序
//JM11Dlg.cpp:
implementationfile
//
#include"stdafx.h"
#include"JM11.h"
#include"JM11Dlg.h"
#include"engine.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CJM11Dlgdialog
CJM11Dlg:
:
CJM11Dlg(CWnd*pParent/*=NULL*/)
:
CDialog(CJM11Dlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CJM11Dlg)
m_Radio1_5=-1;
//}}AFX