下载此文档

matlab变声器.doc


文档分类:IT计算机 | 页数:约12页 举报非法文档有奖
1/12
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/12 下载此文档
文档列表 文档介绍
该【matlab变声器 】是由【小吴】上传分享,文档一共【12】页,该文档可以免费在线阅读,需要了解更多关于【matlab变声器 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。12
MATLAB变声器
电子工程学院
摘要
语音信号处理中的变声处理已经有了比拟成熟的算法,本文阐述了变声算法的根底原理,利用数字滤波器,自相关法,LPC,LPC系数求根法等方法在MATLAB上改变语音信号的基频和共振峰以实现变声,并总结了现有变声算法的缺陷,对用不同的变换域能否改良变声算法做了粗略分析。
关键词:变声算法,LPC,变换域
目录
研究背景 3
变声原理 3
语音根本概念 3
变声原理 4
变声过程 5
分帧处理 5
计算LPC系数 5
计算原始鼓励 6
计算基音周期 6
计算鼓励能量 7
合成脉冲序列 7
更改声道参数 7
合成变声语音 8
程序设计 8
传统变声算法缺陷 9
合成鼓励与原始鼓励差异较大 9
不能实现定向变声 10
实现定向变声的猜测 11
小波域是否存在恒定音色参数粗略分析 11
统计上的变换是否利于寻找恒定音色参数猜测 11
下一步研究方案 12
2
研究背景
语音信号是人们日常生活中十分常见的信号,语音也是人与人之间传递信息的一种十分重要的方式。随着智能终端以及互联网的普及,语音信号大量地以数字形式出现,语音信号处理变得越来越重要,变声处理是语音信号处理的根底之一,所以在这样的大背景下,研究变声算法并改良变声算法是很有意义而且有必要的。
另一方面,传统的变声算法是对发声过程的简单模拟进行语音合成,在模拟过程中改变参数以实现变声,而传统的变声算法存在一些缺陷,假设要改良变声算法使其更灵巧有效,那么细致的研究传统的变声算法是很有必要的。
变声原理
语音根本概念
:声道是很多动物及人类都有的一个腔室,从声源产生的声音经由此处滤出。人的声道包括声道那么包括喉腔、咽头、口腔和鼻腔。
:一般的声音都是由发音体发出的一系列频率、振幅各不相同的振动复合而成的。这些振动中有一个频率最低的振动,由它发出的音就是基音,其余为泛音。发音体整体振动产生的音,叫做基音,决定音高;发音体局部振动产生的音,叫做泛音,决定音色;基音和泛音结合一起而形成的音,叫做复合音,日常我们所听到的声音多为复合音。
:共振峰是指在声音的频谱中能量相对集中的一些区域,共振峰是语音音质的决定因素,反映了声道〔共振腔〕的物理特征。声音在经过共振腔时,受到腔体的滤波作用,使得频域中不同频率的能量重新分配,一局部因为共振腔的共振作用得到强化,另一局部那么受到衰减,得到强化的那些频率在时频分析的语图上表现为浓重的黑色条纹。由于能量分布不均匀,强的局部犹如山峰一般,故而称之为共振峰。在语音声学中,共振峰决定着元音的音质,在计算机音乐中,共振峰是决定音色和音质的重要参数。
4,短时平稳特性:语音信号是一种随时间而变化的信号,主要分为浊音和清音两大类。浊音的基音周期、清浊音信号幅度和声道参数等都随时间而缓缓变化。由于发生器官的惯性运动,可以认为在一小段时间里〔一般为10~30ms〕语音信号的频域特性近似不变,即语音信号具有短时平稳性。因而处理语音信号之前要把语音信号分为一些短段〔称为分析帧〕,然后再来进行处理。
4
人声和乐器声的产生需要两个阶段,一个是发声系统,如人的声带或乐器的振动簧片,另一个是共鸣系统。乐器不同的共鸣系统使其在一定频域中的语音信号的振幅得以突出,这样,这些区域就产生了这个乐器所特有的共振峰值,这些共振峰值同共鸣体的大小、形状的材料密切相关。由于乐器的结构是稳定的,因此在乐器发出的所有音调中,不管基频如何,都会表现出相同的共振峰值,只不过其显著性有强有弱罢了。这就可以解释为什么同一乐器所发出的不同音调具有相同的音质。
在语音声学中,人声也同样受自身生理如鼻孔、咽腔、口腔大小的影响有自身的共振峰区。人在说话的过程中,正是通过利用这些共鸣空间的形状和大小不同的变化〔例如改变嘴形〕,以能改变声音的共振峰说出不同的元音。我们之所以能够区分不同的人声、元音,主要也是依靠它们的共振峰分布的位置。简单来讲不同的人说同一句话的共振峰不同,同一个人说不通的话共振峰也不同。
变声原理
变声是通过改变人声的基音频率和共振分分布以到达变声的目的,其具体过程是是模拟人声的发声过程,以脉冲信号代替声带振动,以FIR滤波器代替声道,用脉冲信号通过FIR滤波器进行语音合成。首先对原始语音信号进行分解,然后得出原始鼓励参数〔基音周期和鼓励能量〕和声道参数〔共振峰分布〕,用得出的参数构建鼓励和滤波器,再根据变声需要更改参数,就可以到达变声的目的。过程如下
脉冲序列
FIR滤波器
原始鼓励参数
声道参数
原始语音
合成变声语音
4
变声过程
分帧处理
语音信号具有短时平稳特性,所以在处理之前要进行分帧处理,将一段长的语音信号分解为10~30ms的语音信号逐段进行处理。语音信号的分帧是采用可移动的有限长度窗口进行加权的方法来实现的。一般每秒帧数约为33~100帧,视实际情况而定。分帧一般要采用交叠分段的方法。如下图,这是为了使帧与帧之间平滑过渡,保持其连续性。前一帧和后一帧的交叠局部称为帧移,帧移与帧长的比值一般取为0~。
帧长
帧长
帧移
第k帧
第k+1帧
在程序中对语音信号加Hamming窗处理,方法是用窗序列沿着语音样点值序列逐帧从左向右移动。
计算LPC系数
线性预测编码〔LPC〕是主要用于音频信号处理与语音处理中根据线性预测模型的信息用压缩形式表示数字语音信号谱包络〔en:spectralenvelope〕的工具。它是最有效的语音分析技术之一,也是低位速下编码方法高质量语音最有用的方法之一,它能够提供非常精确的语音参数预测。
LPC就是根据之前的P个信号构建滤波器,对之后的信号进行预测。
MATLAB中就有LPC函数,其形式为:
[A,E]=lpc(s_w,P);
其中A是LPC预测系数,用来构建滤波器,E是预测误差,在后面会用来计算鼓励能量,s_w是语音信号,P是预测阶数。
5
计算原始鼓励
用得到的LPC系数构建滤波器,对语音信号进行逆滤波就可以得到语音信号的鼓励,另外应该注意在系数变化的情况下连续滤波,需要维持滤波器的状态不变,要利用filter函数的和参数。
程序如下
[exc1,zi_pre]=filter(A,1,s_f,zi_pre);
exc1就是原始鼓励,用于计算基音周期。
计算基音周期
程序中用自相关法计算基音周期。
如果s(n)是一个周期为P的信号,那么其自相关函数也是周期为P的信号,且在信号周期的整数倍处,自相关函数取最大值。语音的浊音信号具有准周期性,其自相关函数在基音周期的整数倍处取最大值。计算两相邻最大峰值间的距离,就可以估计出基因周期。
其实现代码如下
functionPT=findpitch(s)
[B,A]=butter(5,700/4000);
s=filter(B,A,s);
R=zeros(143,1);
fork=1:143
R(k)=s(144:223)'*s(144-k:223-k);
end
[R1,T1]=max(R(80:143));
T1=T1+79;
R1=R1/(norm(s(144-T1:223-T1))+1);
[R2,T2]=max(R(40:79));
T2=T2+39;
R2=R2/(norm(s(144-T2:223-T2))+1);
[R3,T3]=max(R(20:39));
T3=T3+19;
R3=R3/(norm(s(144-T3:223-T3))+1);
Top=T1;
Rop=R1;
ifR2>=*Rop
Rop=R2;
Top=T2;
6
end
ifR3>*Rop
Rop=R3;
Top=T3;
end
PT=Top;
return
计算鼓励能量
鼓励能量G用于构建脉冲序列时当作脉冲序列的振幅,鼓励能量和线性预测误差E和基音周期PT有关,其公式为
G=sqrt(E*PT);
合成脉冲序列
合成的脉冲序列可根据变声的需要更改原始的基音周期PT,如
PT1=floor(PT/2);
而后以PT1为周期,G为振幅构建脉冲序列,作为合成语音的鼓励
更改声道参数
利用LPC求根法以更改共振峰分布。
具体过程为,对由线性预测系数A构成的多项式求根,而共振峰频率F和频谱宽带B和这些根有对应关系。设为一个根,那么其共轭值也是一个根,i对应的共振峰频率F和3dB带宽B存在以下关系:
所以
其中T是采样周期。
在程序中,我们只更改共振峰频率,程序如下
poles=roots(A);
deltaOMG=100*2*pi/fs;
forp=1:10
ifimag(poles(p))>0
poles(p)=poles(p)*exp(peak*1j*deltaOMG);%peak是变声系数elseifimag(poles(p))<0
7
poles(p)=poles(p)*exp(-peak*1j*deltaOMG);
end
end
A1=poly(poles);
A1是更改正声道参数的线性预测系数,用以构建滤波器合成变声语音。
合成变声语音
用脉冲序列作为鼓励,A1作为滤波器参数,合成变声语音,
[s_syn1_t,zi_syn_t]=filter(1,A1,exc_syn1_t,zi_syn_t);
程序设计
利用MATLAB的GUI进行程序设计,结果如下:
8
从图中可看出,经过变声器处理以后,语音信号的频域发生了很明显的变化,共振峰发生明显的移动。从听觉角度来说,变声效果也比拟明显。
传统变声算法缺陷
传统的变声算法形成时间较早,是对发声系统粗略的模仿实现语音合成,虽然能实现明显的变声效果,但还存在一些缺陷,这里只针对研究开发过程中发现的缺乏来说。
合成鼓励与原始鼓励差异较大
合成鼓励是以原始鼓励的基音周期为周期的脉冲序列,无视了原始鼓励中的泛音频率,而语音信号中泛音频率也是决定声音音色的重要因素,所以对泛音的无视直接影响了变声效果。
完成变声器的编程之后,我尝试用基音周期不变的合成鼓励与原始的声道参数进行语音合成,比照合成语音和原始语音,结果如下
9
可以很明显地看出合成鼓励和原始鼓励在频谱上有较大区别,而从听觉上而言,虽然能听出二者音色相似,但用合成鼓励合成的语音中有较多杂音。
从这个简单的实验可以看出,鼓励中的泛音对语音信号也有着相当重要的作用,当鼓励中去除泛音时,对语音信号的频谱分布和听觉上有着较大影响。所以变声算法中,只考虑基音来构建合成鼓励是有很大缺陷的。
不能实现定向变声
所谓定向变声,是指把一个人的声音定向地变成另一个人的声音。
每个人都有自己独特的音色,也就意味着每个人的声音信号有独特且恒定的参数存在,一开始我猜测是这个参数便是共振峰分布,后来发现,虽然不同的人说相同的话的语音共振峰确实有明显的区别,但是同一个人说不同的话共振峰的区别也非常大,下列图分别是同一个人读“为中华崛起而读书〞和“现在开始录音〞的时域和频域图:
10

matlab变声器 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数12
  • 收藏数0 收藏
  • 顶次数0
  • 上传人小吴
  • 文件大小137 KB
  • 时间2023-03-06