Skip to main content

Rockchip语音通话3A算法集成说明

:::info 文档信息

文档标识:RK-SM-YF-391 · 发布版本:V1.1.0 · 发布日期:2021-04-06 · 页数:19 · 语言:中文

原始文档:Rockchip_Introduction_Linux_Audio_3A_Algorithm_CN.pdf

:::

章节大纲​

  • Rockchip语音通话3A算法集成说明(P1)
    • 简介(P4)
      • 原理简要(P4)
      • 测试说明(P4)
      • 指标(P5)
        • 客观指标(P5)
        • 主观指标(P5)
    • API集成说明(P6)
      • RKAP_3A_Init()(P6)
      • RKAP_3A_Destroy()(P6)
      • RKAP_3A_Process()(P6)
      • RKAP_3A_DumpVersion()(P7)
      • demo示例(P7)
    • 参数说明(P8)
      • 基本参数(P8)
      • AEC参数(P8)
        • AEC基本参数(P8)
        • ERLE参数(P9)
      • ANR参数(P9)
      • AGC参数(P10)
      • EQ参数(P11)
        • Peak滤波器(P11)
        • 高低通滤波器(P13)
        • shelf滤波器(P14)
      • CNG参数(P16)
    • 硬件测试(P17)
      • 音频指标AP测试(P17)
      • 音频指标简易测试(P17)
      • 硬件结构(P18)
      • 密封性测试(P19)

在线预览​

若预览无法显示,请直接下载 PDF 后用本地阅读器打开。


1. 简介​

扬声器的声音多次反馈到麦克风引起的一段时间后人耳听到延迟的原音称作回声。回声的产生框图以及3A算法基本工作原理如下图。

1.1 原理简要​

在上图中,TX表示发送端,即从近端(near-end)发送数据给远端(far-end);RX表示接收,即从远端接收信号到近端。在扬声器播放的情况下,扬声器播放的远端声音通过空气传播到近端的麦克风中去,如果不对其进行回声消除(Acoustic Echo Cancellation,AEC),远端在听到近端声音的同时也能够听到自己刚刚的说话声,更恶劣的情况是,在远端也使用免持设备的时候,两端声音互相激励,容易产生啸叫。因此需要通过AEC算法,将回声进行衰减,AEC算法主要包括两个部分:AF(Adaptive Filter)和NLP(Nonlinear Process ), 其中AF表示自适应滤波器,通过模拟回声路径,计算近端信号中回声的成分;NLP表示非线性处理,经过AF处理之后,近端信号中还有残留回声,需要通过NLP算法对其进行抑制。从图中可以看出,麦克风采集到的信号,除了近端说话声音以及回声之外,还有环境噪声,因此还需要进行语音降噪(Audio Noise Reduce, ANR)去除环境噪声;在近端麦克风采集的信号中,消除回声和噪声之后,保留的有用声音增益较低,因此引入自动增益控制算法(Audio Gain Control, AGC)对有用信号进行增益;最后,使用EQ(Equalizer)和CNG(Comfort Noise Generation)增加声音的舒适度,发送到远端。

1.2 测试说明​

从1.1节的描述中,可以知道,在双端通话的时候,有以下三种情况:

近端说话,远端不说话

在这种情况下,系统处于近端单讲状态,远端没有说话(近端扬声器没有声音),那么也就不存在回声,此时实际相当于麦克风采集到的只有近端声音和噪声,相当于自适应滤波器不工作。

近端不说话,远端说话

在这种情况下,系统处于远端单讲状态,远端声音通过近端扬声器播放,再被麦克风采集回去(麦克风输入包含回声和噪声),该状态下自适应滤波器在一定时间的收敛之后达到稳定状态。

近端和远端同时说话

在这种情况下,系统处于双讲状态,该状态下自适应滤波器容易发散,导致回声消除力度减小。因此,在测试回声消除效果的时候,需要以上三个情况同时测试。

1.3 指标​

1.3.1 客观指标​

ITU G.168中提到,回声损耗(Echo Return Loss,ERL):从回声抵消器的接收口至发送口信号的衰减。指在回声通道中(近端)的损耗,即远端出来的声音经过回声路径再到麦克输入的衰减。

回声损耗增强(Echo Return Loss Enhancement,ERLE):当回声信号通过回声抵消器的发送通道传送时的衰减。

使用ERLE来衡量回声消除的效果,可以看作是在一段时间内实现回声衰减的平均值。ERLE值越大,说明效果越好,并且可以从时间上记录该值来统计收敛时间:

其中,为近端信号,为误差信号,即为输出信号。

1.3.2 主观指标​

