课程设计实验报告new.docx

上传人:b****7 文档编号:15946790 上传时间:2023-07-09 格式:DOCX 页数:18 大小:121.60KB
下载 相关 举报
课程设计实验报告new.docx_第1页
第1页 / 共18页
课程设计实验报告new.docx_第2页
第2页 / 共18页
课程设计实验报告new.docx_第3页
第3页 / 共18页
课程设计实验报告new.docx_第4页
第4页 / 共18页
课程设计实验报告new.docx_第5页
第5页 / 共18页
课程设计实验报告new.docx_第6页
第6页 / 共18页
课程设计实验报告new.docx_第7页
第7页 / 共18页
课程设计实验报告new.docx_第8页
第8页 / 共18页
课程设计实验报告new.docx_第9页
第9页 / 共18页
课程设计实验报告new.docx_第10页
第10页 / 共18页
课程设计实验报告new.docx_第11页
第11页 / 共18页
课程设计实验报告new.docx_第12页
第12页 / 共18页
课程设计实验报告new.docx_第13页
第13页 / 共18页
课程设计实验报告new.docx_第14页
第14页 / 共18页
课程设计实验报告new.docx_第15页
第15页 / 共18页
课程设计实验报告new.docx_第16页
第16页 / 共18页
课程设计实验报告new.docx_第17页
第17页 / 共18页
课程设计实验报告new.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

课程设计实验报告new.docx

《课程设计实验报告new.docx》由会员分享,可在线阅读,更多相关《课程设计实验报告new.docx(18页珍藏版)》请在冰点文库上搜索。

课程设计实验报告new.docx

课程设计实验报告new

课程设计实验报告new

数字信号处理

课程设计报告

 

课设题目:

语音信号变声处理系统

院系:

计算机科学系

专业:

通信工程

小组成员:

郑昌栋杭嘉琪杜天送

刘洋周俊颜全稳

指导教师:

方荟

闽江学院

2013年

12月

26日

摘要

我们每个人的声音不同,源于我们的每个人的音色和音调不同,我们所说的男中音、男高音,就是音调的不同,而即便音调一致,我们依然能区分出两个不同人的声音,或不同乐器的声音,这就是音色的不同。

变声器,正是借助对声音音色和音调的双重复合改变,实现输出声音的改变。

在进行性别变声时,主要考虑基频和共振峰频率的变化。

当基频伸展,共振峰频率也同时伸展时,可由男声变成女声,女声变成童声;反之,基频收缩,共振峰频率也同时收缩时,则由童声变女声,女声变男声。

为了获得自然度、真实感较好的变声效果,基频和共振峰频率通常必须各自独立地伸缩变化。

 

本次课程设计就是运用我们所学到的理论知识,用MATLAB软件来实现对语音信号的变声处理,理论联系实际,从而更好地掌握以及运用所学习的知识。

 

 

第一章课程设计任务

电视台经常针对某些事件的知情者进行采访,为了保护知情者,经常改变说话人的声音,利用所学的知识,将其实现。

1)自己录制一段正常的声音文件,或者通过菜单选择的方式选择一段正常声音文件;

2)能够播放该文件;

3)对语音信号进行处理,要求处理后的语音信号基本不影响正常收听与理解;

5)对处理参数能够通过matlab界面进行调节,以对比不同处理效果;

6)能够对处理后的声音文件与原始声音文件的频谱进行观察、分析。

7)编制GUI用户界面。

 

任务分配:

代码编写及运行调试:

郑昌栋,杭嘉琪

实验报告整理与编写:

杜天送

相关资料查询及整理:

刘洋

实验方案设计与编写:

周俊

Gui界面设计及制作:

颜全稳

 

第二章变声器原理及设计方案

2.1基本原理

语音科学家将人类发声过程视作一个由声门源输送的气流经以声道、口、鼻腔组成的滤波器调制而成的。

