一、获取代码方式
获取代码方式1:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
获取代码方式2:
完整代码已上传我的资源:【语音合成】基于matlab线性预测系数和预测误差语音合成【含Matlab源码 564期】
备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、线性预测合成简介
线性预测合成方法是目前比较简单和实用的一种语音合成方法,它以其低数据率、低复杂度、低成本,受到特别的重视。20世纪60年代后期发展起来的L.PC语音分析方法可以有
效地估计基本语音参数,如基音、共振峰,谱、声道面积函数等,可以对语音的基本模型给出精确的估计, 而且计算速度较快。因此, LPC语音合成器利用LPC语音分析方法, 通过分析自然语音样本, 计算出LPC系数, 就可以建立信号产生模型, 从而合成出语音。线性预测合成模型是一种“源一滤波器”模型,由白噪声序列和周期脉冲序列构成的激励信号,经过选通、放大并通过时变数字滤波器(由语音参数控制的声道模型),就可以再获得原语音信号。这种参数编码的语音合成器的原理框图如图10-2所示。图10-2所示的线性预测合成的形式有两种:一种是直接用预测器系数a构成的递归型合成滤波器;另一种合成的形式是采用反射系数k构成的格型合成滤波器。
直接用预测器系数a,构成的递归型合成滤波器机构如图10-3所示。用该方法定期地改变激励参数u(n)和预测器系数a,能合成出语音。这种结构简单而直观,为了合成一个语音样本,需要进行p次乘法和p次加法。合成的语音样本由下式决定:
式中,a;为预测器系数;G为模型增益;u(n)为激励;合成语音样本为s(n);p为预测器
阶数。
直接式的预测系数滤波器结构的优点是简单、易于实现,所以曾被广泛采用,其缺点是合成语音样本需要很高的计算精度。这是因为这种递归结构对系数的变化非常敏感,系数的微小变化都可以导致滤波器极点位置发生很大变化,甚至出现不稳定现象。所以,由于预测系数a,的量化所造成的精度下降,使得合成的信号不稳定,容易产生振荡的情况。而且预测系数的个数p变化时,系数a,的值变化也很大,很难处理,这是直接式线性预测法的缺点。
另一种合成的形式是采用反射系数构成的格型合成滤波器。合成语音样本由下式决定:
式中,G为模型增益;u(n)为激励;k,为反射系数;b,(n)为后向预测误差;p为预测器
阶数。
由式(10-2)可看出,只要知道反射系数、激励位置(即基音周期)和模型增益就可由后向误差序列迭代计算出合成语音。合成一个语音样本需要(2p-1)次乘法和(2p-1)次加法。采用反射系数k,的格型合成滤波器结构,虽然运算量大于直接型结构,却具有一系列优点:其参数k,具有|k,|<1的性质,因而滤波器是稳定的;同时与直接结构形式相比,它对有限字长引起的量化效应灵敏度较低。此外,基音同步合成需对控制参数进行线性内插,以得到每个基音周期起始处的值。然而预测器系数本身却不能直接内插,但可以证明,可对部分相关系数进行内插,如果原来的参数是稳定的,则结果必稳定。无论选用哪一种滤波器结构形式, LPC合成模型中所有的控制参数都必须随时间不断修正。
在实际进行语音合成时,除了构成合成滤波器之外,还必须在有浊音的情况下,将一定基音周期的脉冲序列作为音源;在清音的情况下,将白噪声作为音源。由此可知,必须进行浊音/清音的判别和确定音源强度。
对于基音周期的检测,上述章节已经进行了相关介绍。对于语音合成来说,常采用去掉
共振峰影响后的最后一级残差信号eP(前向预测误差)的自相关函数的方式。这个残差信
号的自相关函数也叫变形自相关函数r,(n),它除了可用来检测基音周期之外,也可用来区别浊音/清音等。在r,(0)之后找出r,(n)取峰值时的T,即从n=0开始,搜索基音周期可能存在的3~15ms的区间,从而求出这个周期。同样对于浊音/清音的判别方法,也可以采用误差信号r,(n)。采用r.(n)的一个方法是利用r,(T)/r,(0)这个比值,如果是浊音的话,r.(T)则相当于r.(n)的一个极值。所以可以设定r,(T)/r,(0)的比值在0.18以下为清音,在0.25以上为浊音。
三、部分源代码
clear all; clc; close all;[x, fs] = audioread('girl.wav'); % 读入数据文件
四、运行结果
五、matlab版本及参考文献
1 matlab版本
a
2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,.
如果觉得《【语音合成】基于matlab线性预测系数和预测误差语音合成【含Matlab源码 564期】》对你有帮助,请点赞、收藏,并留下你的观点哦!