使用AMR编解码器生成VAD的标签

目录

1. AMR编解码器简介

2. AMR语音帧格式

3. VAD标签


VAD的标签一般通过语音编解码器来生成,因为这些编解码器已经在实际使用中得到验证了,因此具有较强的代表性。一般用作VAD性能比较的编解码有AMR和G.729B,很多论文中也以它们作为Benchmark。最近刚好有好几个人在问怎么生成VAD的标签,这里我做个简单的实现供大家参考。

1. AMR编解码器简介

这里简单介绍下AMR编解码器,AMR编解码器有窄带和宽带两种模式。其中窄带编码模式有8种,编码速率从4.75到12.2kbps。在窄带编码模式中采样率为8000Hz,每一帧为20ms,包含160个采样点。在宽带编码模式下编码模式有9种,编码速率从6.6到23.85kbps。宽带编码模式中,采样率为16000Hz, 每一帧仍是20ms但是包含320个采样点。我们以窄带10.2kbps编码速率作为生成VAD label的工作模式,在这种编码速率下一帧有204个bit。

2. AMR语音帧格式

首先AMR编码后的文件格式如下图所示,包含一个文件头和语音帧数据:

使用AMR编解码器生成VAD的标签

如果是单通道AMR窄带模式的话,文件头为ASCII的字符串"#!AMR\n" ,下面介绍语音帧的格式,每一个语音帧数据首先包含一个八位字节帧头,格式如下

使用AMR编解码器生成VAD的标签

第一位F,如果为1则表示这一帧后面还有其他帧,如果为0表示当前帧为最后一帧;FT表示这是AMR或者AMR-WB的编码模式,或者是舒适噪声(标记为SID),具体值见下表(VoIP编解码器为了节省带宽,编码过程中当检测到当前帧为静音帧时会不编码这一帧而使用特殊的标记,解码时当前帧产生一帧舒适噪声);

Frame Type
 
 

Mode Indication

Mode Request

Frame content (AMR  mode, comfort noise, or other)

0

0

0

AMR 4,75 kbit/s

1

1

1

AMR 5,15 kbit/s

2

2

2

AMR 5,90 kbit/s

3

3

3

AMR 6,70 kbit/s (PDC-EFR)

4

4

4

AMR 7,40 kbit/s (TDMA-EFR)

5

5

5

AMR 7,95 kbit/s

6

6

6

AMR 10,2 kbit/s

7

7

7

AMR 12,2 kbit/s (GSM-EFR)

8

-

-

AMR SID

9

-

-

GSM-EFR SID

10

-

-

TDMA-EFR SID  

11

-

-

PDC-EFR SID

12-14

-

-

For future use

15

-

-

No Data (No transmission/No reception)

Q表示语音质量,如果其为0则表示当前帧被严重损害,需要根据FT的内容进行相应的处理。前面说语音帧帧头为8个bit但这里只有6个bit, 另外两个是为0的padding位。

知道了帧格式后面的事情就好办了,只要按格式读取语音帧头的FT的值就能确定当前值是不是静音部分了。

3. VAD标签

我们看下AMR的VAD检测结果,发现在编码刚开始的时候不是很准确存在几个帧误判,这是因为VAD算法初始参数是认为设定的,后面根据语音本身调制参数后算法逐渐收敛。

使用AMR编解码器生成VAD的标签

最后贴一下AMR的VAD检测算法,具体细节有兴趣的可以自己去了解

 

使用AMR编解码器生成VAD的标签

 关注公众号语音算法组,在公众号菜单栏点击More->Code可以获取单通道8000Hz带有VAD的AMR编解码器