人类语音可分为有声语音和无声语音,前者是由声带振动激励的脉冲信号经声腔调制变成不同的音,它是人类语言中元音的基础,声带振动的频率称为基频。

无声语音则是声带保持开启状态,禁止振动引发的。

一般来说,由声门振动决定的基频跟说话人的性别特征有关,如下表,而无声语音则没有体现这个特征。

说话人的个性化音色和语音的另外一个声学参数——共振峰频率的分布有关。

儿童由于声道短,其共振峰频率高于成年人,成年女性的声道一般短于成年男性,所以女性的共振峰频率一般高于男性。

表2.1男声、女声和童声基频、共振峰频率关系表

人群

基频分布Hz

共振峰频率分布

男声

[50,180]

偏低

女声

[160,380]

童声

[400,1000]

偏高

由上可知,在进行性别变声时,主要考虑基频和共振峰频率的变化。

当基频伸展,共振峰频率也同时伸展时,可由男声变成女声,女声变成童声;反之,基频收缩,共振峰频率也同时收缩时,则由童声变女声,女声变男声。

为了获得自然度、真实感较好的变声效果,基频和共振峰频率通常必须各自独立地伸缩变化。

 

 

共振峰频率的改变是基于重采样实现的,从重采样原理知道,这也同时引发了基频的变化,为保证基频变化和共振峰频率变化的独立、互不相关,在基频移动时必须考虑抵消重采样带来的偏移,理论上只要基频检测足够精确,确实可以保证基频改变和共振峰频率改变间的互不相关。

·2.2设计方案

1:

选取需要变声的原始语音信号;

2:

得到原始语音信号的基音周期长度;

3:

根据基音周期长度定位整个原始语音信号的每一个基音周期的位置;

4:

在原始语音信号中的基音周期之间删除/插入基音周期,得到缩短/伸长的语音信号;

5:

将缩短/伸长的语音信号线性伸长/压缩至与原始语音信号一致的长度,得到变声后的语音信号。

 

第三章变声器的实现及分析

3.1信号变声器的实现

 

图2.2语音处理实现框图

实现步骤:

1)语音信号的录制与读入。

2)语音信号的频谱分析。

3)实现慢录快放和快录慢放功能

4)设计数字滤波器和画出其频率响应。

5)用滤波器对信号进行滤波。

6)比较滤波前后语音信号的波形及频谱。

7)通过搬移、改变基波频率实现变声。

8)语音信号恢复。

9)在MATLAB下绘制出各个部分的输出波形,前后对比。

3.2设计过程

3.2.1分帧处理

对语音信号加Hamming窗处理,方法是用窗序列沿着语音样点值序列逐帧从左向右移动。

Hamming窗的窗函数如下:

=(4.1)

确定了窗函数以后,对语音信号的分帧处理,实际上就是对各帧进行某帧进行某种变换或运算。

3.2.2计算预测系数

3.2.3计算激励信号

对每帧语音信号s(n),和预测模型系数{

},用filter函数计算激励信号e(n)。

此时应该注意在系数变化的情况下连续滤波,需要维持滤波器的状态不变,要利用filter函数的

参数。

这里要利用

_pre,利用

_pre作为初始状态得到最终状态,本次循环得到的最终状态作为下次循环的初始状态,并把每次循环得到的激励保存下来。

3.2.4重建语音

用计算得到的激励信号e(n)和预测模型系数{

},用fliter函数计算重建语音

同样要注意维持滤波器的状态不变。

这里我们由激励得到语音,并且要利用

_rec,利用

_rec作为初始状态的到最终状态,本次循环得到的最终状态作为下次循环的初始状态,并且把每次循环得到的重建语音保存下来。

3.2.5基音周期

基音周期是表征语音信号本质特征的参数,属于语音分析的范畴,只有准确分析并且提取出语音信号的特征参数,才能够利用这些参数进行语音合成处理。

如果x(n)是一个周期为P的信号,则其自相关函数也是周期为P的信号,且在信号周期的整数倍处,自相关函数取最大值。

