前言
语音信号处理主要包括语音通信(语音编码),语音合成和语音识别等,前提是对语音信号进行分析。只有将语音信号分析表示成其本质特性的参数,才有可能利用这些参数进行高效的语音通信,才可能建立用于语音合成的语音库,才有可能建立用于识别的模板或知识库。根据分析的参数不同,语音信号分析可分为时域、频域倒谱域等方法。贯穿于语音信号分析全过程的是“短时分析技术”,语音是一个非稳定的过程,具有时变特性,但是在一个较短的时间范围内其特性基本保持不变,即相对稳定,可以看成一个准稳定状态,因此一般分析语音都是进行“短时分析”。将语音分成一小段一小段,每一段称为“一帧(frame)”。语音通常在10ms-30ms保持相对稳定,因而帧长一般取10ms-30ms。
语音信号数字化
语音信号数字化之前,需要先进行防混叠滤波及防工频干扰滤波。防混叠滤波指滤除高于1/2采样频率的信号成分。工频干扰指50Hz的电源干扰。
语音信号的采样和量化
语音信号是随时间变化的一维模拟信号,要用计算机分析就需要先进行采样和量化,将其变成离散的数字信号,在采样过程中,将从连续信号上连续采样的两个相邻点的时间间隔称为采样周期T,周期的倒数为采样率fs,根据采样定理,当采样频率大于信号最高频率的两倍时,采样过程中就不会丢失信息,并且可以用采样后的信号重构原始信号。在进行采样后,信号在时域上是离散的,但是在幅度上依然是连续的,因此需要进行量化,将幅度值离散化,一般有三种量化方式:零记忆量化、分组量化和序列量化。一般量化值使用二进制表示,如果用B个二进制数表示量化值,即量化字长,那么一般将幅度值划分为
2
B
2^B
2B个等分区间,量化误差定义为:
e
(
n
)
=
x
^
(
n
)
−
x
(
n
)
e(n)=\hat{x}(n)-x(n)
e(n)=x^(n)−x(n)
其中
x
^
(
n
)
\hat{x}(n)
x^(n)为量化后的采样值,
x
(
n
)
x(n)
x(n)为未量化的采样值。
用
σ
x
2
\sigma_{x}^{2}
σx2表示输入信号序列的方差,
σ
e
2
\sigma_{e}^{2}
σe2表示噪音序列的方差,则可以证明量化信噪比SNR(dB)为:
S
N
R
=
10
lg
(
σ
x
2
σ
e
2
)
=
6.02
B
+
4.77
−
20
log
(
x
max
σ
x
)
\mathrm{SNR}=10 \lg \left(\frac{\sigma_{x}^{2}}{\sigma_{e}^{2}}\right)=6.02 B+4.77-20 \log \left(\frac{x_{\max }}{\sigma_{x}}\right)
SNR=10lg(σe2σx2)=6.02B+4.77−20log(σxxmax)
假设语音信号服从拉普拉斯分布,此时信号幅度超过
4
σ
x
4\sigma_{x}
4σx的概率很小,因此可以取
x
max
=
4
σ
x
x_{\max }=4\sigma_{x}
xmax=4σx,此时SNR为:
S
N
R
=
6.02
B
−
7.2
\mathrm{SNR}=6.02 B-7.2
SNR=6.02B−7.2
表明量化器中每个比特字长对信噪比的贡献大约为6dB,研究表明语音波形的动态范围在55dB,因此量化字长因取10比特以上。
在经过采样和量化后,一般还需对语音信号进行预加重,来提升高频部分,使信号的频谱变得平坦,减少高频损失,具体不在这里详述。
短时加窗处理
经过数字化处理的语音信号是一个时变信号,为了能用传统的方法对语音信号进行分析,假设语音信号在10ms-30ms短时间内是平稳的,为了得到平稳的语音信号需要进行加窗操作。窗函数平滑地在语音信号上滑动,将语音信号分成帧,分帧可以连续,也可以交叠分段,交叠部分称为帧移,一般取窗长的一半。加窗时,不同的窗函数会影响到语音信号分析的结果。
1.窗函数
矩形窗,即
w
(
n
)
=
{
1
,
0
⩽
n
⩽
N
−
1
0
,
其他
w(n)= \begin{cases}1, & 0 \leqslant n \leqslant N-1 \\ 0, & \text { 其他 }\end{cases}
w(n)={1,0,0⩽n⩽N−1 其他
汉明窗:
w
(
n
)
=
{
0.54
−
0.46
cos
[
2
π
n
/
(
N
−
1
)
]
,
0
⩽
n
⩽
N
−
1
0
,
其他
w(n)= \begin{cases}0.54-0.46 \cos [2 \pi n /(N-1)], & 0 \leqslant n \leqslant N-1 \\ 0, & \text { 其他 }\end{cases}
w(n)={0.54−0.46cos[2πn/(N−1)],0,0⩽n⩽N−1 其他
汉宁窗:
w
(
n
)
=
{
0.5
[
1
−
cos
(
2
π
n
/
(
N
−
1
)
)
]
,
0
⩽
n
⩽
N
−
1
0
,
其他
w(n)= \begin{cases}0.5[1-\cos(2 \pi n /(N-1))], & 0 \leqslant n \leqslant N-1 \\ 0, & \text { 其他 }\end{cases}
w(n)={0.5[1−cos(2πn/(N−1))],0,0⩽n⩽N−1 其他
其中,
N
N
N为窗口长度。
2.窗函数长度
不论什么样的窗,窗的长度对能否反映语音信号的幅度变化起决定性作用。如果N特别大,即等于几个基因周期量级,则窗函数等效于很窄的低通滤波器,此时信号短时信息将缓慢变化,因而就不能充分反应波形的变化细节;反之,N很小,即等于或小于一个基因周期的量级,则信号的能量将按照信号的细微状况而很快的变化,当N太小,滤波器的通带变宽,则不能得到较为平滑的短时信息,因此选择合适的窗口长度很重要。通常在fs=10kHz的情况下,N选择在100-200量级。
语音信号的时域分析
对语音信号分析最自然、最直接的方法是以时间为自变量进行分析,语音信号典型的时域特征包括短时能量、短时平均过零率、短时自相关系数和短时平均幅度差等。
短时能量分析
语音信号的能量随时间变化较为明显,一般清音能量比浊音能量小的多,语音信号的短时能量分析很好的反映幅度变化。对于信号
{
x
(
n
)
}
\{x(n)\}
{x(n)},短时能量定义为:
E
n
=
∑
m
=
−
∞
∞
[
x
(
m
)
w
(
n
−
m
)
]
2
=
∑
m
=
−
∞
∞
x
2
(
m
)
h
(
n
−
m
)
=
x
2
(
n
)
∗
h
(
n
)
E_{n}=\sum_{m=-\infty}^{\infty}[x(m) w(n-m)]^{2}=\sum_{m=-\infty}^{\infty} x^{2}(m) h(n-m)=x^{2}(n) * h(n)
En=m=−∞∑∞[x(m)w(n−m)]2=m=−∞∑∞x2(m)h(n−m)=x2(n)∗h(n)
其中,
h
(
n
)
=
w
2
(
n
)
h(n) = w^2(n)
h(n)=w2(n),
E
n
E_n
En表示在信号的第
n
n
n个点开始加窗函数时的短时能量。可以看出短时能量可以看作语音信号的平方经过一个线性滤波器的输出。
短时能量主要有以下几方面的应用:首先可以利用短时能量区分清音和浊音;其次可以用短时能量对有声段和无声段进行判断进行判定,对声母、韵母分界,以及连字分界等。短时能量由于是对信号进行平方运算,因而认为增加了高低信号间的差异,在一些应用场景不太适合。可以采用短时平均幅度值来表示能量的变化:
M
n
=
∑
m
=
−
∞
∞
∣
x
(
m
)
∣
w
(
n
−
m
)
=
∑
m
=
n
n
+
N
−
1
∣
x
w
(
m
)
∣
M_{n}=\sum_{m=-\infty}^{\infty}|x(m)| w(n-m)=\sum_{m=n}^{n+N-1}\left|x_{w}(m)\right|
Mn=m=−∞∑∞∣x(m)∣w(n−m)=m=n∑n+N−1∣xw(m)∣
短时过零率
短时过零率是指每帧内信号通过零值的次数。对于连续语音信号,可以考察其时域波形通过时间轴的情况。对于离散信号,实质是信号采样点符号变化的次数。如果是正弦信号,它的平均过零率就是信号的频率除以两倍的采样频率,而采样频率是固定的,因此过零率在一定程度上可以反映出频率的信息。语音信号不是简单的正弦序列,所以平均过零率的表示方法就不那么确切。然而短时平均过零率仍然可以在一定程度上反映其频谱性质,可以通过短时平均过零率获得谱特性的一种粗虐估计。短时平均过零率的公式为:
Z
n
=
1
2
∑
m
=
−
∞
∞
∣
sgn
[
x
(
m
)
]
−
sgn
[
x
(
m
−
1
)
]
∣
w
(
n
−
m
)
Z_{n}=\frac{1}{2} \sum_{m=-\infty}^{\infty}|\operatorname{sgn}[x(m)]-\operatorname{sgn}[x(m-1)]| w(n-m)
Zn=21m=−∞∑∞∣sgn[x(m)]−sgn[x(m−1)]∣w(n−m)
=
1
2
∑
m
=
n
n
−
N
∣
sgn
[
x
w
(
m
)
]
−
sgn
[
x
w
(
m
−
1
)
]
∣
=\frac{1}{2} \sum_{m=n}^{n-N}\left|\operatorname{sgn}\left[x_{w}(m)\right]-\operatorname{sgn}\left[x_{w}(m-1)\right]\right|
=21m=n∑n−N∣sgn[xw(m)]−sgn[xw(m−1)]∣
式中,
sgn
[
⋅
]
\operatorname{sgn}[\cdot]
sgn[⋅]是符号函数,即
sgn
[
x
(
n
)
]
=
{
1
,
x
(
n
)
⩾
0
−
1
,
x
(
n
)
<
0
\operatorname{sgn}[x(n)]= \begin{cases}1, & x(n) \geqslant 0 \\ -1, & x(n)<0\end{cases}
sgn[x(n)]={1,−1,x(n)⩾0x(n)<0
对于浊音一般有较低的过零率,因为浊音主要处于低频阶段,而清音或白噪音有较高的过零率,这样可以用短时过零率初步判断清音和浊音。
另外可以将短时平均过零率和短时能量结合起来判断语音的起止位置,即进行端点检测。
短时平均过零率容易受到低频信号的干扰,可以设立一个门限
T
T
T,将过零率的含义修改为跨过正负门限的次数:
Z
n
=
1
2
∑
m
=
−
∞
∞
{
sgn
[
x
(
m
)
−
T
]
−
sgn
[
x
(
m
−
1
)
−
T
]
∣
+
∣
sgn
[
x
(
m
)
+
T
]
−
sgn
[
x
(
m
−
1
)
+
T
]
∣
}
w
(
n
−
m
)
\begin{aligned} Z_{n}=& \frac{1}{2} \sum_{m=-\infty}^{\infty}\{\operatorname{sgn}[x(m)-T]-\operatorname{sgn}[x(m-1)-T] \mid\\ &+|\operatorname{sgn}[x(m)+T]-\operatorname{sgn}[x(m-1)+T]|\} w(n-m) \end{aligned}
Zn=21m=−∞∑∞{sgn[x(m)−T]−sgn[x(m−1)−T]∣+∣sgn[x(m)+T]−sgn[x(m−1)+T]∣}w(n−m)
这样计算的短时平均过零率就有一定的抗干扰能力。
短时自相关函数和短时平均幅度差函数
自相关函数
相关函数用于测定两个信号在时域内的相似程度,可以分为互相关函数和自相关函数。互相关函数主要研究两个信号之间的相关性,自相关函数主要用于研究信号本身的同步性、周期性。对于离散的语音数字信号
x
(
n
)
x(n)
x(n),它的自相关函数的定义如下:
R
(
k
)
=
∑
m
=
−
∞
+
∞
x
(
m
)
x
(
m
+
k
)
R(k)=\sum_{m=-\infty}^{+\infty} x(m) x(m+k)
R(k)=m=−∞∑+∞x(m)x(m+k)
如果信号是随机或周期的,定义为:
R
(
k
)
=
lim
N
→
∞
1
2
N
+
1
∑
m
=
−
N
N
x
(
m
)
x
(
m
+
k
)
R(k)=\lim _{N \rightarrow \infty} \frac{1}{2 N+1} \sum_{m=-N}^{N} x(m) x(m+k)
R(k)=N→∞lim2N+11m=−N∑Nx(m)x(m+k)
上面两式表示一个信号与延迟
k
k
k点后的该信号本身的相似程度。它具有如下性质:
(1) 如果信号
x
(
n
)
x(n)
x(n)具有周期性,那么它的自相关函数也具有周期性,并且周期和信号
x
(
n
)
x(n)
x(n)的周期相同;
(2) 自相关函数是一个偶函数,即
R
(
k
)
=
R
(
−
k
)
R(k) = R(-k)
R(k)=R(−k);
(3) 当
k
=
0
k=0
k=0时,自相关函数具有最大值,即信号与自身相关性最大。
短时自相关函数
短时自相关函数是在自相关函数的基础上将信号加窗获得的,即
R
n
(
k
)
=
∑
m
=
−
∞
∞
x
(
m
)
w
(
n
−
m
)
x
(
m
+
k
)
w
(
n
−
(
m
+
k
)
)
=
∑
m
=
n
n
+
N
−
k
−
1
x
w
(
m
)
x
w
(
m
+
k
)
\begin{aligned} R_{n}(k) &=\sum_{m=-\infty}^{\infty} x(m) w(n-m) x(m+k) w(n-(m+k)) \\ &=\sum_{m=n}^{n+N-k-1} x_{w}(m) x_{w}(m+k) \end{aligned}
Rn(k)=m=−∞∑∞x(m)w(n−m)x(m+k)w(n−(m+k))=m=n∑n+N−k−1xw(m)xw(m+k)
式中,
n
n
n表示窗函数是从第
n
n
n点开始加入。易证明,
R
n
(
k
)
R_{n}(k)
Rn(k)是偶函数,在
k
=
0
k=0
k=0时具有最大值,并且
R
n
(
0
)
R_{n}(0)
Rn(0)等于加窗语音信号的能量。如果定义
h
k
(
n
)
=
w
(
n
)
w
(
n
−
k
)
h_{k}(n)=w(n) w(n-k)
hk(n)=w(n)w(n−k)
那么短时自相关函数可以改写为:
R
n
(
k
)
=
∑
m
=
−
∞
+
∞
x
(
m
)
x
(
m
−
k
)
h
k
(
n
−
m
)
R_{n}(k)=\sum_{m=-\infty}^{+\infty} x(m) x(m-k) h_{k}(n-m)
Rn(k)=m=−∞∑+∞x(m)x(m−k)hk(n−m)
改式表明,序列
x
(
n
)
x
(
n
−
k
)
x(n)x(n-k)
x(n)x(n−k)经过一个冲激响应为
h
k
(
n
)
h_k(n)
hk(n)的滤波器后得到自相关函数。
短时平均幅度差函数
短时自相关函数是语音信号时域分析的重要参数,但是计算短时自相关函数需要很大的计算量。为了避免乘法运算,常用短时平均幅度差函数作为特征参数,对于一个周期为
P
P
P的单纯的周期信号做差分,即
d
(
n
)
=
x
(
n
)
−
x
(
n
−
k
)
d(n) = x(n)-x(n-k)
d(n)=x(n)−x(n−k)
在
k
=
0
,
±
P
,
±
2
P
,
.
.
.
k=0, \pm P, \pm 2 P, ...
k=0,±P,±2P,...时,上式等于零,即当
k
k
k与周期信号吻合时,作为
d
(
n
)
d(n)
d(n)的短时平均幅度值总是很小,因此短时平均幅度差函数定义为:
γ
n
(
k
)
=
∑
m
=
n
n
+
N
−
k
−
1
∣
x
w
(
m
+
k
)
−
x
w
(
m
)
∣
\gamma_{n}(k)=\sum_{m=n}^{n+N-k-1}\left|x_{w}(m+k)-x_{w}(m)\right|
γn(k)=m=n∑n+N−k−1∣xw(m+k)−xw(m)∣
对于周期性的
x
(
n
)
,
γ
n
(
k
)
x(n),\gamma_{n}(k)
x(n),γn(k) 也呈现周期性。与
R
n
(
k
)
R_{n}(k)
Rn(k) 相反的是,在周期的各整数倍点上
γ
n
(
k
)
\gamma_{n}(k)
γn(k) 具有的是谷值,而不是峰值。因此在浊音语音的基音周期上,
γ
n
(
k
)
\gamma_{n}(k)
γn(k) 会急速下降, 而在清音语音时不会有明显下降。由此,短时平均幅度也可以用于基音周期的检验,而且计算上比短时自相关方法更为简单。
端点检测和语音分割
利用短时平均幅度参数 M M M和短时平均过零率 Z Z Z可以正确的判断输入语音的起点和终点。首先,根据浊音情况下的短时平均幅度参数的概率密度函数 P ( M ∣ V ) P(M \mid V) P(M∣V) 确定一个阈值参数 M H , M H M_{H},M_{H} MH,MH 值一般定得较高。当一帧输入信号 的短时平均幅度参数超过 M H M_{\mathrm{H}} MH 时,可以判定该帧语音信号不是无声,而有相当大的可能是浊 音。根据 M H M_{\mathrm{H}} MH 可判定输入语音的前后两个点 A 1 \mathrm{A}_{1} A1 和 A 2 \mathrm{A}_{2} A2 。在 A 1 \mathrm{A}_{1} A1 和 A 2 \mathrm{A}_{2} A2 之间的部分肯定是语音段,但语音的精确起点、终点还要在 A 1 A_{1} A1 之前和 A 2 A_{2} A2 之后仔细查找,如下图 所示。
为此,再设定一个较低的阈值参数
M
L
M_{\mathrm{L}}
ML,由
A
1
\mathrm{A}_{1}
A1 点向前找,当短时平均幅度由大到小减至
M
L
M_L
ML 时,可以确定点
B
1
B_{1}
B1 。类似地, 可以由
A
2
A_{2}
A2 点向后找,确定
B
2
B_{2}
B2 点。在
B
1
B_{1}
B1 和
B
2
B_{2}
B2之间仍能肯定是语音段。然后由
B
1
B_{1}
B1向前和
B
2
B_{2}
B2向后,利用短时平均过零率进行搜索。根据无声情况下短时平均过零率,设置一个参数
Z
s
Z_{s}
Zs,如果由
B
1
B_{1}
B1 向前搜索,短时平均过零率大于
Z
s
Z_{s}
Zs的 3倍,则认为这些信号仍属于语音段,直到短时平均过零率下降到低于3 倍的
Z
s
Z_{s}
Zs,这时的点
C
1
\mathrm{C}_{1}
C1就是语音的精确起点。对于终点做类似处理,可以得到确定终点
C
2
\mathrm{C}_2
C2。采用短时平均过零率的原因在于,点
B
1
\mathrm{B}_{1}
B1以前可能是一段清辅音,它的能量相当弱,依靠能量不可能将它们与无声段分开。而对于清辅音来说,它们的过零率明显高于无声段,因而能用这个参数将二者区分开来。
总结
这里主要介绍了语音信号在时域方面的特征分析,并且简单的介绍了不同特征的应用情况,后续有时间将继续更新语音信号在频域方面的特征分析情况。另外本文主要参考清华大学出版社出版的韩纪庆的《语音信号处理》第三版。