语音信号处理_第1页
语音信号处理_第2页
语音信号处理_第3页
语音信号处理_第4页
语音信号处理_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录第1章 引言················································

2、83;·········2第2章 总体设计方案······································

3、3;··········32.1 设计思路······································&

4、#183;·············32.2 总体设计框图··································&#

5、183;··············3第3章 设计原理··································

6、;···················53.1 系统功能模块分析····························

7、3;···············53.2 WAV文件格式分析································&#

8、183;············53.3 语音的录制和采集···································&

9、#183;········63.4 时域和频域分析·······································&

10、#183;·······83.5 数字滤波器的设计原理·······································

11、3;·93.6 软件介绍···············································&

12、#183;····11第4章 系统实现···········································

13、83;··········12第5章 总结······································&

14、#183;···················14附录一:效果图附录二:程序参考文献摘要语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科,是一门新兴的交叉学科,是在多门学科基础上发展起来的综合性技术。它涉及到数字信号处理、模式识别、语言学、语音学、生理学、心理学及认知科学和人工智能等许多学科领域。语音信号处理是目前发展最为迅速的信息科学研究领域中的一个,其研究设计一系列前沿课题,切处于发展

15、之中。其研究成果具有重要的学术及应用价值!语音信号的采集和分析技术的应用和发展与语音学、声音测量学、电子测量技术等学科紧密联系,其中语音采集和分析仪器的小型化、智能化、数字化以及多功能化的发展越来越快,分析速度较以往也有了大幅度的提高。本次课程设计主要介绍了语音信号的录制、语音信号的采集与分析、语音信号的采样、语音信号的合成、加噪后滤波器的设计。通过PC机或录制一段语音信号,运用MATLAB与vc+6.0,设计滤波器加入噪声进行滤波处理,比较前后语音的区别。 关键词:语音信号,采集与分析,语音合成,加噪,滤波器,MATLAB第一章 引言语言是人类最重要的交流工具,它自然方便、准确高效。随着社会

16、的不断发展,各种各样的机器参与到了人类生产活动和社会活动,因此改善了人和机器之间的关系,使人对机器的操纵更加便利就显得越来越重要。随着电子计算机和人工智能机器的广泛应用,人们发现:人和机器之间最好的通信方式是语言通信,而语音是语言的声学表现方式。要使机器听懂人讲话,并说出话来,需要做很多工作,这就是科研工作者研究了几十年的语音信号处理技术。语音信号处理技术是计算机智能接口与人机交互的重要手段之一。就语音识别技术而言,其基本任务是将输入的语音转化为相应的文本或命令。语音识别也可将文字以口授的方式输入到计算机中,即广泛开展的听写机研究。语音识别技术还可用于自动口语翻译,可将输入的语音翻译成另外一种

17、语言的语音输出,实现跨语言的交流。基于信号的情感处理研究是当前一个重要的研究方向,人们发现情感和态度所引起的变化对语音合成、语音识别、说话人确认等方面的影响较大,因而语音信号中情感处理的研究逐步引起了人们的重视。目前许多研究者都在致力于研究情感对语音的影响以及情感状态下语音信号处理的有效方法。对说话人识别技术,近年来已经在安全加密、银行电话查询服务等方面得到了很好的应用。此外,在公安机关破案和法庭取证方面也发挥着重要的作用。语音合成技术,现在已经在很多方面得到了实际应用,发挥了很好的社会效益,如公共交通中的自动报站、电话自动查询服务和文本校对中的语音提示等。在电信声讯服务领域的智能电话查询系统

18、中,满足了海量数据和动态查询的需求,可查询一些动态信息,如股票、成绩、节目、机场等信息。因此,我们此次做了基于VC和MATLAB的数字语音信号处理课程设计。第二章 总体设计方案2.1 设计思路 1.语音信号采集 (1)使用电脑的声卡设备或其他录音设备采集一段语音信号,并将其保存为WAV格式在电脑中。 (2)原语音在MATLAB中进行预处理,并显示波形和频谱。2.语音信号的处理在MATLAB中,编写相应程序,实现对原始语音的合成、滤波、加噪等处理。3.语音信号的呈现在Vc中利用链接程序,把它与MATLAB连接起来,再通过Vc内部的编写程序实现语音信号在其界面中的显示。开 始语音信号的采集预处理、