语音的浊音信号具有准周期性,其自相关函数在基音周期的整数倍处取最大值。

计算两相邻最大峰值间的距离,就可以估计出基因周期。

MTWE601-003006-FLSC0

3.2.6合成激励的能量

根据线性预测分析的原理可知,求解p个线性预测系数的依据,是预测误差滤波器的输出方均值或输出功率最小。

可称这一最小方均误差为正向预测误差功率

,即

=E{e(n)[s(n)-

s(n-1)]}

=E[e(n)s(n)]-E[e(n)s(n-i)](4.2)

由于上式第二项为0,又:

e(n)=s(n)-=s(n)-

s(n-i)(4.3)

将(4.3)代入(4.2)得:

=E[e(n)s(n)]=E[s(n)s(n)]-

E[s(n)s(n-i)]=R(0)-

R(i)(4.4)

根据式(4.4)可以求得增益常数G。

=R(0)-

R(i)(4.5)

从而可以得到:

=

(4.6)

由前面计算预测系数的代码

可以得到

(代码里用E表示),和计算得到的基音周期联立可以得到增益G。

程序代码如下:

3.2.7变声处理

变声的过程的实现思路与前面合成语音的思路基本相同,只是在两个地方有所不同:

系统参数b,a不同,这里的b和a是要用经改变后的极点算出来的;生成激励信号时,用floor(PT/2)作为这里的PT。

在变声的时候我们采用女生,小孩时变调不变速的滤波器:

老人采用变速不变调滤波器:

3.3仿真结果及分析

3.3.1波形及频谱

(1)原始信号波形及频谱:

采集到的男子声音信号大都分布在较低的频段上,即男子话音的基频较低

 

(2)男生信号合成女生信号后波形及频谱:

变声前后,音频信号的时域波形被压缩,总体形状无太大变化。

改变信号的基频可以实现语音的变调。

零频和35000附近的信号被削弱,而对应于【10000,25000】频点部分的信号得到加强

 

(3)男生信号合成小孩信号后波形及频谱:

变声前后,音频信号的时域波形被压缩,总体形状无太大变化。

改变信号的基频可以实现语音的变调。

零频附近的信号被削弱,而对应于【10000,24000】频点部分的信号得到加强

 

 

(4)男生信号合成老人信号后的波形及频谱:

男声变老人声前后,音频的时域波形被展宽,总体形状变化不大。

男声变老人声前后【0,15000】频点对应的信号和【25000,30000】频点对应的信号则被削弱

3.3.2调试分析

1、在对处理后的语音文件获取预测系数的时候一直为NaN

将对语音文件的采样率改为22KHz后,能正常获取数据。

2、用wavread读取48M的wav音频文件时一直读取不到。

改为读取只有几十K的文件后就能正常运行,猜测可能是文件太大。

第四章课设总结

4.1小组总结

此次课设题目为数字变声器设计,要求我们利用所学的信号处理、MATLAB知识完成任务。

综合了过去三年所学的重要专业知识,可谓是对过去所学知识的一次全面考察。

变声器的原理是通过改变输入声音频率,进而改变声音的音色、音调,使输出声音在感官上与原声音不同。

变声器是借助对声音音色和音调的双重复合改变,实现输出声音的改变。

通过自己发声,共振峰频率的改变是基于重采样实现的。

接到课题后,我便积极准备,到图书馆查阅相关书籍,上网搜索有关内容,利用MATLAB实现仿真,并及时向指导老师回报进度,听取老师的意见和建议。

最终,顺利完成了此次课设任务。

采集到的男子声音信号大都分布在较低的频段上,而女子的声音信号大都分布在较高的频段上。

即男子话音的基频较低,女子的话音基频较高。

信号经过滤波器处理后,保留了有效的频率成分,一定程度上去除了干扰信号。

对于男子的声音影响较小,原因为男子的话音有用信号大都分布在较低的频段上,通过低通滤波器后,噪声等无用信号被滤除。

