LPC语音合成实验报告Word文件下载.docx

上传人:b****3 文档编号:17675753 上传时间:2022-12-08 格式:DOCX 页数:11 大小:115.17KB
下载 相关 举报
LPC语音合成实验报告Word文件下载.docx_第1页
第1页 / 共11页
LPC语音合成实验报告Word文件下载.docx_第2页
第2页 / 共11页
LPC语音合成实验报告Word文件下载.docx_第3页
第3页 / 共11页
LPC语音合成实验报告Word文件下载.docx_第4页
第4页 / 共11页
LPC语音合成实验报告Word文件下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

LPC语音合成实验报告Word文件下载.docx

《LPC语音合成实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《LPC语音合成实验报告Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。

LPC语音合成实验报告Word文件下载.docx

假设已经知道了系数{ai},那么将图2的输入和输出对换,就构成了语音的预测模型,即语音信号s(n)送入预测滤波器,得到预测残差e(n)

(9.3)

假设信号的发端和收端都知道预测系数{ai},那么发端只需要把误差e(n)传到收端即可,因为收端可以用e(n)作为上述差分方程的激励得到重建语音。

在发端,语音s(n)是滤波器的输入,而误差e(n)是输出。

事实上,系数{ai}当然也需要从发端传到收端,但因为语音具有短时平稳性,即在短时间内(比如10ms),系数{ai}可以认为不发生变化,所以也不必太频繁地传输,因而采用预测技术后,总是可以大幅度地降低语音的带宽。

这种通过现行预测方法压缩语音数据量的技术称为线性预测编码。

3.语音重建模型

如果知道激励信号x(n)和滤波器系数{ai},就可以利用激励生成重建语音了和语音生成模型的公式完全相同

(9.4)

但这个模型被称为语音重建模型,为了同生成模型区分开,

称为重建语音,如果x(n)正好等于e(n),那么重建语音就会和原始语音s(n)完全相同。

语音的非平稳性(虽然短时平稳)导致预测系数{ai}是时变的,一般每10~20ms就会发生一些变化以产生不同的音节。

在这种情况下,滤波过程也要分段进行,即每次用不同的滤波器系数,但相邻两次滤波必须要保持滤波器的状态不发生变化。

4.谐振和共振峰频率

语音生成模型的每一对共轭极点都对应一个衰减的正弦信号的特征响应。

例如一对共轭极点

在时域冲激响应中的贡献是

其中极点幅度决定衰减速度,幅角决定振荡频率。

对语音合成,用数字的正弦信号表示抽样后的连续正弦信号。

在这种情况下,模拟频率和数字频率的关系是Ω=wT,其中T表示抽样间隔,w表示模拟频率(弧度),对应的ƒ=w/2π称为共振频率,它定义了声道的谐振频率。

当模型参数变化时,共振峰频率也随着变化,从而产生不同的声调。

四、分析与合成语音

分析和合成系统如图3所示。

首先要分析一段(一般是10ms)语音得到它的最佳{ai}系数。

给定这些系数后,就可以适当的输入来合成语音。

对于浊音信号,一种可取的激励模型就是以特定频率重复的单位样值序列,这个频率就是基音频率。

对清音,最好选择随机噪声或者白噪声作为输入。

但在不做清浊判决的情况下,全部采用周期激励的合成质量也可以接受。

分析过程如下:

首先,抽样的语音信号被分成10ms长的段;

然后,对每段数据进行统计分析,计算相邻样点的相关性并最终得到最佳预测系数。

合成过程就是利用这些预测系数,以及周期的单位样值序列作为输入,依次得到每段合成语音。

1、变速不变调

所谓变速不变调,是指声音播放时,速度的改变不会导致音调的变化。

为了实现变速不变调,首先需要将表示“调”的内容从语音中分离出来,由前述语音预测模型,表示“调”的有两个部分,一是共振峰频率,即预测模型的参数;

二是基音周期,即激励信号的参数。

接下来的工作就是在不改变这两种参数的前提下改变数据长度。

即将10ms的80个样点的激励变成20ms160个样点(注意保持单位样值的周期不变),在这20ms内保持预测模型系数不变,就合成了20ms语音了。

新语音的声调和原有语音是完全相同的,只不过时间变长了而已。

2、变调不变速

如前所述,可以考虑将激励信号的频率增加(注意不改变信号长度),同时将共振峰频率也相应增大一些(即极点的幅角绝对值增大,或者说上半平面的极点逆时针旋转,下半平面的极点顺时针旋转,但注意两者都要旋转相同角度而且不要转过负实轴),这样得到的合成语音频率将变高。

五、语音合成的实现

1.基础部分

给定

,假设e(n)是输入信号,s(n)是输出部分,求滤波器的传递函数如果a1=1.3789,a2=-0.9506,求共振峰频率,并用zplane,freqz,impz分别绘出零,极点分布图,频率响应和单位样值相应,用filter绘出单位样值响应,比较和impz的是否相同。

程序如下:

clc

clearall