ITU-TP.800和P.830定义MOS分(Mean Opinion Score)的主观测试方法:由不同的人分别对原始语料和经过系统处理之后的语料进行主观感觉对比,分别打出MOS分,最后求平均值,这是一种纯主观的定性测量。ITU选取在很宽的听觉范围内,不同的年龄、性别和语言组别的相同得分,作出语音质量的评价标准。

MOS分主观意见听觉感受
4-5分优秀(excellent)很好,听的清楚,延迟小, 交流流畅
3-4分良好(good)稍差,听的清楚,延迟小, 交流欠缺顺畅,有点杂音
2-3分一般(fair)还可以,听不太清,延迟较大, 交流重复多次
1-2分差(poor)勉强,听不太清,延迟较大, 交流重复多次
1分以下很差(bad)极差,听不懂,延迟大, 交流不通畅

2. API集成说明​

2.1 RKAP_3A_Init()​

函数原型RKAP Handle RKAP 3A Init(RKAP AEC State *st, _ _ _ _ _ RKAP AEC TRANS ENUM transType); _ _ _
输入参数st结构体输入一些基本参数; transType 为TX或者RX表示当前处理流程
返回值TX或者RX处理过程的句柄
函数功能说明对3A算法进行初始化

说明: 结构体RKAP_AEC_State各参数的取值范围如下:

1 typedef struct RKAP AEC State S _ _ _ 2 { 3 /* Basic info */ 4 int swSampleRate; /*表示采样率,只支持8k或者16k;*/ 5 int swFrameLen; /* 表示帧长,只支持16ms或者20ms */ 6 const char *pathPara; /* 导入参数bin文件的路径 */ 7 } RKAP AEC State; _ _
1 2 3 4 5 6 7typedef struct RKAP AEC State S _ _ _ { /* Basic info */ int swSampleRate; /*表示采样率,只支持8k或者16k;*/ int swFrameLen; /* 表示帧长,只支持16ms或者20ms */ const char *pathPara; /* 导入参数bin文件的路径 */ } RKAP AEC State; _ _

2.2 RKAP_3A_Destroy()​

函数原型void RKAP 3A Destroy(RKAP Handle handle); _ _ _
输入参数句柄
返回值无
功能说明反初始化

2.3 RKAP_3A_Process()​

函数原型int RKAP 3A Process(RKAP Handle handle, short *pfSigIn, _ _ _ short *pfSigRef, short *pfSigOut);
输入参数handle表示初始化的TX或者RX句柄; pfSigIn表示近端信号; pfSigRef表示远端信号,也叫参考信号; pfSigOut表示输出信号
返回值0表示正确返回,其余表示错误返回
功能说明3A算法处理 注意:一般TX和RX是共存的,因此需要分别初始化并处理

2.4 RKAP_3A_DumpVersion()​

函数原型void RKAP 3A DumpVersion(void); _ _
输入参数无
返回值无
功能说明打印当前使用算法库版本号

2.5 demo示例​

参考external/rkmedia/examples/rkmedia_audio_test.c

3. 参数说明​

以下带TX标识的表示TX流程调参,RX同理。涉及到的调参模块比较多,因此使用Windows工具RKAP_3A_Para_Tool对相关参数进行保存。

3.1 基本参数​

参数名称Index取值范围默认参数描述
SampleRate08k或16k无采样率
Mic Num _51~81麦克风的个数
Speaker Num _61~21回采通道数
Linear Gain7-90~90 (dB)0对TX输入信号进行线性增益,单位dB

工具界面如下图:

3.2 AEC参数​

3.2.1 AEC基本参数​

参数名称Index取值范 围默认 值描述
AEC Enabled100或11回声消除使能:0-off;1-on
AEC Delay Enabled110或10自动延时估计使能(一般软件回采的时候 使用)
Default Delay Samples120~40960在自动延时估计没有使能,mic跟ref信号 有 固定时延的情况下,该值表示时延的样本 数
AEC NLP Level130~42AEC NLP的抑制程度,0-4抑制力度逐渐 加大

说明:AEC NLP Level为非线性处理对残留回声的抑制力度,其中:Level 0表示关闭NLP模块,即只对回声做自适应滤波处理,该情况适用于近端信号和远端信号为线性关系的场景中;

Level 1表示轻力度抑制残留回声,适用于喇叭质量较高,腔体密封性好,整机震动引入的非线性不多,结构较好的场景;

Level 2表示中等力度抑制残留回声,该情况适用于喇叭、腔体以及结构等基本符合要求,但是线性度不够的情况;

Level 3表示最高力度抑制回声,该情况适用于喇叭廉价,腔体情况糟糕,音频指标较差的场景,使用Level 3能够消除回声,但是容易产生过削、切音等情况,对语音理解产生影响。

工具界面如下图:

3.2.2 ERLE参数​

