基于matlab的语音信号的合成加入延迟混响.docx

上传人:b****2 文档编号:2445794 上传时间:2023-05-03 格式:DOCX 页数:28 大小:253.46KB
下载 相关 举报
基于matlab的语音信号的合成加入延迟混响.docx_第1页
第1页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第2页
第2页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第3页
第3页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第4页
第4页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第5页
第5页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第6页
第6页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第7页
第7页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第8页
第8页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第9页
第9页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第10页
第10页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第11页
第11页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第12页
第12页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第13页
第13页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第14页
第14页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第15页
第15页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第16页
第16页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第17页
第17页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第18页
第18页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第19页
第19页 / 共28页
基于matlab的语音信号的合成加入延迟混响.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于matlab的语音信号的合成加入延迟混响.docx

《基于matlab的语音信号的合成加入延迟混响.docx》由会员分享,可在线阅读,更多相关《基于matlab的语音信号的合成加入延迟混响.docx(28页珍藏版)》请在冰点文库上搜索。

基于matlab的语音信号的合成加入延迟混响.docx

基于matlab的语音信号的合成加入延迟混响

基于matlab的语音信号的合成(加入延迟混响)

中北大学

课程设计说明书

 

学生姓名:

学号:

学生姓名:

学号:

学生姓名:

学号:

学院:

信息与通信工程学院

专业:

电子信息工程

题目:

信息处理实践:

语言信号的合成

 

指导教师:

杨娜职称:

副教授

 

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]俞一彪,孙兵.数字信号处理——理论与应用.南京:

东南大学出版社,2000

[5]数字信号处理孙洪等译电子工业出版社

[6]精通MATLAB6.5版张志涌等编著北京航空航天大学出版社

[7]MATLAB扩展编程何强何英编著清华大学出版社

[8]数字信号处理教程程佩青编著清华大学出版社

5.设计成果形式及要求:

(1)提供详细的设计说明书三份;

(2)提供详细数据及分析结果。

6.工作计划及进度:

2007年6月25日~2007年7月1日:

查资料

2007年7月2日~7月5日:

在指导教师指导下设计方案及程序

7月6日~7月10日:

学生上机调试程序,指导教师辅导

7月11日~7月12日:

完成课程设计说明书

7月13日:

答辩

系主任审查意见:

签字:

年月日

 

摘要.........................................................................................................................

(1)

1.MATLAB简介...................................................................................................

(1)

2.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]俞一彪,孙兵.数字信号处理——理论与应用.南京:

东南大学出版社,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-DONOTEDIT

gui_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});

end

ifnargout

[varargout{1:

nargout}]=gui_mainfcn(gui_State,varargin{:

});

else

gui_mainfcn(gui_State,varargin{:

});

end

%Endinitializationcode-DONOTEDIT

%---Executesjustbeforeshiyan1ismadevisible.

functionshiyan1_OpeningFcn(hObject,eventdata,handles,varargin)

%Thisfunctionhasnooutputargs,seeOutputFcn.

%hObjecthandletofigure

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

%varargincommandlineargumentstoshiyan1(seeVARARGIN)

%Choosedefaultcommandlineoutputforshiyan1

handles.output=hObject;

%Updatehandlesstructure

guidata(hObject,handles);

%UIWAITmakesshiyan1waitforuserresponse(seeUIRESUME)

%uiwait(handles.figure1);

%---Outputsfromthisfunctionarereturnedtothecommandline.

functionvarargout=shiyan1_OutputFcn(hObject,eventdata,handles)

%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);

%hObjecthandletofigure

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

%Getdefaultcommandlineoutputfromhandlesstructure

varargout{1}=handles.output;

%---Executesonbuttonpressinpushbutton1.

functionpushbutton1_Callback(hObject,eventdata,handles)

%hObjecthandletopushbutton1(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewit

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2