closeall

fs=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(x\pirad/sample)'

幅度谱图'

subplot(223);

plot(W/pi,angle(H));

相位谱图'

h=impz(B,A);

%计算系统单位序列响应

figure

(2);

subplot(211);

stem(h);

impz函数求系统冲激图'

k=0:

400;

n=0;

x=[(k-n)==0];

Y=filter(Z,P,x);

%x为单位序列,求系统的冲击响应

subplot(212)

stem(Y);

filter函数求系统冲激图'

运行结果f=999.9447

用impz和filter求出的单位样值相应是一样的,因为这里的输入是单位序列,所以impz求出的单位冲击相应与用filter求出的是一样。

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.9506

3.语音合成的实现

3.1.常量定义与分配内存空间

(1)定义常数:

%dd和cc是用于变调和变速的参数,可以进行修改。

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=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;

%生成激励的初始相位=0

3.2语音预测部分

这部分对原始语音进行预测处理的目的是取得预测系数A,基音周期PT和能量E。

%依次处理每帧语音

forn=3:

FN%从第三帧到最后一帧

%计算预测系数(不需要掌握)

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:

%为什么要-222这一点有待研究

PT(n)=findpitch(s_Pitch);

%计算基音周期PT(不要求掌握)

end

3.3语音合成部分

变速不变调,只改变帧长:

由FL变成FL_v。

变调,通过共振峰频率的改变使预测系数A发生变化,也就是声道模型产生了变化。

这正好符合我们所熟知的不同声道会发出不同的声音。

%对参数进行合成

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开始,但是实际的长度往往不是基音周期的整数倍,这也就产生了冲击信号相位不连续的问题。

为了解决这个问题,本文对产生的冲击信号进行了改进,自编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的极点,得出数字频率omiga,共振峰频率f=omiga/2pi/8000.对f增加或者减少某值之后再反过来求相应的多项式的参数A。

这样生成了新的声道模型实现了变调。

poles=roots(A(n,:

));

%通过A求极点

dformant=dd*2*pi/8000;

%共振峰频率的变化

fornn=1:

30

ifimag(poles(nn))>

0poles(nn)=poles(nn)*exp(j*dformant);

elseifimag(poles(nn))<

0poles(nn)=poles(nn)*exp(-j*dformant);

end

end

%增大共振峰频率:

增大极点的幅角绝对值,即上半平面的极点逆时针转,下半平面的极点顺时针转。

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

%通过声道滤波器重现语音

3.4播放并存储合成的语音

s_rec=s_rec/max(abs(s_rec));

%将生成的语音归一化到-1~1

sound(s_rec);

wavwrite(s_rec,'

hecheng.wav'

3.5自编的chongji函数

这个函数是为了解决冲击函数相位不连续的问题,对于冲击信号的产生信号进行改进。

将初始相位赋给函数,使输出冲击函数的相位延迟以实现相位的匹配。

本函数可以返回一个相位用于下一次的相位匹配。

function[s,pp]=chongji(t,p)

%[s,pp]=fangbo(t,p)

%输入t,起始相位p

%输出s,结束相位pp

ifnargin<

2

p=0;

s=(square(t+p,1)+1)/2;

%将方波变为冲击,t+p用于相位匹配

a=length(t);

pp=mod(t(a)+p,2*pi);

%返回一个相位用于下一次的相位匹配

%pp=asin(s(a));

return

3.6其它函数

%计算一段语音的基音周期,不要求掌握

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

[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>

=0.85*Rop

Rop=R2;

Top=T2;

ifR3>

0.85*Rop

Rop=R3;

Top=T3;

PT=Top;

六、实验总结

通过本实验,我们可以了解语音合成的两种基本方法中的参数合成法。

参数合成法顾名思义就是采用数字信号处理的方法,将人类发声过程看作是一个模拟声门状态的源,去激励一个表征声道谐振特性的时变数字滤波器,这个源可能是周期脉冲序列,它代表浊音情况下的声带振动,或者是随机噪声序列,代表不出声的清音。

调整滤波器的参数等效于改变口腔及声道形状,达到控制发不同音的目的,而调整激励源脉冲序列的周期或强度,将改变合成语音的音调、重音等。

由于准确提取共振峰参数比较困难,虽然利用共振峰合成器可以得到许多逼真的合成语音,但是整体合成语音的音质难以达到实用要求。

除了知识的扩展,我们学到更多的是团队合作,大家分工共同处理一个实验,这样使每个人都可以发挥自己的特点,为了共同的目的发挥各自的光和热。

在团队中相互学习,整体合作,取长补短,正因为这个团体,我们才把自己变的更好。

七实验分工

组长:

王江为

组员:

李飞袁晓杰陈新依王永胜

分工:

李飞编写大部分程序,王江为和袁晓杰编了前面的程序。

并且在李飞的讲解下我们五人理解了程序。

实验报告中陈新依写了原理部分,王永胜写了开头和结尾,王江为整理了整篇报告,并写了ppt。

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1