参数名称Index取值范 围默认 值描述
ERLE Enabled4500或10ERLE压制使能
ERLE Smooth4510~10.92ERLE压制平滑系数
ERLE Thd4520~10.05ERLE压制门限值,低于门限值进行ERLE压制
ERLE Con Thd4531~201ERLE门限触发帧数,连续N帧高于ERLE门限 值,则触发

3.3 ANR参数​

参数名称Index取值范围默认值描述
TX ANR Enabled1200或11TX降噪使能:0-off;1-on
TX ANR Gmin121-50~-5 (dB)-20Gmin表示噪声门限值, 即不存在语音时候的噪声能量值;
RX ANR Enabled1250或11RX降噪使能:0-off;1-on
RX ANR Gmin126-50~-5 (dB)-20同TX ANR Gmin

说明:Gmin取值越小,噪声消的越干净,但是同时,能量较小的语音可能被过消。

工具界面如下图:

3.4 AGC参数​

参数名称Index取值范围描述
TX AGC Enabled1300或1TX AGC使能:0-off;1-on
TX AGC Limiter Enabled1310或1TX AGC限幅器使能:0-off;1-on
TX AGC Target Level1320~90(dB)当限幅器使能的时候,target level表示要限幅的 增益的(-1)倍
TX AGC Add Gain133-90~90(dB)AGC增益幅度
RX AGC Enabled1500或1RX AGC使能:0-off;1-on
RX AGC Limiter Enabled1510或1RX AGC限幅器使能:0-off;1-on
RX AGC Target Level1520~30(dB)当限幅器使能的时候,target level表示要限幅的 增益的(-1)倍
RX AGC Add Gain153-90~90(dB)AGC增益幅度

下图为target Level为 3dB,RX AGC Add Gain为10dB时候的输入输出对比图:工具界面如下图:

3.5 EQ参数​

3.5.1 Peak滤波器​

本算法中的EQ(Equalizer)为简单的3段EQ,旨在3A算法处理之后的语音舒适度。具体参数如下表格:

参数名称Index取值范围描述
TX EQ Enabled1600或1TX EQ使能:0-off;1-on
TX EQ Freq0170(0,Fs/2)第1段EQ的中心频率
TX EQ Gain0171[-12,12] (dB)第1段EQ的增益,单位:dB
TX EQ Q0172(0,10]第1段EQ的品质因子
TX EQ Freq1180(0,Fs/2)第2段EQ的中心频率
TX EQ Gain1181[-12,12] (dB)第2段EQ的增益,单位:dB
TX EQ Q1182(0,10]第2段EQ的品质因子
TX EQ Freq2190(0,Fs/2)第3段EQ的中心频率
TX EQ Gain2191[-12,12] (dB)第3段EQ的增益,单位:dB
TX EQ Q2192(0,10]第3段EQ的品质因子
RX EQ Enabled3000或1RX EQ使能:0-off;1-on
RX EQ Freq0310(0,Fs/2)第1段EQ的中心频率
RX EQ Gain0311[-12,12] (dB)第1段EQ的增益,单位:dB
RX EQ Q0312(0,10]第1段EQ的品质因子
RX EQ Freq1320(0,Fs/2)第2段EQ的中心频率
RX EQ Gain1321[-12,12] (dB)第2段EQ的增益,单位:dB
RX EQ Q1322(0,10]第2段EQ的品质因子
RX EQ Freq2330(0,Fs/2)第3段EQ的中心频率
RX EQ Gain2331[-12,12] (dB)第3段EQ的增益,单位:dB
RX EQ Q2332(0,10]第3段EQ的品质因子

工具界面如下图:

下图为Freq = 4000Hz,Gain = 2dB,Q分别为2.5和 6的PEAK滤波器示例:

3.5.2 高低通滤波器​

参数名称Index取值范围描述
TX HPF Fc2000~Fs/2TX高通滤波器截止频率
TX LPF Fc2010~Fs/2TX低通滤波器截止频率
RX HPF Fc3400~Fs/2RX高通滤波器截止频率
RX LPF Fc3410~Fs/2RX低通滤波器截止频率

说明:Fc设置为0或者Fs/2的时候,表示该滤波器不使能。

下图为截止频率2000Hz的低通滤波器示例:下图为截至频率为200hz的高通滤波器示例:

3.5.3 shelf滤波器​

shelf滤波器是指对低频(low shelf)或者高频(high shelf)进行整体的增益抬升或者降低,适用于低频或者高频频响不足的情况。

参数表格如下:

参数名称Index取值范围描述
TX HSF Fc2020~Fs/2TX high shelf滤波器截止频率
TX HSF Gain203-12~12TX high shelf滤波器增益
TX LSF Fc2040~Fs/2TX low shelf滤波器截止频率
TX LSF Gain203-12~12TX low shelf滤波器增益
RX HSF Fc3420~Fs/2RX high shelf滤波器截止频率
RX HSF Gain343-12~12RX high shelf滤波器增益
RX LSF Fc3440~Fs/2RX low shelf滤波器截止频率
RX LSF Gain345-12~12RX low shelf滤波器增益