改变信号的基频可以实现语音的变调。

变声前后,音频的时域波形基本变化不大,而信号的频域波形发生较大变动。

男声变女声后信号的频谱被搬到较高的频带上,男声变童音后,信号的频谱被搬移到更高的地方。

女声变男声则反过来。

通过改变输出频率,可以实现声音的提速或减速播放。

将频率乘以大于一的数后,可以实现减速播放效果。

将频率乘以(0,1)内的数后,可以实现减速播放效果。

男声变老人的声音可以通过变速实现,变速不变调。

改变输出速度而不用改变声音频率。

通过这次课设,我对理论知识的掌握更加牢固,而且把理论与实践联系在一起,提高了自己的实践能力。

而且我认识到了同学之间的相互合作的重要性,还提高了自己如何在众多的资料中找到对自己有用的信息。

要想把所学的内容融会贯通,只学好课本知识是不够的,要把所学习的知识加以利用,这次课设就给了我们很好的机会,让我们不仅巩固了课本知识,还从理论上升到了实际。

从课题的中心来看,课题是希望将数字信号处理技术应用于某一实际领域,这里就是指对语音的处理。

作为存储于计算机中的语音信号,其本身就是离散化了的向量,我们只需将这些离散的量提取出来,就可以对其进行处理了。

在这里,用到了处理数字信号的强有力工具MATLAB,通过MATLAB里几个命令函数的调用,很轻易的在实际化语音与数字信号的理论之间搭了一座桥。

通过这次的课程设计,熟悉并掌握了MATLAB中有关语音信号的读取,频谱分析,频谱的搬移和基频、语速的改变来实现变声,分析其频谱,并与原始信号频谱进行比较。

4.2个人总结

郑昌栋:

通过本次课程设计,我在代码编写过程中认识到认真,严谨的重要性;以及调试过程中需要极大的耐心,最重要的是团队协作,也学习到了matlab的基本使用和编程的一些技巧。

颜全稳:

通过对于gui界面的设计制作,更加熟悉掌握matlab软件,同时温习数字信号处理这么课程。

杜天送:

在本次课程设计中,我负责课程设计报告的整理与编写。

通过整理报告,我对于matlab的基本编程方式以及基本运用有了新的认识,我的分析能力、独立思考能力都得到了一定程度的提高。

杭嘉琪:

通过这次课程设计,我知道到了matlab的基本编程方式以及方法的基本运用,因为我是负责代码一块的,所以深刻体会到了一个好的方案是编好程序的前提。

在编写的过程中认识到了很多以前都不知道的方法,同时对matlab有了深刻的了解。

刘洋:

在本次课程设计当中,主要负责找资料。

遇到问题在网上或者相关书籍寻找解决方法。

通过这次课程设计。

提高了自己的耐心以及细心。

周俊:

通过这次课程设计,我明白了良好的设计方案更能有助于课程设计的进展,而且方案并不是一成不变的,从问题中不断改进更加有利于我们理解问题;同时在本次中我也更近一步理解了matlab的运用。

 

参考文献

[1]高西全、丁玉美编著.数字信号处理.西安:

西安电子科技大学出版社,2008.

[2]刘树棠译.数字信号处理——使用MATLAB.西安:

西安交通大学出版社,2002.

[3]孙卓、岳振军,一种汉语语音变换技术,电声技术,2007.

[4]罗军辉等编著.MATLAB7.0在数字信号处理中的应用.北京:

机械工业出版社,2005.

[5]陈怀琛等编著.MATLAB及在电子信息课中的应用.北京:

电子工业出版社,2002.

[6]胡广书编著.数字信号处理――理论、算法与实现.北京:

清华大学出版社,2002.

[7]梁虹等编.信号与线性系统分析――基于MATLAB的方法与实现.北京:

高等教育出版社,2006.

[8]刘卫国主编.MATLAB程序设计与应用(第二版).北京:

