语音合成vocoder(三) spectral envelope参数


基本概念[1]

这里写图片描述
spectral envelope的三个性质:

  • 包络线连接峰值,并且紧紧包裹幅度谱
  • 包络线不能震荡太剧烈,需要平滑
  • 包络线不能有corner

语音信号可以模拟为激励脉冲序列与声道冲激响应的离散卷积,对于浊音信号 y ( t ) y(t) y(t)可以简化为基音周期为 T 0 T_0 T0脉冲串 δ \delta δ和声道冲激响应 h ( t ) h(t) h(t)的卷积:
y ( t ) = h ( t ) ∗ ∑ n = − ∞ ∞ δ ( t − n T 0 ) y(t)=h(t)*\sum_{n=-\infty}^{\infty}\delta(t-nT_0) y(t)=h(t)n=δ(tnT0)
Y ( ω ) = 2 π T 0 H ( ω ) ∑ n = − ∞ ∞ δ ( ω − n ω ) Y(\omega)=\frac{2\pi}{T_0}H(\omega)\sum_{n=-\infty}^{\infty}\delta(\omega-n\omega) Y(ω)=T02πH(ω)n=δ(ωnω)
上式中的 H ( ω ) H(\omega) H(ω)即为需要估计的频谱包络; δ ( ω ) \delta(\omega) δ(ω)是频谱的谐波部分。

常用方法[1]

LPC

linear predictive coding一开始用于语音的传输压缩,基本思想是n时刻的信号 s ( n ) s(n) s(n) s ( n − p − 1 ) s(n-p-1) s(np1) s ( n − 1 ) s(n-1) s(n1)的线性组合:
s ^ ( n ) = ∑ i = 1 p a i s ( n − i ) \hat s(n)=\sum_{i=1}^{p}a_i s(n-i) s^(n)=i=1pais(ni)
e ( n ) = s ^ ( n ) − s ( n ) e(n)=\hat s(n)-s(n) e(n)=s^(n)s(n)
要求预测误差 e e e最小,这样一帧的信号 s s s可以用 e e e和对应的LPC常数 a a a来表示,由于 e e e比较小,所以可以用更少的bit来表示,实现了信号的压缩。可以用下面的滤波器对来表示编解码的过程。
这里写图片描述
从另外一角度理解,analysis filter的作用是压缩输入信号的高幅值的频率分量,而synthesis filter的作用是放大这些分量,所以在一定程度上面synthesis filter体现了包络的信息。
缺点是包络有可能包含将peak之间的噪声部分,尤其当两个peak间距比较大的时候(f0比较大),如下图。
这里写图片描述

cepstrum

倒谱分析属于同态解卷积的方法,对于卷积信号,不能通过线性方法进行分离,可以通过FFT变为乘积信号,取log将乘积信号变为加性信号,IFFT变换获取倒谱,通过简单的低通滤波即可获得最后的频谱包络。
假设两部分对应的时域信号分别是h(n)和e(n),那么满足:
x ( n ) = h ( n ) ∗ e ( n ) x(n)=h(n)*e(n) x(n)=h(n)e(n)
X ( k ) = H ( k ) E ( k ) X(k)=H(k)E(k) X(k)=H(k)E(k)
此时我们是无法区分开h(n)和e(n)。
对频域两边取log:
l o g ( X ( k ) ) = l o g ( H ( k ) ) + l o g ( E ( k ) ) log(X(k))=log(H(k))+log(E(k)) log(X(k))=log(H(k))+log(E(k))
然后进行反傅里叶变换:
I D F T ( l o g ( X ( k ) ) ) = I D F T ( l o g ( H ( k ) ) ) + I D F T ( l o g ( E ( k ) ) ) IDFT(log(X(k)))=IDFT(log(H(k)))+IDFT(log(E(k))) IDFT(log(X(k)))=IDFT(log(H(k)))+IDFT(log(E(k)))
假设此时得到的时域信号如下:
x ′ ( n ) = h ′ ( n ) + e ′ ( n ) x'(n)=h'(n)+e'(n) x(n)=h(n)+e(n)
虽然此时获得时域信号x’(n)即为倒谱,已经和原始的时域信号x(n)不一样,但是可以把时域信号的卷积关系转化为了线性加关系。
对应上图的频域信号,可以拆分成两部分的乘积:频谱的包络和频谱的细节。包络部分对应的是频谱的低频信息,而细节部分对应的是频谱的高频信息。倒谱分析已经将两部分对应的时域信号的卷积关系转化为了线性加关系,所以只需要将倒谱通过一个低通滤波器即可获得包络部分对应的时域信号h’(t)。

