语音时频相关分析(二)短时相关性、周期相关和长时相关
在分析语音信号、回声消除、啸叫抑制、自适应滤波、去相关这些问题时,经常会涉及到短时相关性、周期相关和长时相关,但是有时候我们对他们之间的联系和区别以及应用场景可能会模糊不清。本文以类语音信号为例,通过原理公式、仿真实现角度解读三者之间的联系与区别。
本文和仿真代码同步发在个人博客网站 VoxWorking · 声学与音频知识平台,网站定期更新音频处理、语音处理和声学相关知识,欢迎大家浏览交流~
1. 自相关函数回顾
在之前的文章中,我们讨论过信号的自相关函数,对离散信号 x(n),自相关函数可以写成:
$$ R_{xx}(k)=E[x(n)x(n-k)] $$
工程里常用有限长度估计:
$$ \hat{R}{xx}(k)=\frac{1}{N-k}\sum{n=k}^{N-1}x(n)x(n-k) $$
如果做归一化,有:
$$ \rho_{xx}(k)=\frac{\hat{R}{xx}(k)}{\hat{R}{xx}(0)} $$
自相关函数的横轴是 lag,lag 越小,描述的是越短时间尺度上的相似;lag 越大,描述的是越长时间跨度上的相似。短时相关、周期相关、长时相关之间区别之一就是表现在不同 lag 区域里的不同结构。
2. 三类相关的概念
2.1 短时相关性
语音经过声道以后形成共振峰和谱包络,之前的文章讨论过,功率谱频谱不平坦,等价到时域就是相邻采样点之间存在相关,常见的短时模型是 AR 模型:
$$ x(n)=-\sum_{i=1}^{p}a_i x(n-i)+e(n) $$
其中 e(n) 是预测误差。如果一个 p 阶 LPC/AR 模型可以很好地预测 x(n),说明信号在 1...p 个采样点的短 lag 范围内存在明显相关性。假如在 16 kHz 采样率下,LPC滤波器p=16 只覆盖16/16000 = 1ms,也就是说LPC 白化一般处理的是短时谱包络相关。
2.2 周期相关
浊音中,声带振动近似周期性。如果基音频率是 F0,基音周期为:
$$ T_0=\frac{1}{F_0} $$ 这时语音会近似满足:
$$ x(n)\approx x(n-T_0F_s) $$
于是自相关函数会在 T0, 2T0, 3T0... 附近出现重复峰,LPC白化一般处理不了这种周期相关,通常需要长时预测、基音预测、谐波白化或其他周期去相关方法。
2.3 长时相关
语音里的相似音节、稳定元音、拖长音,房间回声或系统延迟、karaoke/AFC 闭环系统中的长延迟回授等都可能引起长时相关,简化模型是: $$ y(n)=x(n)+\alpha x(n-D)+u(n) $$
其中 D 是长延迟。如果 D=50 ms,Fs=16 kHz,则:
$$ D=0.05\times16000=800\text{ samples} $$
这时自相关或互相关函数容易在 k≈800 附近出现峰值,和短时相关不同,短时相关可能只看 1-2 ms,而长时相关可能在 50 ms、100 ms 甚至更远。
3. Python仿真:三种相关的自相关结构
在仿真中我们合成了三类类语音信号:(1)有色谱包络,没有明显稳定基音,主要用于观察短时 AR 相关。(2)有基音周期和谐波结构,主要用于观察周期相关。(3)在类语音信号上叠加 50 ms 延迟,主要用于观察长时相关。
图1:(1)有色谱包络信号(2)周期/谐波信号(3)在周期/谐波信号再叠加自身50 ms 延迟信号
把三段信号分别计算归一化自相关,可以得到下面的结果图:
图2:自相关图(1)短时相关(2)周期相关(3)长时相关
从图中可以看到:**短时 AR 相关主要集中在 0 ms 附近,离开零点以后很快衰减;周期相关会在多个基音周期处出现一串重复峰;长时相关会在某个远离零点的 lag 附近出现额外峰值。**同一个信号的自相关函数,如果关注的lag范围不同,看出的相关结构也不同:
4. 小结
**短时相关、周期相关、长时相关,本质上都是自相关或互相关函数里的结构;区别在于它们出现在不同 lag 尺度,并对应不同的频域现象和处理方法。**短时相关对应谱包络,LPC/AR白化比较擅长处理。周期相关对应基音周期和谐波梳状谱,LPC 白化不一定充分,需要考虑基音/谐波相关。长时相关对应远端 lag 的相似性,在闭环 AFC、回声、系统延迟问题里比较关键。