LPC语音合成实验报告_第1页
LPC语音合成实验报告_第2页
LPC语音合成实验报告_第3页
LPC语音合成实验报告_第4页
LPC语音合成实验报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、语音合成实验报告 李飞 王江为 袁晓杰 陈新依 王永胜一、 应用Matlab实现语音合成的背景语音合成技术的研究已有两百多年的历史,但真正具有实用意义的近代语音合成技术是随着计算机技术和数字信号处理技术的发展而发展起来的,主要是让计算机能够产生高清晰度、高自然度的连续语音。在语音合成技术的发展过程中,早期的研究主要是采用参数合成方法,后来随着计算机技术的发展又出现了波形拼接的合成方法。参数合成的特点:调节灵活,但音质较差。 21世纪的通信应在人与人之间、人与机器之间提供高质量的无缝的信息交换手段。无论何时、何地,以任何方式通信,语音通信将是最基本、最重要的方式之一。声音信号的处理和通信领域联系

2、密切,掌握音频信号的压缩编码、频谱分析和合成的原理与方法,对通信领域工作的开展具有重要意义。Matlab是由MathWorks公司于1984年推出的一套科学计算软件。Matlab具有强大的计算功能和诸多的工具箱,并且提供了COM接口,能方便地与VC等程序开发平台对接。使用Matlab来实现语音合成能够减少工作量,我们无需关心某些函数的实现,只需知道函数的作用和使用什么函数就够了,这就使Matlab成为科学研究和分析利器。二、 使用Matlab实现语音合成的目的1. 熟悉Matlab的使用 2. 了解语音合成的原理和过程3. 重点学习参数合成法的实现三、 语音合成的原理1.语音生成模型通过对声管

3、的研究,发现它可以用若干段级连的不等截面积均匀管道进行描述,一般称作级连无损声管模型。采用流体力学的方法可以证明每一截均匀管道的频响能够用一个但极点模型来近似,这样N段管道组成的声管就可以用一个N阶全极点滤波器表述,即: (9.1)对于典型的男声,N=10,所有的极点要分别构成共轭对以保证系数都是实数。在综合考虑清音信号,就可以得到产生语音信号的离散语音模型,如图所示:周期脉冲发生器声门脉冲模型G(z)声道模型V(z)辐射模型R(z)随机噪声发生器清音增益语音信号图1:产生语音信号的离散时域模型型对上述模型进行充分简化。首先去掉随机信号激励部分,认为激励信号是一个脉冲序列,不考虑有无周期。其次

4、去掉声门脉冲模型和口唇的辐射模型,因而得到如图所示最简单的语音模型:脉冲序列发生器声道模型V(z)图2:简化的语音生成语音信号假设激励信号用e(n)表示,语音信号用s(n)表示,根据全极点模型表达式,有: (9.2)从而可以用声管模型对激励信号进行滤波得到语音信号。2. 语音预测模型假设已经知道了系数ai,那么将图2的输入和输出对换,就构成了语音的预测模型,即语音信号s(n)送入预测滤波器,得到预测残差e(n) (9.3)假设信号的发端和收端都知道预测系数ai,那么发端只需要把误差e(n)传到收端即可,因为收端可以用e(n)作为上述差分方程的激励得到重建语音。在发端,语音s(n)是滤波器的输入

5、,而误差e(n)是输出。事实上,系数ai当然也需要从发端传到收端,但因为语音具有短时平稳性,即在短时间内(比如10ms),系数ai可以认为不发生变化,所以也不必太频繁地传输,因而采用预测技术后,总是可以大幅度地降低语音的带宽。这种通过现行预测方法压缩语音数据量的技术称为线性预测编码。3. 语音重建模型如果知道激励信号x(n)和滤波器系数ai,就可以利用激励生成重建语音了和语音生成模型的公式完全相同 (9.4)但这个模型被称为语音重建模型,为了同生成模型区分开,称为重建语音,如果x(n)正好等于e(n),那么重建语音就会和原始语音s(n)完全相同。语音的非平稳性(虽然短时平稳)导致预测系数ai是

6、时变的,一般每1020ms就会发生一些变化以产生不同的音节。在这种情况下,滤波过程也要分段进行,即每次用不同的滤波器系数,但相邻两次滤波必须要保持滤波器的状态不发生变化。4. 谐振和共振峰频率语音生成模型的每一对共轭极点都对应一个衰减的正弦信号的特征响应。例如一对共轭极点在时域冲激响应中的贡献是。其中极点幅度决定衰减速度,幅角决定振荡频率。 对语音合成,用数字的正弦信号表示抽样后的连续正弦信号。在这种情况下,模拟频率和数字频率的关系是=wT,其中T表示抽样间隔,w表示模拟频率(弧度),对应的 =w/2称为共振频率,它定义了声道的谐振频率。当模型参数变化时,共振峰频率也随着变化,从而产生不同的声