19、数字化绘制波形图声音文件结 束语音信号播放选择 图2.1语音信号设计流程图2.2总体设计框图总体设计是对信号源(即原始语音信号)进行观察与测量,然后进行信号表示,再进行信号的处理和变换,最后对信号进行提取和利用。信号源观察和测量信号表示信号变换信号合成信号滤波信号加噪图2.2 信号处理总体示意图第三章 设计原理3.1 系统功能模块分析 本系统根据研究内容涉及到语音的采集、播放、存储、分析等方面的内容,语音采集、播放、存储主要是为时域分析、频域分析等处理与分析提供底层服务支持,从而可以划分两大基本块:底层服务和分析处理。主要功能模块图如下:语音信号处理平台的设计底层服务模块分析处理模块语音采集语

20、音播放时域分析频域分析图3.1 系统功能模块示意图3.2 WAVE文件格式分析WAVE文件是多媒体中使用语音文件格式之一,以RIFF格式为标准。RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”。WAVE文件由文件头和数据体两大部分组成。其中文件头又分为RIFFWAV文件标识段和声音数据格式说明段两部分。常见的声音文件主要有两种,分别对应于单声道(11.025KHz采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。采样率是指:声音信号在“模数”转换过程中单位时间内采样的次数。采样值是指

21、每一次采样周期内声音模拟信号的积分值。对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。WAVE文件数据块包含以脉冲编码调制(PCM)格式表示的样本。WAVE文件是由样本组织而成的。在单声道WAVE文件中,声道0代表左声道,声道1代表右声道。在多声道WAVE文件中,样本是交替出现的。  WAVE文件的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数。首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,这样

22、8位和16位的PCM波形样本的数据格式3.3 语音的录制和采集对于语音信号的录制与采集主要可以使用两种方法:使用windows自带录音机录制、使用其他录音工具sndren32。1.语音信号的录制<一>使用window自带录音工具使用windows自带录音机录制语音文件,进行数字信号的采集。将话筒输入计算机的语音输入查扣上,启动录音机。录制一段录音,录音停止后,文件存储器的后缀默认为.Wav。将录制好文件保存,记录保存路径。 图3.2 windows自带录音机<二>使用其他录音设备使用sndren32录音设备录制声音。打开设备后,点开始录音键进行录音,默认保存为WAV格式

23、,而且还可以进行频率的选择。 图3.3sndren32界面 图3.4sndren32选择区2.语音信号的采集利用MATLAB进行对语音的处理,来获取原始语音信号的波形和频谱。代码:close all;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=fre

24、qz(x,1,512,fs);plot(f,20*log10(abs(H);xlabel('n');ylabel('x(n)');title('原始语音信号的频谱');结果图:3.5 原始语音的波形和频谱3.4 时域和频域分析1.时域分析语音信号本身就是时域信号,进行语音信号分析时,最直观的就是语音信号的时域波形,因而时域分析是最早使用、应用范围最广的一种方法。时域分析具有简单直观、清晰易懂、运算量小、物理意义明确等优点。 语音信号是一种典型的非平稳信号。但是,由于语音的形成过程是与发音器官的运动密切相关的,这种物理运动比起声音振动速度要缓慢的多

25、,因此语音信号常常可假定为短时平稳的,即在1020ms这样的时间段内,其频谱特性和某些物理特征参量可近似地看作是不变的。这样,我们就可以采用平稳过程的分析处理方法来处理了。所以在时域分析过程中采用的短时能量分析、短时过零率分析、短时平均振幅都是在这种短时平稳假定下从时域来分析的一些物理参量。2.频域分析语音信号的频域分析就是分析语音信号的频域特征。从广义上将,语音信号的频域分析包括语音信号的频谱、功率谱、倒频谱、频谱包络等,而常用的频域分析方法有带通滤波器组法、傅立叶变换发、线性预测法等几种。因为语音信号是非平稳过程,因此适用于周期、瞬变、或平稳随机信号。标准傅里叶变换不能直接表示语音信号,而

26、应该用短时傅立叶变换对语音信号的频谱进行分析,相应的频谱成为“短时谱”把语音信号加载入MATLAB仿真软件平台的工作空间中,然后画出信号的时域波形,然后再对语音信号进行频谱分析。MATLAB提供了快速傅立叶变换算法FFT计算DET的函数fft。傅里叶变换傅里叶反变换时域到频域频域到时域图3.6 傅里叶变换与反变换关系图在时域内,语音信号具有“短时性”的特点,即在总体上,语音信号的特征是随着时间而变化的,但在一段较短的时间间隔内,语音信号保持平稳。在浊音段表现出周期信号的特征,在清音段表现出随机噪声的特征。在频域内,语音信号的频谱分量主要集中在3003400Hz的范围内。利用这个特点,可以用一个

27、防混迭的带通滤波器将此范围内的语音信号频率分量取出,然后按8kHz的采样率对语音信号进行采样,就可以得到离散的语音信号。信号x(n)的短时傅里叶变换定义为式中,w(n)为窗口函数。可以从两个角度理解函数的物理意义:一是当n固定时,例如,是将窗函数的起点移至处的截取信号x(n),再经傅利叶变换得到的一个频谱函数。这是直接从频率轴方向来理解的。二是从时间轴方向来理解,当频率固定时,例如可以看作是信号经过一个中心频率为的带通滤波器产生的输出。这是因为窗口函数w(n)通常具有低通频率响应,而指数对语音信号x(n)有调制的作用,可使频谱产生移位,即将x(n)频谱中对应于频谱的分量平移到零频。时间信号傅里

28、叶谱傅里叶变换傅里叶反变换自相关函数傅里叶变换傅里叶反变换自乘傅里叶谱傅里叶谱对数倒谱傅里叶变换傅里叶反变换3.7 基于短时傅里叶频谱之间的转换3.5 数字滤波器的设计原理数字滤波是语音信号分析中的重要组成部分之一,与模拟滤波相比,它具有精度和稳定性高、系统函数容易改变、灵活性强、便于大规模集成和可实现多维滤波等有点。在信号的过滤、检测和参数的估计等方面,经典数字滤波器是使用最广泛的一种线性系统。数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化过程中,是信号按预定的形式变化。数字滤波器的作用是利用离散时间系统的特性对输入信号波形(

29、或频谱)进行加工处理,或者说利用数字方法按预定的要求对信号进行变换。数字滤波器有多种多类,根据数字滤波器冲级响应的时域特征,可讲数字滤波器分为两种,即无限长冲击响应(IIR)滤波器和有限长冲击响应(FIR)滤波器。从性能上来说,IIR滤波器传输函数的极点可位于单位圆内的任何地方,因此可用较低的阶数获得高的选择性,所用的存储单元少,所以经济而效率高。但是这个高效率是以相位的非线性为代价的。选择性越好,则相位非线性越严重。相反,FIR滤波器却可以得到严格的线性香味,然而由于FIR滤波器传输函数的极点固定在原点,所以只能用较高的阶数达到高的选择性;对于同样的滤波器设计指标,FIR滤波器所要求的阶数可

30、以比IIR滤波器高510倍,结果,成本较高,信号延时也较大;如果按相同的选择性和相同的线性要求来说,则IIR滤波器就必须加全通网络进行相位矫正,同样增加滤波器的阶数和复杂性。设计数字滤波器的的任务就是寻求一个因果稳定的线行使不变系统,并使系统函数H(z)具有指定的频率特性。IIR滤波器和FIR滤波器的设计方法完全不同。IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。其设计步骤是:先设计过渡模拟滤波器得到系统函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。FIR滤波器比鞥采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。

31、对于线性相位滤波器,经常采用FIR滤波器。对于数字高通、带通滤波器的设计,通用方法为双线性变换法。可以借助于模拟滤波器的频率转换设计一个所需类型的过渡模拟滤波器,再经过双线性变换将其转换策划那个所需的数字滤波器。以下函数为MATLAB中提供的相关函数,可以用于IIR和FIR滤波器的实现:(1)卷积函数conv调用格式:c=conv(a,b) 功能描述:计算两向量a和b的卷积,可以直接用于对有限长信号采用FIR滤波器和滤波。(2)函数filter调用格式:y=filter(b,a,x)功能描述:该格式采用数字滤波器对数据进行滤波,既可以用于IIR滤波器,也可以用于FIR滤波器。其中向量b和a分别

32、表示系统函数的分子、分母多项式的洗漱,如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)带通滤波器的性能指标:f

33、p1=1200Hz,fp2=3000hZ,fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB3.6 软件介绍1.MATLABMATLAB的名称源自于Matrix Laboratory,它是一种科学计算软件,专门以矩阵的形式处理数据。MATALB将高性能的数值计算和强大的数据可视化功能集成在一起,并提供了大量的内置函数,从而被广泛地应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作,而且利用MATLAB产品的开放式结构,可以非常容易地对MATLAB的功能进行扩充,从而在不断深化对为题认识的同时,不断完善MATALB产品以提供哦啊产品自身的竞争能力!MATLAB

34、主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。2.VC开发平台本系统采用Visual C+平台进行开发,Visual C+提供MFC(Microsoft Foundation Classes, 微软基础类库) ,MFC是微软公司提供的类库(class Libraries

35、),以C+类的形式封装了Windows的API(Application Programming Interface,应用程序编程接口),并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量句柄封装类和很多Windows的内建控件和组件。第4章 系统实现1.查阅资料一开始布置课设时,我就去图书馆借了大量有关基于VC和MATLAB混合编码处理语音信号的图书,并且上网搜索了很多关于这方面的文章,为课程设计的后续开展做了保障。2.语音的录制我负责采集全组五个人的语音信号,并且保存为WAV格式。3.设计界面我负责设计总体的显示界面。通过MFC打开对话框,然后加入相应的按键、选项

36、和图片控件,形成基本的显示界面(如图4.1)。然后在进行各个按键的功能设置。首先对各个按键建立相应的类向导,再从Messages中选择BN_CLICKED,添加Function后,进行相应的控件程序编译。总体程序我会在后面的附录里面给出。图4.1 设计界面4. 整体调试在各自分工完成后,组内成员把各自成果给我,做最后的调试。先在工具选项里面的目录中的include files、library files和source files中添加MATLAB相应的文件路径;再从工程设置的连接中的对象/库模块中添加libmx.lib、libmat.lib、libeng.lib和libmex.lib;然后在总

37、程序中添加关于MATLAB的相应头文件。最后再输入相关MATLAB语音处理的程序就可以完成最终的调试工作了。图4.2 调试相关截图第5章 总结通过此次课程设计,我了解了自己有很多的不足,比如编写程序不顺、总体方案绘制不合理等等。同时,我也学会了很多东西,更加熟练了用VC做界面和MATLAB处理语音信号;强化了C+语法的学习,更加深入的了解了其作用;掌握了灵活的程序检测错误的手段,在编写代码时要多加注释,更加安全的使用指针;在编写程序过程中还要多次保留重要的文档记录,设计的界面要更加的人性化等等。回想整个课程设计,一开始入手的时候感觉不是很难,但实际的困难还是阻碍了我的步伐。在设计界面功能显示和

38、VC与MATLAB链接时我花费了大量的时间和精力。设计界面时,每个功能键是都要进行链接和建立类向导的,但是怎么样链接这个问题一直困扰着我,最后通过不懈的努力我放弃了这个功能模块,转用其他方式显示相关的功能。其中,在设计界面显示波形时,我在图书馆借了一本相关的书,里面有把波形图显示在图像控件中的实例,但是需要先安装别的SDK插件,由于其中一个SDK没有找到,所以没有试验成功。在VC与MATLAB链接时,我也是查阅了相关资料和请叫其他同学,最后完成了相关链接。其中在界面设置成员单选按键时,我花费了大量的时间,最后在同学的帮助下完成了需要的功能。这让我懂得了团队协作的重要性和必要性。我们设计的语音信

39、号处理系统的基本功能是对语音信号进行采集、合成、滤波和加噪,其中没有完成老师所要求的分解和复原,在这里我们表示遗憾和对不起。同时我们的设计还有一点瑕疵,就是在显示完采集的结果后,在按别的功能键就会在采集的图像中显示重影,最后我们也没有解决此问题,希望老师指点一下。我们以后会更加努力的学习相关知识和专业技能,以完成老师和自己的目标。最后感谢老师对我们组课程设计答辩的考核,我们有信心我们的成果会得到老师的认可,同时这对于我们以后的学习和工作将有很大的帮助。同时,老师对我们的建议也会有很大的帮助。我以后一定会扬长避短,刻苦学习相关知识,不断的充实自己。附录一:效果图附录二:程序/ JM11Dlg.c

40、pp : implementation file/#include "stdafx.h"#include "JM11.h"#include "JM11Dlg.h"#include "engine.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpubl

41、ic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECL

42、ARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INIT void CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/

43、AFX_MSG_MAPEND_MESSAGE_MAP()/ CJM11Dlg dialogCJM11Dlg:CJM11Dlg(CWnd* pParent /*=NULL*/): CDialog(CJM11Dlg:IDD, pParent)/AFX_DATA_INIT(CJM11Dlg)m_Radio1_5 = -1;/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);void C

44、JM11Dlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CJM11Dlg)DDX_Radio(pDX, IDC_RADIO1, m_Radio1_5);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CJM11Dlg, CDialog)/AFX_MSG_MAP(CJM11Dlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CL

45、ICKED(IDC_BUTTON2, OnButton2)ON_BN_CLICKED(IDC_BUTTON3, OnButton3)ON_BN_CLICKED(IDC_BUTTON4, OnButton4)ON_BN_CLICKED(IDC_BUTTON5, OnButton5)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CJM11Dlg message handlersBOOL CJM11Dlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu item to system menu./ I

46、DM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu

47、(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra in

48、itialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CJM11Dlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will

49、 need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CJM11Dlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center

50、icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system

51、calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CJM11Dlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CJM11Dlg:OnButton1() / TODO: Add your control notification handler code herestatic char BASED_CODE file = "WAV Files(*.WAV)|*.wav|所有文件(*.*)|*.*|&

52、quot;CFileDialog SelectFile(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,file,NULL);SelectFile.DoModal();CString FileName;UpdateData(FALSE);void CJM11Dlg:OnButton2() / TODO: Add your control notification handler code hereUpdateData();Engine*ep;if(!(ep=engOpen(NULL)MessageBox("can't s

53、tart MATLAB engine");return;engEvalString(ep,"clear; close all; clc;");switch(m_Radio1_5)case 0:engEvalString(ep,"x,fs,bits=wavread('yt.wav');");break;case 1:engEvalString(ep,"x,fs,bits=wavread('wyk.wav');");break;case 2:engEvalString(ep,"x,fs,

54、bits=wavread('wzs.wav');");break;case 3:engEvalString(ep,"x,fs,bits=wavread('pzw.wav');");break;engEvalString(ep,"close all;");/engEvalString(ep,"x,fs,bits=wavread('99.wav');");engEvalString(ep,"sound(x,fs,bits);");engEvalString(ep

55、,"N=length(x);");engEvalString(ep,"n=0:N-1;");engEvalString(ep,"figure(1);");engEvalString(ep,"subplot(2,1,1);");engEvalString(ep,"plot(n,x);");engEvalString(ep,"xlabel('n');");engEvalString(ep,"ylabel('x(n)');");e

56、ngEvalString(ep,"title('原始语音信号');");engEvalString(ep,"subplot(2,1,2);");engEvalString(ep,"H,f=freqz(x,1,512,fs);");engEvalString(ep,"plot(f,20*log10(abs(H);");engEvalString(ep,"xlabel('n');");engEvalString(ep,"ylabel('x(n)

57、9;);");engEvalString(ep,"title('原始语音信号的频谱');");HWND m_plot;m_plot=:FindWindow(NULL,("Figure 1");long lstyle=:GetWindowLong(m_plot,GWL_STYLE);RECT PlotRect;CWnd *PlotArea;PlotArea=GetDlgItem(IDC_4);PlotArea->GetWindowRect(&PlotRect);long Width=PlotRect.right-Pl

58、otRect.left;long Height=PlotRect.bottom-PlotRect.top;:SetParent(m_plot,PlotArea->GetSafeHwnd();:SetWindowPos(m_plot,NULL,1,1,Width,Height,SWP_NOZORDER|SWP_NOACTIVATE);void CJM11Dlg:OnButton3() / TODO: Add your control notification handler code hereEngine*ep;if(!(ep=engOpen(NULL)MessageBox("c

59、an't start MATLAB engine");return;engEvalString(ep,"clear; close all; clc;");switch(m_Radio1_5)case 0:engEvalString(ep,"x,fs,bits=wavread('yt.wav');");break;case 1:engEvalString(ep,"x,fs,bits=wavread('wyk.wav');");break;case 2:engEvalString(ep,&

60、quot;x,fs,bits=wavread('wzs.wav');");break;case 3:engEvalString(ep,"x,fs,bits=wavread('pzw.wav');");break;/engEvalString(ep,"m1=wavread('99.wav');");engEvalString(ep,"m1=x;");engEvalString(ep,"m2=wavread('91.wav');");engEva

61、lString(ep,"if length(m1)>length(m2);");engEvalString(ep,"m3=m2;zeros(length(m1)-length(m2),1);");engEvalString(ep,"else");engEvalString(ep,"m3=m1;zeros(length(m2)-length(m1),1);");engEvalString(ep,"end");engEvalString(ep," m=1.0*m2+m3;"

62、);engEvalString(ep,"wavwrite(m,22050,'Y.wav');"); engEvalString(ep,"x,fs,bits=wavread('Y.wav');");engEvalString(ep,"sound(x,fs,bits);");engEvalString(ep,"N=length(x);");engEvalString(ep,"n=0:N-1;");engEvalString(ep,"figure(2);&qu

63、ot;);engEvalString(ep,"subplot(2,1,1);");engEvalString(ep,"plot(n,x);");engEvalString(ep,"xlabel('n');");engEvalString(ep,"ylabel('x(n)');");engEvalString(ep,"title('合成语音信号');");engEvalString(ep,"subplot(2,1,2);");en

64、gEvalString(ep,"H,f=freqz(x,1,512,fs);");engEvalString(ep,"plot(f,20*log10(abs(H);");engEvalString(ep,"xlabel('n');");engEvalString(ep,"ylabel('x(n)');");engEvalString(ep,"title('合成语音信号的频谱');");HWND m_plot1;m_plot1=:FindWindow

65、(NULL,("Figure 2");long lstyle=:GetWindowLong(m_plot1,GWL_STYLE);RECT PlotRect1;CWnd *PlotArea1;PlotArea1=GetDlgItem(IDC_5);PlotArea1->GetWindowRect(&PlotRect1);long Width=PlotRect1.right-PlotRect1.left;long Height=PlotRect1.bottom-PlotRect1.top;:SetParent(m_plot1,PlotArea1->GetS

66、afeHwnd();:SetWindowPos(m_plot1,NULL,1,1,Width,Height,SWP_NOZORDER|SWP_NOACTIVATE);void CJM11Dlg:OnButton4() / TODO: Add your control notification handler code hereEngine*ep;if(!(ep=engOpen(NULL)MessageBox("can't start MATLAB engine");return;engEvalString(ep,"clear; close all; clc

67、;");switch(m_Radio1_5)case 0:engEvalString(ep,"x,fs,bits=wavread('yt.wav');");break;case 1:engEvalString(ep,"x,fs,bits=wavread('wyk.wav');");break;case 2:engEvalString(ep,"x,fs,bits=wavread('wzs.wav');");break;case 3:engEvalString(ep,"x,fs,bits=wavread('pzw.wav');");break;/engEvalString(ep,"x=wavread('99.WAV');");engEvalString(ep,"sound(x);");engEvalString(ep,"N=5;wc=0.3;");engEvalString(ep,"b,a=butter(N,wc,'high');");engEvalString(ep,"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论