基于matlab的语音信号的合成(加入延迟混响)_第1页
基于matlab的语音信号的合成(加入延迟混响)_第2页
基于matlab的语音信号的合成(加入延迟混响)_第3页
基于matlab的语音信号的合成(加入延迟混响)_第4页
基于matlab的语音信号的合成(加入延迟混响)_第5页
已阅读5页,还剩14页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

..中北大学课程设计说明书学生__学号:学生__学号:学生__学号:学院:信息与通信工程学院专业:电子信息工程题目:信息处理实践:语言信号的合成指导杨娜职称:副教授2016年1月3日..中北大学课程设计任务书15/16学年第一学期学院:信息与通信工程学院专业:电子信息工程学生__学号:学生__学号:学生__学号:课程设计题目:信息处理实践:语言信号的合成起迄日期:2016年1月4日~2016年1月22日课程设计地点:201,503,1号楼教室指导教师:杨娜系主任:王浩全下达任务书日期:2016年1月3日..课程设计任务书1.设计目的:通过本次课程设计使学生掌握信息处理理论的相关知识。通过具体的设计问题将理论与实践相结合,培养学生运用所学独立解决问题的能力。〔1了解信号的读取、保存、截取、拼接等技术。〔2了解MATLAB的信号处理技术。〔3掌握MATLAB实现语音信号的读取、保存、拼接。2.设计内容和要求〔包括原始数据、技术参数、条件、设计要求等:<1>利用windows的录音机或其他外部设备获取两种或两种以上音乐信号,并将信号进行转换和存储。<2>自行截取各采集信号中的一段进行信号的拼接。<3>保存拼接后的音乐信号,并进行播放证实存储的正确性。3.设计工作任务及工作量的要求〔包括课程设计计算说明书<论文>、图纸、实物样品等〕:〔1要求设计组的每个成员都要了解设计的要求和思路;〔2编写详细的设计说明书三份;〔3要求有正确的运行结果及结果分析。..课程设计任务书4.主要参考文献:[1]程佩青.数字信号处理教程.北京:清华大学出版社,2002[2]刘敏,魏玲.Matlab通信仿真与应用.北京:国防工业出版社,2001[3]高政.信号处理与系统分析.北京:中国水利水电出版社,2001[4]俞一彪,孙兵.数字信号处理——理论与应用.XX:东南大学出版社,2000[5]数字信号处理孙洪等译电子工业出版社[6]精通MATLAB6.5版张志涌等编著北京航空航天大学出版社[7]MATLAB扩展编程何强何英编著清华大学出版社[8]数字信号处理教程程佩青编著清华大学出版社5.设计成果形式及要求:〔1提供详细的设计说明书三份;〔2提供详细数据及分析结果。6.工作计划及进度:20XX6月25日~20XX7月1日:查资料20XX7月2日~7月5日:在指导教师指导下设计方案及程序7月6日~7月10日:学生上机调试程序,指导教师辅导7月11日~7月12日:完成课程设计说明书7月13日:答辩系主任审查意见:签字:年月日..目录摘要.........................................................................................................................〔11.MATLAB简介...................................................................................................〔12.GUI简介.........................................................................................................〔1设计方案...........................................................................................................设计步骤及结果1.语音信号的采集..............................................2.语音信号的截取.................3.语音信号的合成.................4.合成语音的验证.........5.GUI界面设计及实现.........设计评述参考文献..............附录................摘要语音信号处理是一门比较实用的电子工程专业课程,语音是人类获取信息的的重要来源和利用信息的重要手段。通过语言相互传递信息是人类最重要的基本功能之一。语音信号是一种非平稳的时变信号,它携带着各种信息。在语音编码、语音合成、语音识别和语音增强等语音处理中无一例外需要提取语音中包含的各种信息。Matlab是一个数据分析和处理功能十分强大的工程实用软件。本文介绍了利用matlab软件及其中的图形用户界面<GUI>实现驱动声卡采集语音信号和语音信号采集后的文档处理方法,并通过实例利用matlab分析了语音信号处理的过程。关键词:语音信号处理MATLAB频谱分析语音合成1.MATLAB简介MATLAB是美国MathWorks公司推出的一种面向工程和科学计算的交互式计算软件,它以矩阵运算为基础,把计算、可视化、程序设计融合到了一个简单易用的交互式工作环境中。同时由于MATLAB是一个数据分析和处理功能十分强大的工程实用软件,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。2.GUI简介GUIDE是GraphicUserInterfaceDesignEnvironment的简称。它是一个设计图形用户界面的集成开发环境。它使得图形对象的生成和管理变得简单、直接。在MATLAB的命令窗口中输入guide命令,即可开启GUIDE的主界面图形用户界面<GUI>是包含图形的对象,如:窗口、图标、菜单和文本的用户界面。..一.设计方案语音验证信号拼接信号采集信号截取语音验证信号拼接信号采集信号截取图1-1总体设计方案女声录入男声录入女声录入男声录入时频分析时频分析时频分析时频分析提取信号提取信号提取信号提取信号信号的合成分析分析处理图1-2具体运行流程图本实验通过应用MATLAB软件实现声音信号的采集、截取、拼接与结果分析。分析和处理音频信号,首先要对声音信号进行采集,MATLAB