7、调。四、 分析与合成语音分析和合成系统如图3所示。需要做的处理声道模型V(z)线性预测系统需要做的处理重建的趣味语音原始语音滤波器系数aie(n)x(n)图3 分析和合成语音的系统框图首先要分析一段(一般是10ms)语音得到它的最佳ai系数。给定这些系数后,就可以适当的输入来合成语音。对于浊音信号,一种可取的激励模型就是以特定频率重复的单位样值序列,这个频率就是基音频率。对清音,最好选择随机噪声或者白噪声作为输入。但在不做清浊判决的情况下,全部采用周期激励的合成质量也可以接受。分析过程如下:首先,抽样的语音信号被分成10ms长的段;然后,对每段数据进行统计分析,计算相邻样点的相关性并最终得到最

8、佳预测系数。合成过程就是利用这些预测系数,以及周期的单位样值序列作为输入,依次得到每段合成语音。1、 变速不变调所谓变速不变调,是指声音播放时,速度的改变不会导致音调的变化。为了实现变速不变调,首先需要将表示“调”的内容从语音中分离出来,由前述语音预测模型,表示“调”的有两个部分,一是共振峰频率,即预测模型的参数;二是基音周期,即激励信号的参数。接下来的工作就是在不改变这两种参数的前提下改变数据长度。即将10ms的80个样点的激励变成20ms160个样点(注意保持单位样值的周期不变),在这20ms内保持预测模型系数不变,就合成了20ms语音了。新语音的声调和原有语音是完全相同的,只不过时间变长

9、了而已。2、 变调不变速如前所述,可以考虑将激励信号的频率增加(注意不改变信号长度),同时将共振峰频率也相应增大一些(即极点的幅角绝对值增大,或者说上半平面的极点逆时针旋转,下半平面的极点顺时针旋转,但注意两者都要旋转相同角度而且不要转过负实轴),这样得到的合成语音频率将变高。五、 语音合成的实现1. 基础部分给定,假设e(n)是输入信号,s(n)是输出部分,求滤波器的传递函数如果a1=1.3789,a2=-0.9506,求共振峰频率,并用zplane,freqz,impz分别绘出零,极点分布图,频率响应和单位样值相应,用filter绘出单位样值响应,比较和impz的是否相同。程序如下:clc