说明:Fc设置为0或者Fs/2的时候,表示该滤波器不使能。

下图为截至频率为300hz,增益分别为±12dB的highshelf滤波器示例:

下图为截至频率为1000hz,增益分别为±12dB的highshelf滤波器示例:

3.6 CNG参数​

参数名称Index取值范围描述
TX CNG Enabled4400或1TX CNG使能:0-off;1-on
TX CNG Ratio441施加舒适噪声比例
TX CNG Amp442施加舒适噪声幅度

4. 硬件测试​

4.1 音频指标AP测试​

测试环境:音频分析仪器(AP)测试语料:扫频信号测试目的:测试音频指标,指标越差,调参效果越差测试方法:使用AP灌入信号源,回采信号出测试电信号指标判定标准:远端信号(回采信号):THD+N < 5%

特别说明: 若使用RK809或者RK817, 推荐使用hpout+PA,不推荐使用SPK。如果一定要用请注意以下两点:

(1)RK809和RK817 codec的classD主要是按照8ohm设计,因此使用其他规格阻抗,会导致音频指标恶化。

(2) RK809和RK817 codec的classD输出回采不能够使用单端,因此,如果使用RK809或者RK817请使用外置codec回采,或者使用pdm mic。否则音频指标不能达到调参要求。

4.2 音频指标简易测试​

该测试作为没有音频分析仪时的替代测试方案

测试环境:样机,安静环境测试预料:扫频信号测试目的:测试音频指标测试方法:使用样机自播自录,命令如下,

1 arecord -D hw:0,0 -c 2 -f S16 LE -r 16000 /tmp/sweep.wav _ 2 sox -b 16 -r 16000 -c 2 -n -t alsa hw:0,0 synth 20 sine 20:8000 // 采样率 16kHz,播放20Hz~8kHz扫频
1 2arecord -D hw:0,0 -c 2 -f S16 LE -r 16000 /tmp/sweep.wav _ sox -b 16 -r 16000 -c 2 -n -t alsa hw:0,0 synth 20 sine 20:8000 // 采样率 16kHz,播放20Hz~8kHz扫频

或

1 arecord -D hw:0,0 -c 2 -f S16 LE -r 8000 /tmp/sweep.wav _ 2 sox -b 16 -r 8000 -c 2 -n -t alsa hw:0,0 synth 20 sine 20:4000 //采样率8kHz,播 放20Hz~4kHz扫频
1 2arecord -D hw:0,0 -c 2 -f S16 LE -r 8000 /tmp/sweep.wav _ sox -b 16 -r 8000 -c 2 -n -t alsa hw:0,0 synth 20 sine 20:4000 //采样率8kHz,播 放20Hz~4kHz扫频

将sweep.wav pull出来,分别观察回采信号和mic信号的扫频谐波以及底噪。如果音频指标较差,可能会导致滤波器收敛时间慢,漏回声,过削等各种问题。下图为扫频信号不符合调参预期的示例:

说明:在使RK809/RK817 Codec播放和录音之前,需要根据硬件连接,确认打开播放和录音的通路。

配置相应的播放通路:

1 amixer -c 0 sset 'Playback Path' SPK // 打开Codec ClassD通路
1amixer -c 0 sset 'Playback Path' SPK // 打开Codec ClassD通路

或者:

1 amixer -c 0 sset 'Playback Path' HP // 打开Codec HPOUT通路
1amixer -c 0 sset 'Playback Path' HP // 打开Codec HPOUT通路

配置录音通路:

1 amixer -c 0 sset 'Capture MIC Path' 'Main Mic' // 打开Codec MIC通路
1amixer -c 0 sset 'Capture MIC Path' 'Main Mic' // 打开Codec MIC通路

4.3 硬件结构​

麦克风和扬声器无遮挡,扬声器不对着墙体桌面等物体;麦克风和扬声器不要在同一个面板上,距离尽量远,不产生共振;麦克风的拾音孔不能正对着扬声器,需要用隔音棉之类的材料隔开。

4.4 密封性测试​

测试环境:消音室测试语料:0dBFS白噪声测试目的:通过测试,保证MIC器件拾音孔的密封性测试方法:把测试音源放置在MIC外接平面的法线方向50cm处,用橡皮泥或者其他东西堵住MIC的进音孔,用高保真播放设备播放白噪声信号,音量级为94dBA,待测样机进行录音,测量每一个MIC声道堵住音孔的RMS大小,比对堵住和不堵住音孔的功率差判定标准:堵住和不堵住音孔的RMS差20dB以上