的数据采集工具箱提供了一整套命令和函数,通过调用这些函数和命令,可直接控制声卡进行数据采集。Windows自带的录音机程序也可驱动声卡来采集语音信号,并能保存为WAV格式文件,供MATLAB相关函数直接读取、写入或播放。本实验以WAV格式音频信号作为分析处理的输入数据,用MATLAB处理音频信号的基本流程是:先将WAV格式音频信号经过wavread函数转换成MATLAB列数组变量;再用MATLAB强大的运算能力进行数据分析和处理,如时域分析、频域分析、数字滤波、信号合成、信号变换、识别和增强等等;处理后的数据如是音频数据,则可用wavwrite转换成WAV格式文件或用sound函数直接回放。二.设计步骤及结果1.语音信号的采集首先利用windows下的录音机,录制一段信号,时间控制在10秒左右,然后将音频文件保存"yuan1.wav"、"yuan2.wav"。再在MATLAB软件平台下,利用函数audioread对语音信号进行采样,记住采样频率和采样点数。然后进行语音信号的分析,首先画出语音信号的时域波形图,并利用fft画出频域图。参数设定:采样频率88060Hz,采样时间10s,作88060点fft。程序如下:fs=88060;%采样频率x1=audiorecorder<fs,16,1>;recordblocking<x1,10>;%10秒y1=getaudiodata<x1>;subplot<2,2,1>;plot<y1>;title<'男声录入波形图'>;xlabel<'样本数'>;ylabel<'幅值'>;Y1=fft<y1>;subplot<2,2,3>;plot<abs<Y1>>;title<'男声录入频谱图'>;xlabel<'Freq/HZ'>;ylabel<'幅值'>;filename='yuan1.wav'audiowrite<filename,y1,fs>;x2=audiorecorder<fs,16,1>;recordblocking<x2,10>;y2=getaudiodata<x2>;subplot<2,2,2>;plot<y2>;title<'女声录入波形图'>;xlabel<'样本数'>;ylabel<'幅值'>;Y2=fft<y2>;subplot<2,2,4>;plot<abs<Y2>>;title<'女声录入频谱图'>;xlabel<'Freq/HZ'>;ylabel<'幅值'>;filename='yuan2.wav'audiowrite<filename,y2,fs>;结果如下:图2-1采集信号波形和频谱图图2-2生成原始信号文件2.语音信号的截取自行设定截取起始时间和结束时间,对原始信号进行截取,并将截取后的数据保存为wav格式文件;再对截取后的信号波形图显示。程序如下:%截取信号——————————————sec1=2%剪切开始的时间sec2=5%剪切结束的时间filename='yuan1.wav'[n1,F]=audioread<filename>;n1_new=n1<<<F*sec1+1>:F*sec2>,:>;subplot<1,2,1>;plot<n1_new>;title<'截取男声波形图'>;xlabel<'样本数'>;ylabel<'幅值'>;filename='yuan1new.wav'audiowrite<filename,n1_new,F>;filename='yuan2.wav'[n2,F]=audioread<filename>;n2_new=n2<<<F*sec1+1>:F*sec2>,:>;subplot<1,2,2>;plot<n2_new>;title<'截取女声波形图'>;xlabel<'样本数'>;ylabel<'幅值'>;filename='yuan2new.wav'audiowrite<filename,n2_new,F>;结果如下:图2-3截取信号的波形图对比图2-1,可以发现截取信号的波形正是图2-1波形中设定截取的一段。图2-4生成截取信号文件3.语音信号的合成按照设计要求将截取的语音信号进行拼接,并保存在新的wav文件中。但设计过程中发现单纯的拼接信号,在拼接处会给听者极大的突兀感,所以在设计中加入信号的延迟混响,以达到减少突兀感,使语音过渡更加平滑。合成后,生成波形和频谱图进行分析。所谓延迟混响,就是在各自截取段的基础上,对第一段的末尾进行延时补零,再对第二段的开头进行延时补零,在此基础上采取部分相加的方法实现该时段内的混响,延长的时长设定在0.1s,混响的时间取在1s。程序如下:sec1=2%剪切开始的时间sec2=5%剪切结束的时间filename='yuan1new.wav'[new1,F]=audioread<filename>;filename='yuan2new.wav'[new2,F]=audioread<filename>;n_1=new1<<sec2-sec1-1>*F:<sec2-sec1>*F>;n_2=new2<1:F>;j=10;z1=[n_1;zeros<F/j,1>];z2=[zeros<F/j+1,1>;n_2];z=z1+z2;new3<1:<sec2-sec1-1>*F>=new1<1:<sec2-sec1-1>*F>;new3<<sec2-sec1-1>*F:<sec2-sec1+1/j>*F>=z;new3<<sec2-sec1+1/j>*F-1:<2*<sec2-sec1>-1+1/j>*F>=new2<F:<sec2-sec1>*F>;subplot<1,2,1>;plot<new3>;title<'合成波形图'>;xlabel<'样本数'>;ylabel<'幅值'>;N1=fft<new3>;subplot<1,2,2>;plot<abs<N1>>;title<'合成频谱图'>;xlabel<'Freq/HZ'>;ylabel<'幅值'>;filename='hecheng.wav'audiowrite<filename,new3,F>;结果如下:图2-5合成信号波形与频谱图对比图2-3,可看出波形大致为两个阶段信号的拼接合成。图2-6生成合成信号文件4.合成语音的验证通过sound函数实现在matlab在直接听取截取段的语音和合成之后的录音。程序如下:filename='yuan1new.wav'[yan1,F]=audioread<filename>;sound<yan1,F>filename='yuan2new.wav'[yan2,F]=audioread<filename>;sound<yan2,F>filename='hecheng.wav'[yan3,F]=audioread<filename>;sound<yan3,F>;5.GUI界面设计及实现考虑到系统的实现目的是为了让用户有更好的体验,借助于matlab的图形用户界面〔以下成为GUI,做出完整的用户界面来完成本次课程设计。由于程序部分较长,详细程序见附录,此处只展示结果。结果如下:图2-7GUI设计界面图2-8最终结果实现界面三.设计评述通过本次课程设计,我学会了使用MATLAB分析连续时间信号的频谱,能够基本运用了MATLAB的图形用户界面〔GUI编程。实验之初由于对课题和相关知识理解不深,因而设计起来很困难。通过查阅相关书籍,同学之间相互讨论以及询问老师,我理解并掌握了课题的实质。由于之前很少接触MATLAB软件,MATLAB中的许多函数,如fft,plot,subplot,abs等用起来比较吃力。通过老师的讲解以及下课后自己对MATLAB的学习,我基本可运用MATLAB软件做一些简单的程序来看信号的频谱或各种信号的波形。通过分析连续时间信号的频谱,使我更加深入的理解了书本上的知识。要真正熟练运用MATLAB还要靠自己多学习和使用。而且在写MATLAB程序时不能马虎,否则程序很容易出错,这培养了自己的细心和耐心。通过不断使用MATLAB,我发现并解决了很多问题,使我更加了解MATLAB。课程设计虽然是一门专业课,但是通过课设使我专业知识得到了丰富,专业技能上的提升。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在谢老师和林老师的辛勤指导下,终于迎刃而解。同时,在老师的身上我学得到很多实用的知识,在此我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示衷心的感谢!参考文献[1]程佩青.数字信号处理教程.北京:清华大学出版社,2002[2]刘敏,魏玲.Matlab通信仿真与应用.北京:国防工业出版社,2001[3]高政.信号处理与系统分析.北京:中国水利水电出版社,2001[4]俞一彪,孙兵.数字信号处理——理论与应用.XX:东南大学出版社,2000[5]数字信号处理孙洪等译电子工业出版社[6]精通MATLAB6.5版张志涌等编著北京航空航天大学出版社[7]MATLAB扩展编程何强何英编著清华大学出版社[8]数字信号处理教程程佩青编著清华大学出版社附录GUI设计界面程序如下:functionvarargout=shiyan1<varargin>%SHIYAN1MATLABcodeforshiyan1.fig%SHIYAN1,byitself,createsanewSHIYAN1orraisestheexisting%singleton*.%%H=SHIYAN1returnsthehandletoanewSHIYAN1orthehandleto%theexistingsingleton*.%%SHIYAN1<'CALLBACK',hObject,eventData,handles,...>callsthelocal%functionnamedCALLBACKinSHIYAN1.Mwiththegiveninputarguments.%%SHIYAN1<'Property','Value',...>createsanewSHIYAN1orraisesthe%existingsingleton*.Startingfromtheleft,propertyvaluepairsare%appliedtotheGUIbeforeshiyan1_OpeningFcngetscalled.An%unrecognizedpropertynameorinvalidvaluemakespropertyapplication%stop.Allinputsarepassedtoshiyan1_OpeningFcnviavarargin.%%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone%instancetorun<singleton>".%%Seealso:GUIDE,GUIDATA,GUIHANDLES%Edittheabovetexttomodifytheresponsetohelpshiyan1%LastModifiedbyGUIDEv2.514-Jan-201609:18:41%Begininitializationcode-DONOTEDITgui_Singleton=1;gui_State=struct<'gui_Name',mfilename,...'gui_Singleton',gui_Singleton,...'gui_OpeningFcn',shiyan1_OpeningFcn,...'gui_OutputFcn',shiyan1_OutputFcn,...'gui_LayoutFcn',[],...'gui_Callback',[]>;ifnargin&&ischar<varargin{1}>gui_State.gui_Callback=str2func<varargin{1}>;endifnargout[varargout{1:nargout}]=gui_mainfcn<gui_State,varargin{:}>;elsegui_mainfcn<gui_State,varargin{:}>;end%Endinitializationcode-DONOTEDIT%---Executesjustbeforeshiyan1ismadevisible.functionshiyan1_OpeningFcn<hObject,eventdata,handles,varargin>%Thisfunctionhasnooutputargs,seeOutputFcn.%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata<seeGUIDATA>%varargincommandlineargumentstoshiyan1<seeVARARGIN>%Choosedefaultcommandlineoutputforshiyan1handles.output=hObject;%Updatehandlesstructureguidata<hObject,handles>;%UIWAITmakesshiyan1waitforuserresponse<seeUIRESUME>%uiwait<handles.figure1>;%---Outputsfromthisfunctionarereturnedtothecommandline.functionvarargout=shiyan1_OutputFcn<hObject,eventdata,handles>%varargoutcellarrayforreturningoutputargs<seeVARARGOUT>;%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata<seeGUIDATA>%Getdefaultcommandlineoutputfromhandlesstructurevarargout{1}=handles.output;%---Executesonbuttonpressinpushbutton1.functionpushbutton1_Callback<hObject,eventdata,handles>%hObjecthandletopushbutton1<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata<seeGUIDATA>fs=88060;%采样频率sd=get<handles.edit1,'string'>;sheding=str2double<sd>x1=audiorecorder<fs,16,1>;recordblocking<x1,sheding>;%8秒y1=getaudiodata<x1>;axes<handles.axes1>;plot<y1>;title<'男声录入波形图'>;xlabel<'样本数'>;ylabel<'幅值'>;Y1=fft<y1>;axes<handles.axes4>;plot<abs<Y1>>;title<'男声录入频谱图'>;xlabel<'Freq/HZ'>;ylabel<'幅值'>;filename='yuan1.wav'audiowrite<filename,y1,fs>;guidata<hObject,handles>;%---Executesonbuttonpressinpushbutton2.functionpushbutton2_Callback<hObject,eventdata,handles>%hObjecthandletopushbutton2<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata<seeGUIDATA>fs=88060;%采样频率sd=get<handles.edit1,'string'>;sheding=str2double<sd>x2=audiorecorder<fs,16,1>;recordblocking<x2,sheding>;y2=getaudiodata<x2>;axes<handles.axes5>;plot<y2>;title<'女声录入波形图'>;xlabel<'样本数'>;ylabel<'幅值'>;Y2=fft<y2>;axes<handles.axes6>;plot<abs<Y2>>;title<'女声录入频谱图'>;xlabel<'Freq/HZ'>;ylabel<'幅值'>;filename='yuan2.wav'audiowrite<filename,y2,fs>;guidata<hObject,handles>;%---Executesduringobjectcreation,aftersettingallproperties.functionpushbutton2_CreateFcn<hObject,eventdata,handles>%hObjecthandletopushbutton2<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesempty-handlesnotcreateduntilafterallCreateFcnscalledfunctionedit1_Callback<hObject,eventdata,handles>%hObjecthandletoedit1<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata<seeGUIDATA>%Hints:get<hObject,'String'>returnscontentsofedit1astext%str2double<get<hObject,'String'>>returnscontentsofedit1asadouble%---Executesduringobjectcreation,aftersettingallproperties.functionedit1_CreateFcn<hObject,eventdata,handles>%hObjecthandletoedit1<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled%Hint:editcontrolsusuallyhaveawhitebackgroundonWindows.%SeeISPCandCOMPUTER.ifispc&&isequal<get<hObject,'BackgroundColor'>,get<0,'defaultUicontrolBackgroundColor'>>set<hObject,'BackgroundColor','white'>;endfunctionedit2_CreateFcn<hObject,eventdata,handles>%hObjecthandletoedit2<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled%Hint:editcontrolsusuallyhaveawhitebackgroundonWindows.%SeeISPCandCOMPUTER.ifispc&&isequal<get<hObject,'BackgroundColor'>,get<0,'defaultUicontrolBackgroundColor'>>set<hObject,'BackgroundColor','white'>;endfunctionedit3_Callback<hObject,eventdata,handles>%hObjecthandletoedit3<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata<seeGUIDATA>%Hints:get<hObject,'String'>returnscontentsofedit3astext%str2double<get<hObject,'String'>>returnscontentsofedit3asadouble%---Executesduringobjectcreation,aftersettingallproperties.functionedit3_CreateFcn<hObject,eventdata,handles>%hObjecthandletoedit3<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled%Hint:editcontrolsusuallyhaveawhitebackgroundonWindows.%SeeISPCandCOMPUTER.ifispc&&isequal<get<hObject,'BackgroundColor'>,get<0,'defaultUicontrolBackgroundColor'>>set<hObject,'BackgroundColor','white'>;end%---Executesonbuttonpressinpushbutton3.functionpushbutton3_Callback<hObject,eventdata,handles>%hObjecthandletopushbutton3<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata<seeGUIDATA>s1=get<handles.edit3,'string'>;sec1=str2double<s1>s2=get<handles.edit2,'string'>;sec2=str2double<s2>filename='yuan1.wav'[n1,F]=audioread<filename>;n1_new=n1<<<F*sec1+1>:F*sec2>,:>;axes<handles.axes7>;plot<n1_new>;title<'截取男声波形图'>;xlabel<'样本数'>;ylabel<'幅值'>;filename='yuan1new.wav'audiowrite<filename,n1_new,F>;filename='yuan2.wav'[n2,F]=audioread<filename>;n2_new=n2<<<F*sec1+1>:F*sec2>,:>;axes<handles.axes8>;plot<n2_new>;title<'截取女声波形图'>;xlabel<'样本数'>;ylabel<'幅值'>;filename='yuan2new.wav'audiowrite<filename,n2_new,F>;guidata<hObject,handles>;%---Executesonbuttonpressinpushbutton4.functionpushbutton4_Callback<hObject,eventdata,handles>%hObjecthandletopushbutton4<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata<seeGUIDATA>s1=get<handles.edit3,'string'>;sec1=str2double<s1>s2=get<handles.edit2,'string'>;sec2=str2double<s2>filename='yuan1new.wav'[new1,F]=audioread<filename>;filename='yuan2new.wav'[new2,F]=audioread<filename>;n_1=new1<<sec2-sec1-1>*F:<sec2-sec1>*F>;n_2=new2<1:F>;j=10;z1=[n_1;zeros<F/j,1>];z2=[zeros<F/j+1,1>;n_2];z=z1+z2;new3<1:<sec2-sec1-1>*F>=new1<1:<sec2-sec1-1>*F>;new3<<sec2-sec1-1>*F:<sec2-sec1+1/j>*F>=z;new3<<sec2-sec1+1/j>*F-1:<2*<sec2-sec1>-1+1/j>*F>

温馨提示

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

评论

0/150

提交评论