高等教育出版社,2006.

 

附录:

globalmusic;

music=0;

[s,fs,nbits]=wavread('录音.wav');

s=s/max(s);

L=length(s);

S=fft(s,L);

axes(handles.axes1);

plot(s);title('原语音信号波形');

axes(handles.axes2);

plot(abs(S));title('原语音信号频谱');

music=audioplayer(s,fs);

play(music);

 

%---Executesonbuttonpressinpushbutton2.

functionpushbutton2_Callback(hObject,eventdata,handles)

%hObjecthandletopushbutton2(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

globalmusic;

music=0;

[s,fs,nbits]=wavread('录音.wav');

FL=80;

WL=240;

P=10;

s=s/max(s);

L=length(s);

FN=floor(L/FL)-2;

Ec=zeros(L,1);

ZiPre=zeros(P,1);

Sre=zeros(L,1);

ZiPre=zeros(P,1);

EcS=zeros(L,1);

Ssn=zeros(L,1);

LastSn=0;

ZiSn=zeros(P,1);

EcSnT=zeros(L,1);

SsnT=zeros(L,1);

LastSnT=0;

ZiSn_t=zeros(P,1);

v=.5;

EcSnV=zeros(v\L,1);

SsnV=zeros(v\L,1);

LastSnV=0;

ZiSnV=zeros(P,1);

hw=hamming(WL);

forn=3:

FN

SW=s(n*FL-WL+1:

n*FL).*hw;

[AE]=lpc(SW,P);

SF=s((n-1)*FL+1:

n*FL);

[Ec1,ZiPre]=filter(A,1,SF,ZiPre);

Ec((n-1)*FL+1:

n*FL)=Ec1;

[Sre1,ZiPre]=filter(1,A,Ec1,ZiPre);

Sre((n-1)*FL+1:

n*FL)=Sre1;

s_Pitch=Ec(n*FL-222:

n*FL);

PT=findpitch(s_Pitch);

G=sqrt(E*PT);

TempSn=[1:

n*FL-LastSn]';

EcSn1=zeros(length(TempSn),1);

EcSn1(mod(TempSn,PT)==0)=G;

EcSn1=EcSn1((n-1)*FL-LastSn+1:

n*FL-LastSn);

[Ssn1,ZiSn]=filter(1,A,EcSn1,ZiSn);

EcSn((n-1)*FL+1:

n*FL)=EcSn1;

Ssn((n-1)*FL+1:

n*FL)=Ssn1;

LastSn=LastSn+PT*floor((n*FL-LastSn)/PT);

PT1=floor(PT/2);

poles=roots(A);

deltaOMG=150*2*pi/fs;

forp=1:

10

ifimag(poles(p))>0poles(p)=poles(p)*exp(j*deltaOMG);

elseifimag(poles(p))<0poles(p)=poles(p)*exp(-j*deltaOMG);

end

end

A1=poly(poles);

TempSnT=[1:

n*FL-LastSnT]';

EcSn1T=zeros(length(TempSnT),1);

EcSn1T(mod(TempSnT,PT1)==0)=G;

EcSn1T=EcSn1T((n-1)*FL-LastSnT+1:

n*FL-LastSnT);

[Ssn1T,ZiSn_t]=filter(1,A1,EcSn1T,ZiSn_t);

EcSnT((n-1)*FL+1:

n*FL)=EcSn1T;

SsnT((n-1)*FL+1:

n*FL)=Ssn1T;

LastSnT=LastSnT+PT1*floor((n*FL-LastSnT)/PT1);

end

S=fft(SsnT,L);

axes(handles.axes3);

plot(SsnT),title('合成女生信号波形'),XLim([0,length(EcSnT)]);

axes(handles.axes4);

plot(abs(S)),title('合成女生信号频谱'),XLim([0,length(SsnT)]);

music=audioplayer(SsnT,fs);

play(music);

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

当前位置:首页 > 解决方案 > 营销活动策划

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

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