10、clear allclose allfs=8000;P=1,-1.3789,0.9506;Z=1;z,p,k=tf2zp(Z,P) %求零点,极点和增益f=abs(angle(p)*fs/(2*pi) %求共振峰频率f=w/(2*pi)figure;subplot(221);zplane(Z,P) %画零极点图title(零极点图);B=Z;A=P;H,W=freqz(B,A); % 求频率响应subplot(222);plot(W/pi ,abs(H);xlabel(频率omega(xpi rad/sample)title(幅度谱图);subplot(223);plot(W/pi,angle

11、(H);xlabel(频率omega(xpi rad/sample)title(相位谱图);h=impz(B,A); %计算系统单位序列响应figure(2);subplot(211);stem(h); title(impz函数求系统冲激图);k=0:400;n=0;x=(k-n)=0;Y=filter(Z,P,x); %x为单位序列,求系统的冲击响应subplot(212)stem(Y);title(filter函数求系统冲激图); 运行结果f=999.9447用impz和filter求出的单位样值相应是一样的,因为这里的输入是单位序列,所以impz求出的单位冲击相应与用filter求出的是

12、一样。2 将共振峰频率增加150HZ后,求a1和a2.f=round(f)+150;f=f(1); %共振峰频率增加150 p1=f*2*pi/8000; %求模拟频率omega p2=abs(p);p0=p2*exp(j*p1);p0=p0(1); p00=p2*exp(-j*p1);p00=p00(1);p3=p0;p00; %已知模值和相角求极点Z,P=zp2tf(z,p3,k) %计算系数通过运行函数求出a1=1.2072,a2=-0.95063. 语音合成的实现3.1常量定义与分配内存空间clcclear allclose all(1)定义常数:% dd和cc是用于变调和变速的参数,

13、可以进行修改。 dd=0; %这个用于变调,值大则高cc=1; %这个用于变速,值大则慢 FL = 80; % 帧长 WL = 240; % 窗长,即汉明窗的长度 P = 30; % 预测系数个数,增加预测系数可以提高音质 s=wavread(voice.wav); %读取语音 L = length(s); % 读入语音长度 FN = floor(L/FL)-2; % 计算帧数 fs=8000; %抽样频率FL_v=cc*FL; %改变帧长度可以变速,用于变速不变调(2)分配内存空间 % 预测和重建滤波器(初始化空间) exc = zeros(L,1); % 激励信号(预测误差) excc =

14、 zeros(L,1); % 人工合成的冲击信号,即激励信号 s_rec = zeros(L,1); % 重建语音 hw = hamming(WL); % 汉明窗 fze=zeros(1,30); %用于保持滤波器状态不变 fzs=zeros(1,30); %用于保持滤波器状态不变 A=zeros(FN,(P+1); %预测系数,也是声道模型的分母部分 E=zeros(FN); pp=0; %生成激励的初始相位=03.2语音预测部分这部分对原始语音进行预测处理的目的是取得预测系数A,基音周期PT和能量E。% 依次处理每帧语音for n = 3:FN %从第三帧到最后一帧 % 计算预测系数(不需

15、要掌握)s_w = s(n*FL-WL+1:n*FL).*hw; %汉明窗加权后的语音,用来预测A(n,:),E(n-1)*FN) = lpc(s_w, P); %用线性预测法计算P个预测系数% A是预测系数,E会被用来计算合成激励的能量。s_f = s(n-1)*FL+1:n*FL); % 本帧语音,下面就要对它做处理exc(n-1)*FL+1:n*FL),fze = filter(A(n,:),1,s_f,fze); %通过逆向声道滤波器计算激励s_Pitch = exc(n*FL-222:n*FL); %为什么要-222这一点有待研究PT(n) = findpitch(s_Pitch);

16、 % 计算基音周期PT(不要求掌握)end3.3语音合成部分变速不变调,只改变帧长:由FL变成FL_v。变调,通过共振峰频率的改变使预测系数A发生变化,也就是声道模型产生了变化。这正好符合我们所熟知的不同声道会发出不同的声音。% 对参数进行合成for n = 3:FN f=PT(n)/(dd/50+1); %基音周期 nn=1/fs:1/fs:FL_v/fs % 帧长度,fs控制着点的密度% excc(n-1)*FL_v+1:n*FL_v)=square(2*pi*f*nn,1);被注释掉的这一步用于产生激励信号。但是存在方波产生的相位问题,每帧产生的相位是从0开始,但是实际的长度往往不是基音

17、周期的整数倍,这也就产生了冲击信号相位不连续的问题。为了解决这个问题,本文对产生的冲击信号进行了改进,自编 chongji()函数解决了相位问题。其具体的原理下文将会继续介绍。excc(n-1)*FL_v+1:n*FL_v),pp=chongji(2*pi*f*nn,pp); %自编函数解决相位问题excc(n-1)*FL_v+1:n*FL_v)=excc(n-1)*FL_v+1:n*FL_v); %转置,以满足向量运算的形式G(n) = sqrt(E(n-1)*FN)*PT(n); % 计算合成激励的能量G(不要求掌握)下面是变调,先用A作为多项式的参数求出当前声道V的极点,得出数字频率om

18、iga,共振峰频率f=omiga/2pi/8000.对f增加或者减少某值之后再反过来求相应的多项式的参数A。这样生成了新的声道模型实现了变调。 poles = roots(A(n,:); %通过A求极点 dformant = dd*2*pi/8000; %共振峰频率的变化 for nn=1:30 if imag(poles(nn)0 poles(nn) = poles(nn)*exp(j*dformant); elseif imag(poles(nn)0 poles(nn) = poles(nn)*exp(-j*dformant); end end% 增大共振峰频率:增大极点的幅角绝对值,即上

19、半平面的极点逆时针转,下半平面的极点顺时针转。 A(n,:)=poly(poles); %由根值反求多项式,即由极点反求A值s_rec(n-1)*FL_v+1:n*FL_v),fzs =filter(1,A(n,:),G(n)*excc(n-1)*FL_v+1:n*FL_v),fzs); %通过声道滤波器重现语音end3.4 播放并存储合成的语音s_rec=s_rec/max(abs(s_rec); %将生成的语音归一化到-11 sound(s_rec); wavwrite(s_rec,hecheng.wav);3.5 自编的chongji函数这个函数是为了解决冲击函数相位不连续的问题,对于冲击信号的产生信号进行改进。将初始相位赋给函数,使输出冲击函数的相位延迟以实现相位的匹配。本函数可以返回一个相位用于下一次的相位匹配。function s,pp = chongji( t

温馨提示

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

最新文档

评论

0/150

提交评论