美文网首页论文
基于LPC技术的语音合成算法研究

基于LPC技术的语音合成算法研究

作者: e1ebc1053240 | 来源:发表于2019-06-29 15:02 被阅读0次

    基于LPC技术的语音合成算法研究   原文链接:http://www.51jrft.com/dzxx/dzkxyjs/591.html

    应用LPC合成法进行语音合成主要有两部分工作需要完成:提取语音参数与人工控制这些参数的合成。首先,在参数提取前,使用双门限端点检测法进行语音端点检测以保证用于参数提取的语音段有效。其次,本次设计采用线性预测分析法进行参数提取,该法主要利用Levinson Durbin算法对Yule-Walker方程进行递归求解,将LPC系数集中便于提取。最后,在语音合成部分,激励分为人工合成和预测残差两种,前者通过语音生成模型合成语音,后者通过滤波实现。_HM000098

    实验对比了原语音及两种合成语音,结果表明该算法有效,其中人工激励合成语音存在失真,残差激励合成语音对原语音还原度较高,两者差异试听及波形上均较为明显。

    关键词:语音合成;MATLAB;线性预测;双门限端点检测法;Levinson Durbin算法;残差

    3.4.2. 预加重与去加重的算法实现

    原始语音信号中,由于人类发声时的口唇辐射而因起语音信号的高频衰减,在机理模型中含有低通滤波作用。在进行语音分析时,为了使LPC合成模型与声管模型一致,提高参数提取精度,在LPC分析系统中加入了预加重处理,常用预加重传递函数为:,为预加重系数,这代表了人类发声时口唇辐射模型的影响,实验表明,在大多数情况下取,可较多地去除口唇辐射的影响[1]。

    1)预加重

    ①读取语音信号,语音信号文件后缀为“.wav”;

    ②将矩阵类型转化为double型;

    ③预加重滤波器,系数常采用0.9375;

    ④幅度归一化到[-1,1];

    [x,fs] = wavread('s4.wav');

    y1 = double(x);

    y2 = filter([1 -0.9375],1,y1);   % 预加重滤波器

    y = y2/max(abs(y2));    % 幅度归一化到[-1,1]

    2)去加重

    与预加重滤波互为逆过程。

    sp1 = real(sp_syn1);

    sp2 = filter(1,[1 -0.0625],sp1);   % 去加重滤波器

    sp_syn = sp2/max(abs(sp2));    % 幅度归一化到[-1,1]

    3.4.3 加窗分帧

    帧长取80,帧移为0,具体实现为:

    WL = 80;   % 分帧时所用窗长

    length = length(x);   % 语音长度

    w = hamming(WL);   % 汉明窗

    FN = floor(length/WL);  % 计算帧数

    fr = zeros(FN,WL);   % 预先分配空间,节省运算时间

    for n = 1:FN

    start1 = (n-1)*WL+1;

    over1 = n*WL;

    fr1 = bj(start1:over1);

    fr(n,:) = fr1'.*w';   % 加窗进行分帧

    end

    3.4.4 短时分析

    1)短时能量

    % 短时能量计算

    En = zeros(1,frNum);

    En = sum(framed.^2,2)';  % framed是已分帧的信号

    En(En == 0) = eps;   % 避免出现log(0)的警告

    logEn = zeros(1,frNum);

    for j = 1:frNum

    logEn(j) = 10*log10(En(j));   % 单位化为dB便于后续计算

    end

    图3.7 短时能量

    2)短时过零率

    zcr = zeros(1,frameNum-1);  % 预先分配空间,节省运算时间

    for m = 1:frameNum-1

    for i = 1:winLen

    fore1 = sgn(newframe(m+1,i));

    beh1 = sgn(newframe(m,i));

    zcr1 = 0.5*(abs(fore1-beh1));

    end

    zcr(m) = zcr1;

    zcr1 = 0;

    end

    图3.8 短时过零率

    3)短时自相关函数

    % 求自相关函数

    r = zeros(1,p+1);

    for k = 1:p+1

    sum = 0;

    for m = 1:N+1-k

    sum = sum+newfr(m).*newfr(m-1+k);

    end

    r(k) = sum;

    end

    4)Levinson Durbin算法求解LPC系数

    根据前文的Levinson Durbin算法的完整递推过程

    % 递推过程

    e(1) = (1-k(1)^2)*r(1);

    for i = 2:p

    c = zeros(1,i);

    sum = 0;

    for j = 1:i-1

    sum = sum+(a(i-1,j).*r(i+1-j));

    end

    c(i) = sum;

    k(i) = (r(i+1)-c(i))/e(i-1);

    a(i,i )= k(i);

    for j = 1:i-1

    a(i,j) = a(i-1,j)-k(i).*a(i-1,i-j);

    end

    e(i) = (1-k(i)^2)*e(i-1);   % 预测器残差能量

    end

    递推结束后提取LPC系数并求出增益即可。

    5)构造激励源

    清音给予符合正态分布的随机噪声作为音源,而浊音则用准周期脉冲序列作为音源。程序略长,就不在此列出了,详见附录。

    6)合成语音

    ①通过一个LPC滤波器即可合成语音。

    winLen = 80;

    excLen = length(rec_exc);

    frNum = floor(excLen/winLen);

    zi_syn = zeros(p,1);   % 合成滤波器的状态

    for n = 1:frNum

    start = (n-1)*winLen+1;

    ending = n*winLen;

    exc_fr = rec_exc(start:ending)';

    exc_fr = exc_fr.*G(n);  % 增益相乘

    [s_syn,zi_syn] = filter(1,lpc_ar(:,n),exc_fr,zi_syn); % 得到合成语音

    sp_syn(start:ending) = s_syn;

    end

    ②利用残差信号合成语音

    先提取语音信号的预测残差,即对每一帧语音信号使用下列语句:

    lp_residual(:,n) = filter(d_total(:,n),1,fr);[5]

    合成时只需要对每一帧语音信号使用下列语句即可:

    s_syn(fore:behi,1) = filter(1,d_total(:,i),lp_residual(:,i));

    摘  要    III

    ABSTRACT    IV

    目   录    V

    第一章 绪论    1

    1.1 引言    1

    1.2 课题简介    1

    1.2.1 课题研究背景与发展现状    1

    1.2.2 课题的主要内容    3

    1.2.3论文章节安排    3

    第二章 语音信号处理基础知识    5

    2.1 语音信号的数学模型    5

    2.2 语音信号的预处理    8

    2.2.1预加重与去加重    8

    2.2.2加窗分帧处理    9

    2.3 语音信号的短时分析    11

    2.3.1 短时能量分析    11

    2.3.2 短时平均幅度分析    12

    2.3.3 短时过零率分析    12

    2.3.4 短时自相关分析    13

    2.4 语音信号起、止端点检测    13

    第三章 基于LPC分析的语音合成算法    16

    3.1 语音信号的线性预测分析    16

    3.1.1 线性预测分析的基本原理    16

    3.1.2 线性预测方程组的求解    20

    3.2 构造激励信号    22

    3.2.1 根据数据文件进行构造    22

    3.2.2 提取残差信号作为激励源    23

    3.3 语音信号的合成    23

    3.3.1 线性预测合成法    23

    3.3.2 残差合成法    25

    3.4 语音合成算法的MATLAB实现    26

    3.4.1 MATLAB软件平台介绍    26

    3.4.2. 预加重与去加重的算法实现    28

    3.4.3 加窗分帧    28

    3.4.4 短时分析    29

    3.4.5 语音合成结果对比    31

    3.5语音合成系统的质量评估    35

    3.5.1 质量评估的任务及目的    35

    3.5.2质量评估方法    36

    3.5.3 应用主观印象分对本次设计结果进行评估    38

    第四章 MATLAB GUI界面开发40

    4.1 语音合成的GUI界面实现    40

    4.1.1 GUI界面    40

    4.1.2 GUI界面的算法实现    41

    4.1.3 GUI界面运行显示结果    43

    第五章 全文总结    45

    致谢    46

    参考文献    47

    附录:MATLAB程序源代码    48

    1. 语音分析及合成部分    48

    2. GUI界面部分    54

    原文链接:http://www.51jrft.com/dzxx/dzkxyjs/591.html

    相关文章

      网友评论

        本文标题:基于LPC技术的语音合成算法研究

        本文链接:https://www.haomeiwen.com/subject/uxjpcctx.html