1、语音编/解码简述
?编码的过程就是对语音进行压缩,压缩应该能够保留语音的主要信息甚至是全部信息,解码就是对语音进行解压缩,恢复原始语音信号。编解码可分为有损和无损两类,有损情况下,取语音中少量冗余信息,丢掉其他不重要的信息。 ?语音编码分为波形编码、参数编码和混合编码三种,基于波形的编码分为时域编码和频域编码两种,如PCM编码,参数编码用若干参数对发生过程建模,接收端根据这些参数将接收到的信号恢复为原始语音信号,如LPC、MELP编码,在低比特率下参数编码的效果比波形编码好。不同的语音编码器在比特率、复杂度、延迟和解码后的语音感知质量等方面有差异,根据编码语音的带宽,可以分为窄带、宽带、超宽带和全通带四种带宽编码。
表1 带宽和频率关系
带宽 | 窄带 | 宽带 | 超宽带 | 全通带 |
---|
频率 | 8kHz | 16kHz | 32kHz | 48kHz |
2、声音可以进行编码的原理
人类发声时声带振动产生浊音,不振动产生清音。音调/音高反映了人耳对声音调子高低的主观感受,声音的高低主要取决于声波基频
F
0
F_0
F0?的高低。音色/音品由声音波形的谐波频谱和包络决定,音效中会用双二阶滤波器控制音色,声码器是对发声源的建模,在传输过程中还受声道、嘴唇的影响,这可以用线性预测滤波器来建模,滤波器的系数反映发声时声道等各器官的状态,在10~30ms时间内器官移动的距离有限, 所以位置基本不变化,这就使得可以使用线性预测滤波器对语音编码,而滤波器系数的个数可以做到远小于时域对应帧的采样点数,这就实现了压缩的功能。
3、语音编码的过程
分析滤波器组包括分帧、加窗STFT变换以将时域信号变换到频域。发声模型模块被称为分析阶段,通常包括LPC系数计算、基频估计,将LPC系数转换成LSF系数。量化模块对LSF系数进行向量量化,比特编码模块可以是定长编码或者基于码本的定长编码。在解码端,LSF系数转换成LPC系数,再用基频、增益和量化的LPC系数合成语音,音频编码器常用帧间互相关信息来减少比特率,然而这会导致误差逐帧传递,在丢失一个数据包后,需要多个连续的数据包,以便解码器能够精确重构源信号。比特率和误差传播影响帧间依赖性的强弱。
4、LPC编码
线性预测系数(LPC)基于发声源和滤波发声模型,非常适合元音的建模,式(10-1)的线性预测方程使用了若干先前值预测n时刻的值:
y
(
n
)
=
a
1
y
(
n
?
1
)
+
a
2
y
(
n
?
2
)
+
a
3
y
(
n
?
3
)
+
?
+
e
(
n
)
y(n)=a_1y(n-1)+a_2 y(n-2)+a_3y(n-3)+\cdots +e(n)
y(n)=a1?y(n?1)+a2?y(n?2)+a3?y(n?3)+?+e(n) 如果根据系数
a
0
,
a
1
,
.
.
.
,
a
n
?
1
a_0, a_1,...,a_{n-1}
a0?,a1?,...,an?1?能够预测出n时刻的值
y
(
n
)
y(n)
y(n),则可以传输这个观测窗口(10~25ms)内的线性预测系数,而不需要传输观测窗口内的数据到远端,在下一个观测窗内做类似的处理,重写为
y
(
n
)
=
?
a
1
y
(
n
?
1
)
?
a
2
y
(
n
?
2
)
?
a
3
y
(
n
?
3
)
+
.
.
.
+
x
(
n
)
y(n)=-a_1y(n-1)-a_2y(n-2)-a_3y(n-3)+...+x(n)
y(n)=?a1?y(n?1)?a2?y(n?2)?a3?y(n?3)+...+x(n) 上述变成了递归滤波器的形式,LPC系数对应递归滤波器系数,误差信号变成了原始信号
x
(
n
)
x(n)
x(n),能用最小化误差信号LPC系数求法的前提是误差信号频谱是平坦的,脉冲串和白噪声具有频谱平坦这一特性,人类发音最开始的源看起来就像脉冲串和白噪声,该源通过声道激励滤波后最终输出,编码时常通过预加重LPC滤波器弥补LPC不包含声门、脣辐射建模滤波器的影响。 和倒谱方法相比,LPC方法可以获得更清晰的共振峰,通过计算LPC系数可以实时跟踪共振峰情况。由于LPC建模模型是无损耗的全零点滤波,而声道中声音是有损耗的,也非全极点滤波,这会产生假共振峰。 ?LPC系数和采样率的关系如下:
- 10kHz采样率,男性LPC系数选12-14阶,女性选8-10阶。
- 20kHz采样率,男性LPC系数为24-26阶,女性为22-24阶。
5、SILK编解码
(1)SILK编码 ①采样率
- 窄带(NB):8kHz采样率
- 中频频带(MB):8kHz或者12kHz采样率
- 宽带(WB):8kHz、12kHz或者16kHz采样率
- 超宽带(SWB):8kHz/12kHz/16kHz/24kHz
②数据包生成率 以20ms为一帧进行编码,以1、2、3、4、或者5帧作为网络传输的一次有效载荷。一次有效载荷的选择是一个权衡,将5帧作为一次有效载荷,则只有一次传输IP/UDP和RIP头的开销,相对于5帧作为5次有效载荷的情况,前者节省了4次传输头的开销,这减少了传输网络贷款需求,但延迟和丢包影响均会变大。 ③比特率 比特率越高,量化噪声的影响越小。 ④丢包率 使用帧间互相关技术抗网络丢包
⑤使用FEC FEC(in-band Forward Error Correction)主要是为了对抗丢包。 ⑥编码复杂度 分为高、中、低三种,复杂度参数越高,编码的语音质量越高。 ⑦DTX 非连续传输(DTX)可以在安静和只有背景噪声语音段减少比特率,当DTX使能时,对噪声段每400ms只编码一帧发送到对端。 (2)编码器 SILK编码器处理流程为: 其中:
- 1是输入信号
- 2是高通滤波后的信号
- 3是语音检测的结果
- 4是基音和语音检测信息
- 5是噪声包络估计系数
- 6是经过分析噪声包络滤波器滤波后的输入语音信号
- 7是LPC的短时(5ms)和长时(20ms)估计
- 8是LSF量化指数
- 9是LSF系数
- 10是LSF系数量化
- 11是处理后增益值,综合噪声包络系数
- 12是LTTP状态缩放系数,是控制误差传播和预测增益这两者的权衡
- 13是量化后信号
- 14是距离编码比特流
(1)语音检测 该模块计算每帧(20ms)语音的存在概率、权重信噪比(tilt)和SNR,计算过程将输入语音分成4个子带,分别是
0
?
1
k
H
z
、
1
?
2
k
H
z
、
2
?
4
k
H
z
、
4
?
8
k
H
z
0-1kHz 、1-2kHz、2-4kHz、4-8kHz
0?1kHz、1?2kHz、2?4kHz、4?8kHz,采用了半带宽滤波器和正交镜像滤波器作为原型滤波器对每个子带进行背景噪声估计跟踪,计算每个子带的平滑SNR、子带间的平均信噪比和语音概率。 (2)高通滤波 因为绝大多数语音信号的有效信息都在60Hz以上,故为了减少干扰,使用了截止频率约在70Hz的高通滤波器先对信号进行处理。对于音乐信号,70Hz以下是存在有用信号的,使用了二阶自回归平滑(ARMA)处理。 (3)基音分析 基音(pitch)是人耳感知到的发音基频
F
0
F_0
F0?,即声带振动的频率,是人耳听到的音调高低,其在SILK编码器中的计算方法为: 基音估计首先区分是语音还是非语音,对于语音段,每帧计算4个基音周期(每5ms为一个),基音的相关性体现了信号的周期性。输入信号首先经过线性预测(LP)白化滤波器处理,滤波器的系数由LPC分析获得。低、中、高三种复杂度的LPC系数分别是8、12、16,复杂度越高,白化效果越好。白化后的信号用于寻找基音周期(也就是时域相关极大值的位置)。 (4)噪声形状分析 首先计算预滤波、噪声谱包络增益和滤波器量化系数。 (5)预滤波 使用前一节估计到的系数对信号进行去加重。 (6)预测分析 根据基音分析待编码音频是否是语音并做相应的处理。输入信号是基音分析白化处理之后的信号。对于语音段,白化处理后的信号基音仍然占主要部分。 对于非语音段,由于没有基音,分段内不存在基音周期,不需要进行LTP滤波,所以不使用白化后的信号,而是直接用Burgs方法计算高通滤波信号的LPC系数,将LPC系数转化成LSF向量,对LSF向量进行量化,然后将量化后的LSF向量转换成量化版的LPC系数。使用量化后的LPC系数对高通滤波后信号进行滤波,并计算4个子帧残差信号的能量。 (7)LSF量化 主要目的是减少比特率,代价是引起失真,比特率越高,失真越小。常用的方法是使用定比特率的量化方法,即在比特率一定的时候使量化误差最小。 (8)LTP缩放控制 给定权重矩阵
W
l
t
p
W_{ltp}
Wltp?和LTP向量b,对于给定的码表
c
b
i
cb_i
cbi?和比特率
r
i
r_i
ri?,其加权比特率-失真率是:
R
D
=
u
×
(
b
?
c
b
l
)
′
×
W
l
t
p
×
(
b
?
c
b
i
)
+
r
i
RD=u\times (b-cb_l)' \times W_{ltp} \times (b-cb_i)+r_i
RD=u×(b?cbl?)′×Wltp?×(b?cbi?)+ri? 其中,
u
u
u是比特率-失真率之间平衡的固定参数。 (9)噪声形状量比 预滤波输出的信号在噪声包络分析中先乘以补偿增益G,然后用综合包络滤波器和预测滤波器的差值获得残差信号。 (10)距离编码 SILK将语音、非语音、LTP+LPC量化、残差信号和一些瞬时增益编码进行距离编码后传输。 (11)LPC合成 由于短时互相关在LPC分析滤波器中被去掉了,这里通过下式所示的综合滤波器进行恢复。
y
(
n
)
=
e
L
P
C
(
n
)
+
∑
i
=
1
d
L
P
C
(
n
?
i
)
×
a
i
y(n)=e_{LPC(n)+\sum_{i=1}^{d_{LPC}}(n-i)\times a_i}
y(n)=eLPC(n)+∑i=1dLPC??(n?i)×ai?? 其中,y(n)是解码输出信号。 (3)解码器 解码器从接收到的距离编码比特流中获取解码参数,根据脉冲、最低有效位和符号生成激励信号,根据基音延迟、长时预测系数(LTPC)和LPC合成反馈做LTP合成,根据LPC系数和符号做LPC合成,LPC合成的信号要么是单声道,要么是混合的立体声。
6、Opus编解码
opus是第一个从窄带一直支持到全通带的语音编/解码器,其内部有一个音乐监测器判断当前音频是语音还是音乐,窄带和宽带部分用低比特率的SILK(LP层)编码,超宽带和全通带用CELT(MDCT层)编码,opus工作时可以只使用LP层或MDCT层编码,或同时使用两层编码,同时编码对音乐电台这种人声加音乐的场景较为适用,使用LP和MDCT两种变换的原因是,低频率的语音LP方法比CELP变换域方法更高效,但是对于语音或者音乐的高频部分变换域方法更有效。
(1) Opus解码 其中,CELT解码是编码的逆过程,解码过程为: CELT增加了前置滤波和后置滤波以提高周期性信号的质量,前置滤波在编码侧减少谐波分量,后置滤波在解码侧用于恢复谐波分量的初始增益且让噪声和谐波分量差不多,以使人耳感受不到。粗/细解码器用于解码频带内信号的能量,IMDCT变换后滤波解码的信号经过去加重、丢包隐藏和时钟偏移补偿后输出。 (2)Opus编码 opus由SILK编码器和CELT解码组成,当对超带宽和全通带信号编码时,SILK和CELT同时工作,编/解码流程如下: CELT编码流程
|