CheapTrick[2]

1. F0-adaptive windowing

参考pitch synchronous,语音分段的时候不再以传统的定长帧为单位,而是以f0对应的周期为单位,以保证波形和频谱的平滑连续。
一般使用长度为 3 T 0 3T_0 3T0Hanning窗对语音进行切割,以当前时间点为中心,左右各取 1.5 T 0 1.5T_0 1.5T0长度的语音。
w ( n ) = 0.5 ( 1 − c o s ( 2 π n N ) ) , 0 ≤ n ≤ N w(n)=0.5(1-cos(2\pi \frac{n}{N})), 0 \le n \le N w(n)=0.5(1cos(2πNn)),0nN
清音没有基频,一般使用一个适当的常数。

2. smoothing of the power spectrum

对于加窗以后的时域信号进行FFT获得对应的功率谱 P ( ω ) P(\omega) P(ω),由于后面第三步需要对功率谱取log操作,所以需要保证功率谱没有零值,这里在三角窗内对信号进行平滑
P s ( ω ) = 3 2 ω 0 ∫ − ω 0 3 ω 0 3 P ( ω + λ )   d λ P_s(\omega)=\frac{3}{2\omega_0} \int_{-\frac{\omega_0}{3}}^{\frac{\omega_0}{3}} P(\omega+\lambda)\, \mathrm{d}\lambda Ps(ω)=2ω033ω03ω0P(ω+λ)dλ

3. liftering in the quefrency domain

可以将功率谱看做是普通信号,求出信号的包络也就是找到信号的低频部分。

  1. 首先对上一步求出来的功率谱做反傅里叶变换
    p s ( τ ) = F − 1 [ l o g ( P s ( ω ) ] p_s(\tau)=\mathscr{F}^{-1}[log(P_s(\omega)] ps(τ)=F1[log(Ps(ω)]
  2. 过滤得到信号的低频部分
    l s ( τ ) = s i n ( π f 0 τ ) π f 0 τ l_s(\tau)=\frac{sin(\pi f_0 \tau)}{\pi f_0 \tau} ls(τ)=πf0τsin(πf0τ)
    sinc函数第一个作用,相当于一个低通滤波器;第二个作用,它在 n T 0 nT_0 nT0点对应的幅值为0,相当于清除了原始周期脉冲串 δ \delta δ的影响。
  3. spectral recovery
    l q ( τ ) = q 0 + 2 q 1 c o s ( 2 π τ T 0 ) l_q(\tau)=q_0+2q_1 cos(\frac{2\pi \tau}{T_0}) lq(τ)=q0+2q1cos(T02πτ)
    两个参数的经验值是1.18和-0.09。目的是为了消除前面平滑带来的畸变。
  4. 获取最后的频谱包络
    P l ( ω ) = e x p ( F [ l s ( τ ) l q ( τ ) p s ( τ ) ] ) P_l(\omega)=exp(\mathscr{F}[l_s(\tau) l_q(\tau)p_s(\tau)]) Pl(ω)=exp(F[ls(τ)lq(τ)ps(τ)])

参考文献

[1].Spectral Envelopes in Sound Analysis and Synthesis
[2].CheapTrick, a spectral envelope estimator for high-quality speech synthesis

后面的技术分享转移到微信公众号上面更新了,【欢迎扫码关注交流】

在这里插入图片描述

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值