XVF3610 音频流水线
在产品描述中,对于音频处理流水线有一些基本的介绍。流水线通过一系列算法,对声景中的语音信号进行 提取和处理。音频的处理会分为两个不同的流水线:一个针对ASR优化,另一个针对语音通讯优化。两个音频最终会通过两个不同的通道输出。
灵活的音频信号路由基础设施和一系列数字输入和输出使XVF3610能够被集成到广泛的系统配置中,这些配置可以在启动时和运行期间通过一组控制寄存器进行配置。
信号流与处理
关于设备输入和输出以及XVF3610音频处理流水线的模块排列如下所示:

图9 XVF3610 输入输出以及音频信号路由
支持的区块如下:
- 信号复用器 - 这些允许信号的动态选择(切换)。可用信号取决于多路复用器的位置。
- 增益块 - 这些是应用可变位移位(左或右)的块,并且在左移位的情况下,在溢出的情况下饱和。因为它们是移位器,所以应用的增益是2的幂。
- 过滤块 - 滤波器模块由两个级联的双二阶单元组成。每级的五个系数中的每一个都通过控制实用程序直接操纵。
以下部分列出了控制音频多路复用(MUX)模块以及源和目标索引号的命令。
XVF3610提供灵活的路由控制方案,通过管道本身配置信号路由,并在以下方面提供灵活性:
- 通过监控原始麦克风信号对麦克风进行硬件测试
- 通过在原始麦克风输入端过滤已知噪声源来改善流水线性能。
- 开发过程中参考信号和MIC信号的监控和调试。
- 补偿参考信号中的增益偏移。
- 支持特定 的音频连接要求,例如从I2S获取参考信号。
- 在扬声器通过I2S连接到XVF3610下游的情况下,插入音频滤波。
信号的路由与缩放
路由命令集
以下控件用于配置信号控制块:
| 命令 | 类型 | Args 参数 | 定义 |
|---|---|---|---|
| SET_IO_MAP | unint8 | 2 | 配置两个输入开关和四个输出开关。 有关有效的参数选项,请参阅目标和源索引表。 arg1<目标索引> arg2<源索引> |
| SET_OUTPUT_SHIFT | int32 | 2 | 设置每个多路复用模块的增益。选择MUX块目标索引,然后是偏移(+ve表示左移,-ve表示右移) arg1<目标索引> arg2<移位值> |
| SET_OUTPUT_SHIFT | uint32 | 8 x 3 | 获得所有目标的所有IO_MAP和OUTPUT_SHIFT值 |
| SET_MIC_SHIFT_SATURATE GET_MIC_SHIFT_SATURATE | uint32 | 2 | 在进入流水线之前设置原始麦克风信号的增益 arg1<移位值(左移)> arg2<设置为1使其饱和 > |
目的地
可用于映射的目的地参考如下:
| Channel (Destination) | Value | Definition |
|---|---|---|
| USB_FROM_DEVICE_0 | 0 | USB channel 0 output from device to host |
| USB_FROM_DEVICE_1 | 1 | USB channel 1 output from device to host |
| I2S_FROM_DEVICE_0 | 2 | I2S channel 0 output from device |
| I2S_FROM_DEVICE_1 | 3 | I2S channel 1 output from device |
| REF_TO_PIPELINE_0 | 4 | reference channel 0 going into the pipeline |
| REF_TO_PIPELINE_1 | 5 | reference channel 1 going into the pipeline |
| MIC_TO_PIPELINE_0 | 6 | microphone channel 0 going into the pipeline |
| MIC_TO_PIPELINE_1 | 7 | microphone channel 1 going into the pipeline |
音频源
可映射到目的地的音频源参考表如下:
| Channel (Source) | Value | Definition |
|---|---|---|
| MUTE | 0 | Zeros are sent to the destination if this value is selected, which mutes the channel |
| USB_TO_DEVICE _AVERAGE | 1 | Average of USB input from host to device. |
| USB_TO_DEVICE _DIFFERENCE | 2 | Half of the difference between ch0 and ch1 of USB input from host to device. |
| I2S_TO_DEVICE AVERAGE | 3 | Average of I2S input to device. |
| I2S_TO_DEVICE _DIFFERENCE | 4 | Half of the difference between ch0 and ch1 of I2S input to device. |
| PIPELINE_OUT_0 | 5 | Pipeline output channel 0 |
| PIPELINE_OUT_1 | 6 | Pipeline output channel 1 |
| USB_TO_DEVICE_0 | 7 | USB input channel 0 from host to device |
| USB_TO_DEVICE_1 | 8 | USB input channel 1 from host to device |
| I2S_TO_DEVICE_0 | 9 | I2S input channel 0 to device |
| I2S_TO_DEVICE_1 | 10 | I2S input channel 1 to device |
| MIC_IN_0 | 11 | Ch0 Microphone input seen by the pipeline |
| MIC_IN_1 | 12 | Ch1 Microphone input seen by the pipeline |
| PACKED_PIPELINE_OUTPUT | 13 | pack 16kHz pipeline output on 48kHz output |
| PACKED_MIC | 14 | pack 16kHz mic input to pipeline on 48kHz output |
| PACKED_REF | 15 | pack 16kHz reference input to pipeline on 48kHz output |
| PACKED_ALL | 16 | pack 1 channel of 16kHz mic, reference input and pipeline. When this option is used, the other channel of the same output also gets PACKED_ALL set in its IO map. |
| PACKED_ALL_INPUT_USB | 17 | pack 16kHz mic and reference into a 48kHz USB input |
| PACKED_ALL_INPUT_I2S | 18 | pack 16kHz mic and reference into a 48kHz I2S input |
MIC_IN_0和MIC_IN_1的信号是16kHz的。如果它们被路由到48kHz的输出,它们将被重复采样3次。并且不会应用抗混叠滤波器。
路由命令示例
下面的章节说明了如何使用IO映射和缩放的命令。
使用SET_IO_MAP命令,用户可以选择被路由到以下3个目的地的源。
-
从设备到主机的USB输出
-
设备的I2S输出
-
进入设备的参考信号
例如,要将设备的I2S通道0的输入(value=9,如音频源参考表所示)路由到设备的USB通道1输出(value=1,如目的地参考表所示),命令行是:
vfctrl_usb SET_IO_MAP 1 9
其中第一个参数 "1 "指的是目的地参考表中的USB_FROM_DEVICE_1,第二个参数 "9 "指的是音频源参考表中的I2S_TO_DEVICE_0。
信号路由对于麦克风或参考信号连接的硬件调试也很 有用。作为一个例子,下面的命令将USB参考通道0从主机路由到XVF3610的USB音频输出通道0:
vfctrl_usb SET_IO_MAP 0 7
形成参考信号输入XVF3610及其音频输出的回送。通过回放信号,例如作为主机输出的参考信号的正弦波,用户可以通过XVF3610的音频输出来验证信号是否被XVF3610正确接收。如果主机录制的音频信号与参考输出不同,用户可以检查是硬件连接故障还是数据格式错误。
信号路由也可用于调试麦克风信号:
vfctrl_usb SET_IO_MAP 1 12
上述命令将麦克风通道1作为直接信号发送到XVF3610的USB音频输出。可以通过记录XVF3610的音频输出来验证麦克风信号。
对于XVF3610-UA,其I2S主机接口可用于发送音频源通道表中所示的不同类型的信号,同时具有已处理音频的USB输出。例如,以下命令配置为以16kHz采样频率发送麦克风、参考和流水线输出通道,打包至48kHz I2S输出:
vfctrl_usb SET_IO_MAP 2 16
vfctrl_usb SET_IO_MAP 3 16
通过使用配置了I2S从机接口的树莓派,用户可以捕获麦克风、基准电压源和流水线输出的同步信号。观察这些信号对于调试非常有用。通过使用发布包中提供的Python脚本,可以将打包信号解包为MIC、参考和流水线信号,每个信号中有2个通道。
SET_OUTPUT_SHIFT 命令可以可用于指定应用于给定目标的所有样本的位偏移。例如,指定:
vfctrl_usb SET_OUTPUT_SHIFT 2 4
在I2S通道0的设备输出的所有样本上应用4比特的左移,作为 2^4^=16x的增益。负移位值将意味着衰减的右移位。
GET_IO_MAP_AND_SHIFT命令显示所有目标的IO映射和位移值。
在没有明确设置任何映射或移位的情况下执行GET_IO_MAP_AND_SHIFT命令,显示固件中配置的默认映射。
vfctrl_usb GET_IO_MAP_AND_SHIFT
GET_IO_MAP_AND_SHIFT:
target: USB_FROM_DEVICE_0, source: PIPELINE_OUT_0 output shift: NONE
target: USB_FROM_DEVICE_1, source: PIPELINE_OUT_1 output shift: NONE
target: I2S_FROM_DEVICE_0, source: PIPELINE_OUT_0 output shift: NONE
target: I2S_FROM_DEVICE_1, source: FAR_END_IN_0 output shift: NONE
target: REF_TO_PIPELINE_0, source: USB_TO_DEVICE_0 output shift: NONE
target: REF_TO_PIPELINE_1, source: USB_TO_DEVICE_1 output shift: NONE
通用滤波器
这块的内容就不是很明白,主要是关于滤波器系数是什么,以及调试了有什么作用,不是特别理解。
通用滤波器块每个都由两个级联的双通道滤波器组成,允许配置为带通、陷波、低通、高通滤波器等。默认情况下,所有的滤波器都是禁用的(旁路)。
注意:最多有两个输出滤波器可以同时启用。例如,两个通道的USB滤波或一个I2S和一个USB输出。超出这个范围可能会导致音频突变。
设备对输入滤波器(麦克风和参考滤波器)没有限制。
滤波器系数以a1、a2、b0、b1、b2的浮点格式直接从滤波器设计工具(如BiQuadDesigner)接受。
提供了对原始32位整数写/读的支持,可直接访问内部表示。当使用原始控制方法时,应先将系数转换为Q28.4格式,a1和a2需要被否 定。更多信息见配置参数。
输入到管道的滤波器的采样率总是16kHz,而输出的滤波器与选择的速率相匹配,可能是16kHz或48kHz,取决于系统配置。确保滤波器系数的设计有正确的速率。
请注意,尽管潜在的数字溢出被当作饱和处理,但设计者有责任确保所选择的系数不会发生饱和,以避免滤波器的非线性行为。这个实现提供了三个比特的净空(Q28.4),这对大多数滤波器来说是足够的。
这个系数在启动时被清空为零。
下表描述了用于配置滤波器的命令。
| Command | Type | Arguments | Definition |
|---|---|---|---|
| SET _FILTER_INDEX | uint8 | 1 | Used as an index to point to which filter block that will be manipulated. output_filter_map_t below defines the filter block IDs. |
| GET _FILTER_INDEX | uint8 | 1 | Retrieve the current filter index. |
| SET_FITER _BYPASS | uint8 | 1 | Bypass (1) means filter pointed to by the index is not enabled (default), 0 means enable the filter. |
| GET_FILTER _BYPASS | uint8 | 1 | Retrieve the bypass status. |
| SET _FILTER_COEFF | float | 10 (5x2) | Set 5 x 2 biquad coefficients in a floating-point format in the order a1, a2, b0, b1, b2. Coefficient a0 is assumed to be 1.0. If it is not, divide all coefficients by a0. |
| GET _FILTER_COEFF | float | 10 (5x2) | Retrieve the floating-point representation of the coefficients in the order a1, a2, b0, b1, b2. |
| SET_FILTER _COEFF_RAW | int32 | 10 (5x2) | Set 5 x 2 biquad coefficients in Q28.4 format for the filter pointed to by the index. See note above in Filter Blocks section about the format. |
| GET_FILTER _COEFF_RAW | int32 | 10 (5x2) | Retrieve the Q28.4 representation of the coefficients. See note above in Filter Blocks section about the format. |
滤波器输出索引可用于滤波器设置命令(output_filter_map_t):
| Channel | Value | Definition |
|---|---|---|
| FILTER_USB _FROM_DEVICE_0 | 0 | USB channel 0 from device to host (Left) |
| FILTER_USB _FROM_DEVICE_1 | 1 | USB channel 1 from device to host (Right) |
| FILTER_I2S _I2S_FROM_DEVICE_0 | 2 | I2S channel 0 from device (Left) |
| FILTER_I2S _I2S_FROM_DEVICE_1 | 3 | I2S channel 1 output from device (Right) |
| FILTER_MIC _TO_PIPELINE_0 | 4 | 16kHz mic channel 0 going into the pipeline |
| FILTER_MIC _TO_PIPELINE_1 | 5 | 16kHz mic channel 1 going into the pipeline |
| FILTER_REF _TO_PIPELINE_1 | 6 | 16kHz reference channel 0 going into the pipeline (Left) |
| FILTER_REF _TO_PIPELINE_1 | 7 | 16kHz reference channel 1 going into the pipeline (Right) |
虽然设置索引或旁路控制总是安全的,但也存在很小的可能性,即系数可能在滤波操作的中途被部分更新。由于这个原因,在更新之后,滤波器的状态也会被清除,以确保减少任何不稳定的可能性。这取决于用户是否能确保所提供的系数导致稳定的过滤器配置。
PDM麦克风接口
PDM麦克风接口将来自麦克风的脉冲密度调制(PDM)音频输入转换为脉冲编码调制(PCM)格式,以便进行进一步处理。PDM麦克风接口由连接两个麦克风的物理引脚和一系列滤波器组成,可产生适合远场语音处理的16kHz PCM双通道输出流。有关PDM引脚的物 理和电气详情,请参阅数据手册。
该处理包括四个过滤阶段:
- 由8个FIR滤波器抽取至384kHz
- 由4个FIR滤波器抽取至96kHz
- 由6个FIR滤波器抽取至16kHz
- 隔直单极IIR滤波器
PDM麦克风接口采用32位内部处理,可提供极低的失真率,其规格超过-110dB THD+N,动态范围为140dB。
FIR滤波器的频率响应具有至少70dB的阻带衰减,通带纹波小于0.9dB,通带为6.8kHz。从引脚到XVF3610音频流水线输入的总群延迟为1.125毫秒。
通带纹波是指在滤波器的频响中通带的最大幅值和最小幅值的差,正常的滤波器一般通带纹波小于1dB
通带纹波会导致通带内的信号幅值大小有变化,对一些要求高的系统,纹波越小越好
滤波器有部分频率是通,部分是阻。但是阻的部分,未必能够全部阻隔,而只有部分衰减。例如这里是至少70dB
在PDM麦克风接口管道的末端放置一个隔直滤波器,并将其调谐至5Hz-6dB点,以消除PDM输入中存在的任何直流偏移。
来自PDM麦克风接口的输出可以可选地被移位或衰减,从而提供“2的幂”的增益控制。在增益大于1的情况下,可以应用饱和。
默认情况下,增益模块偏移设置为零(增益2^0=1),这是正常使用的建议设置。
PDM接口控制参数如下:
| Command | Type | Value | Description |
|---|---|---|---|
| SET_MIC_SHIFT_SATURATE | uint32 | arg1 <shift value (left shift)> arg2<saturate , enable if !=0> | Write the gain (power of 2) on the raw mic signals before entering the audio pipeline. |
| GET_MIC_SHIFT_SATURATE | uint32 | Read the gain (power of 2) on the raw mic and Saturate Enable signals before entering the audio pipeline. |
自动回音消除(AEC)
该过程使用来自产品的立体声音频作为参考信号,以对由设备和房间的声学环境引起的每个扬声器和麦克风之间的回声特性进行建模。
AEC使用四个模型来连续消除由扬声器在房间中产生的麦克风音频输入中的回声。这些模型不断适应声学环境,以适应由门的打开或关闭以及人们的走动等事件所造成的房间变化。
下面显示了两种房间大小的回声路径示意图:
复位后,或当回声路径因环境变化而改变时,AEC将重新收敛。回波损耗增强(ERLE)可用于指示AEC滤波器的收敛 程度,如下所示。
为了获得最佳的AEC稳定时间性能,扬声器的音量必须与发送到XVF3610的参考音频电平成线性比例。如果扬声器的音量改变,而参考电平没有改变相同的线性因子,则AEC将做出响应,就好像环境已经改变,使得所有回声路径都增加/减少了能量,因此将导致AEC中的稳定时间。
备选架构(在备选架构模式(ALT_ARCH)部分中描述)选择性地扩展AEC滤波器以适应高混响环境。
AEC的配置参数如下所示:
| COMMAND | TYPE | VALUE | DESCRIPTION | NOTES |
|---|---|---|---|---|
| GET_BYPASS_AEC SET_BYPASS_AEC | uint32 | [0,1] 0 = AEC bypass disabled (default) 1 = AEC bypass enabled | Get/Set AEC bypass parameter. 如果参数设置为1,则关闭AEC | A |
| SET_ADAPTATION_CONFIG_AEC GET_ADAPTATION_CONFIG_AEC | uint32 | [0, 1, 2] 0 = Auto adapt (default) 1 = Force adaptation ON 2 = Force adaptation OFF | 设置AEC自适应配置。如果AEC设置为Bypass,则设置自适应配置无效。 | B |
| GET_ERLE_CH0_AEC | float | Get AEC ERLE for channel 0 | ||
| GET_ERLE_CH1_AEC | float | Get AEC ERLE for channel 1 | C | |
| RESET_FILTER_AEC | This command resets all AEC filters. |
注意事项:
**[A]**当启用替代体系结构(ALT_ARCH)模式(默认)时,AEC Bypass状态将被覆盖,因此不应使用。get命令仍然有效。有关更多信息,请参见替代体系结构(ALT_ARCH) 部分。
**[B]**如果启用自动延迟估计,这些参数将被覆盖,因此不应使用。GET命令仍然有效。有关详细信息,请参阅“自动延迟估计和校正(ADEC)”部分。
**[C]**当ALT_ARCH模式被启用时,CH0上仅有有效的ERLE数据可用。在这种模式下,GET_ERLE_CH1_AEC将报告Nan。
AEC在AEC尾部长度中模拟的声学路径上运行。自动延迟估计和校正模块用于处理 由设备引入的麦克风和扬声器之间的延迟,例如在扬声器实际播放之前接收参考音频。
自动延迟估计与校准(ADEC)
ADEC模块会自动纠正参考音频和扬声器之间可能的延迟偏移。
回声消除是一个自适应过滤过程,它将参考音频与从麦克风接收的音频进行比较。它模拟房间的混响时间,即声音反射衰减到不明显所需的时间。这显示在下图中(红色的 "声学回声路径延迟")。
AEC所模拟的时间窗口是有限的(滤波器尾部长度),为了最大限度地提高其性能,必须确保提交给AEC的参考音频与扬声器所再现的音频时间一致。下图强调了参考音频路径延迟和音频重现路径可能有很大的不同,因此需要在两个路径中的一个插入额外的延迟,以纠正这种延迟差异。
ADEC中的功能模块如下所示:
延迟修正可应用于麦克风或参考路径,以应对参考或扬声器领先于另一个,通过切换到传声器通道或参考通道的延迟来完成。
自动延迟估计是在开机时触发的,或者在主机系统配置改变时触发。在参考音频出现并且足够大时,该过程才会开始。
延迟估计过程重新利用AEC来检测更大的延迟。在估计过程中,AEC不执行回声消除。一旦检测到延迟,并进行了延迟校正,AEC就会重新启动并根据延迟信号进行收敛。
触发估计周期的可能原因(在启用自动模式的情况下):
-
主机应用的变化导致扬声器和参考音频之间的延迟变化
-
参考音频和扬声器播放之间的巨大音量变化
-
用户设备变化,如从电视音频输出切换到通过sound bar播放音频。
ADEC功能的特点和规格如下所示:
| Name | Value | Description |
|---|---|---|
| 最大延迟校正 | ± 150ms | 可以添加到麦克风通道或参考通道的最大延迟。 |
| 估算时间 | 在参考音频具有良好的信噪比下:2-5秒 | 在这段时间内,AEC被禁用。请注意,除非有参考,并且扬声器正在播放,否则估算将不会开始。 |
配置命令显示如下:
| COMMAND | TYPE | VALUE | DESCRIPTION | NOTES |
|---|---|---|---|---|
| GET_DELAY_SAMPLES SET_DELAY_SAMPLES | uint32 | [0 .. 2399] | 改变采样率为16kHz的输入延迟的样本数。根据延迟方向,延迟被应用于参考音频或麦克风输入。这提供了+/-150mS的最大延迟。 | A |
| GET_DELAY_DIRECTION SET_DELAY_DIRECTION | uint32 | [0,1] 0 - Delay the reference input (default) 1 - Delay the microphone input | 选择输入延迟的方向,即应用于麦克风输入路径或参考音频路径。 | A |
| GET_DELAY_ESTIMATE | uint32 | [0 .. 7200] | 在采样率为16kHz的情况下,获得参考输入的延迟样本数的估计。这个值只有在延迟估计正在进行时才有效,并且被延迟缓冲区的最大长度(2400个样本)所抵消。在这个值上加上2400个样本就可以得到绝对延迟估计值。 | |
| SET_ADEC_ENABLED GET_ADEC_ENABLED | uint32 | [0, 1] 0 - ADEC disabled 1 - ADEC enabled | 启动自动延迟控制 | |
| GET_ADEC_MODE | uint32 | [0,1] 0 - Normal AEC mode 1 - delay estimation in progress | 获取延迟估计状态 | |
| SET_MANUAL_ADEC _CYCLE_TRIGGER | uint32 | 触发一个延迟估计周期。固件中的默认行为是在设备复位后第一次检测到远端参考时,触发一个延迟估计周期。无论自动延迟控制是启用还是禁用,都会这样做。要禁用这个初始延迟估计,在数据分区中设置SET_MANUAL_ADEC_CYCLE_TRIGGER=0。对于所有其他时间,如果延迟估计被禁用,可以使用SET_MANUAL_ADEC_CYCLE_TRIGGER来强制执行延迟估计周期。 | ||
| GET_AEC_PEAK_TO _AVERAGE_RATIO | float | 获取当前AEC滤波器系数的峰值与均值的比。如果这个值高于4,说明AEC有一个 "好 "的峰均比。 |
注意。
[A] 当ADEC启用时,该值将被覆盖,因此不应使用SET命令。GET命令仍然有效。
干扰消除器
干扰消除器(IC)抑制来自点源的静态噪声,如抽油烟机、洗衣机或没有参考音频信号的收音机。当内部的语音活动检测器(VAD)显示没有声音时,IC适应性地消除来自环境中点源的噪音。当VAD检测到声音时,IC暂停适应,保持对先前适应的干扰噪声源的抑制。
该集成电路只在管道输出的ASR通道上工作。通信输出通道可选择有一个波束成形器,它将一个感兴趣的区域固定在正前方,垂直于两个麦克风的平面。
下表描述了干扰消除器的配置参数:
| COMMAND | TYPE | VALUE | DESCRIPTION | NOTES |
|---|---|---|---|---|
| SET_BYPASS_IC GET_BYPASS_IC | uint32 | [0,1] 0 = IC bypass disabled (default) 1 = IC bypass enabled | 设置IC bypass参数。如果设置为1,则IC处理被绕过。 | A |
| SET_CH1_BEAMFORM _ENABLE GET_CH1_BEAMFORM _ENABLE | uint32 | [0,1] 0 = Passthrough IC input channel 1 onto IC output channel 1 1 = Beamformed output on IC output channel 1 (default) | 启用IC输出通道索引1上的波束成形输出。 | |
| RESET_FILTER_IC | 该命令重置了IC滤波器。 |
[A] 如果替代架构模式(ALT_ARCH)被启用(默认),IC bypass的状态将被固件动态地改变。请不要使用SET命令。GET命令仍然有效。
噪声抑制器(NS)
噪声抑制器(NS)用于抑制频率特性不随时间快速变化的来源的噪声。这包括扩散的背景噪声和固定的噪声源。
下表描述了噪声抑制器的设置:
| Command | Type | Value | Description |
|---|---|---|---|
| SET_BYPASS_SUP GET_BYPASS_SUP | uint32 | [0,1] | 设置抑制器bypass参数。如果设置为1,包含噪声抑制级的抑制器就被bypass了。 0 - 禁用抑制器bypass(默认) 1 - 启用抑制器bypass |
| SET_ENABLED_NS GET_ENABLED_NS | uint32 | [0,1] | 在抑制器内设置噪声抑制启用参数。如果设置为1,则抑制器内的噪声抑制阶段被启用。只有当抑制器没有被旁路时,改变这个参数才会生效。 0 - 噪声抑制被禁用 1 - 噪声抑制被启用(默认)。 |
自动增益控制(AGC)和损失控制
自动增益控制(AGC)可以动态地调整音频增益,或应用一个固定的增益,使语音内容保持一个理想的输出水平。AGC使用内部语音活动检测器来规范语音内容,避免放大噪声源,并应用软限制器来避免输出的削波。该设计基于标准的现代AGC技术,在Hansler和Schmidt的《声学回声和噪声控制》中作了详细介绍。
语音内容的期望输出电平由上阈值和下阈值定义。如果语音信号在上阈值和下阈值之外,则增益将相应地调整。如果语音信号在上阈值和下阈值内,则增益将保持恒定。
每个音频帧的增益增加或减少的速度也可以配置。增益值必须大于1,而减益值必须低于1。当增益适应时,当前的增益值乘以增益值或减益值,计算出应用于下一个音频帧的增益值。语音活动被监测并包括在算法中,以避免在静默期噪声底线被放大。此外,最大和最小水平可以被设置,以保持增益在一定范围内。
损耗控制过程通过衰减参考远端音频的任何残留回声来改善主观音频质量。它被设计用于通信信道上。在同时存在远端回声和近端音频的情况下,那么衰减就会减少,使听众可以互相打断。损失控制依靠声学回声消除器来分类和衰减残留的远端回声,同时保留近端语音。
下表详细说明了AGC的配置参数,这些参数都支持GET_ 和 SET_操作。
| PARAMETER | TYPE | VALUE | DESCRIPTION |
|---|---|---|---|
| ADAPT_CH0_AGC ADAPT_CH1_AGC | uint32 | [0,1] | 设置在AGC中启用通道0或1的增益适应。 0 - 该通道的自适应被禁用 1 - 该通道的自适应被启用 |
| ADAPT_ON_VAD_CH0_AGC ADAPT_ON_VAD_CH1_AGC | uint32 | [0,1] | 设置以启用由语音活动检测器触发的通道0或1自适应 0 - 该通道的自适应被禁用 1 - 该通道的自适应被启用 |
| LC_ENABLED_CH0_AGC LC_ENABLED_CH1_AGC | uint32 | [0,1] | 在AGC中为通道0或1设置启用损失控制。 0 - 关闭该通道的损失控制 1 - 启用该通道的损失控制 |
| GAIN_CH0_AGC GAIN_CH1_AGC | Q16.16 | [0..32767] | 设置通道0或1的AGC中应用的线性增益参数。值是线性的。默认值:500 |
| MAX_GAIN_CH0_AGC MAX_GAIN_CH1_AGC | Q16.16 | [0..32767] | 设置通道0或1的AGC中的最大增益阈值。值是线性的。默认值:1000 |
| MIN_GAIN_CH0_AGC MIN_GAIN_CH1_AGC | Q16.16 | [0..32767] | 设置通 道0或1的AGC中的最小增益阈值。值是线性的。默认值:0 |
| SOFT_CLIPPING_CH0_AGC SOFT_CLIPPING_CH1_AGC | uint32 | [0,1] | 在通道0或1的输出上启用软削波功能 0 - 禁用该通道的软削波功能 1 - 启用该通道的软削波功能 |
| UPPER_THRESHOLD_CH0_AGC UPPER_THRESHOLD_CH1_AGC | Q1.31 | [0..1] | 设置所需语音电平的上限值。值的范围是0到1(满刻度),必须大于通道的下限阈值。 |
| LOWER_THRESHOLD_CH0_AGC LOWER_THRESHOLD_CH1_AGC | Q1.31 | [0..1] | 设置所需语音电平的下限阈值。值的范围是0到1(满量程),必须低于通道的上限阈值。 |
| INCREMENT_GAIN _STEPSIZE_CH0_AGC INCREMENT_GAIN _STEPSIZE_CH1_AGC | Q16.16 | [0..32767] | 设置增益增加的速率。当检测到语音内容时,这个值是以每一帧为基础应用的。 |
| DECREMENT_GAIN _STEPSIZE_CH0_AGC DECREMENT_GAIN _STEPSIZE_CH1_AGC | Q16.16 | [0..32767] | 设置增益下降的速度。当检测到语音内容时,这个值是以每一帧为基础应用的。 |
损耗控制过程通过衰减参考远端音频的任何残留回声来改善主观的音频质量。它被设计为用在通信信道(comms)上。在同时存在远端回声和近端音频的情况下,那么衰减就会减少,使听众可以互相打断。损耗控制依靠自动回声消除器来分类和衰减残留的远端回声。
下表详细说明了损失控制过程的配置参数。这些参数都支持GET_和SET_操作。
| PARAMETER | TYPE | VALUE | DESCRIPTION |
|---|---|---|---|
| LC_ENABLED_CH0_AGC LC_ENABLED_CH1_AGC | uint32 | [0,1] | 在AGC中为通道0或1设置启用损失控制。 0 - 关闭该通道的损失控制 1 - 启用该通道的损失控制 |
| LC_GAINS_CH0_AGC LC_GAINS_CH1_AGC | Q16.16 | [0..32767] | 损失控制收益:arg1: 最大 arg2: 双重通话 arg3: 静音 arg4: 最小 |
| LC_N_FRAMES_CH0_AGC LC_N_FRAMES_CH1_AGC | Q16.16 | [0..32767] | 近端和远端活动中损失控制的帧数 arg1: 近端 arg2: 远端 |
| LC_GAMMAS_CH0_AGC LC_GAMMAS_CH1_AGC | Q16.16 | [0..32767] | 损失控制gamma系数:背景功率、增量和减量 arg1:背景功率 arg2:增量 arg3:减量 |
| LC_DELTAS_CH0_AGC LC_DELTAS_CH1_AGC | Q16.16 | [0..32767] | 损失控制delta系数:仅远端,仅近端,既远端又近端 arg1:仅远端 arg2:仅近端 arg3:既远端又近端 |
| LC_CORR_THRESHOLD_CH0_AGC LC_CORR_THRESHOLD_CH1_AGC | Q1.31 | [0..1] | 通道的损失控制相关阈值 |
替代架构模式(ALT_ARCH)
当启用备选架构模式时,该备选架构模式改善了混响环境中回声消除性能。它根据AEC参考信号中的能量,通过切换出AEC或IC来重新配置音频流水线,以恢复用于增加剩余流水线的规格的资源。
两种音频管道配置总结如下:
- ALT_ARCH disabled 会始终应用回声消除和干扰消除
- ALT_ARCH enabled 当参考信号可用时,会仅应用回声消除,否则仅应用干扰消除
下图阐述了替代模式切换的实施细节。多路复用器允许AEC和/或IC被绕过。当IC被旁路时,只使用AEC的一个通道,允许它被重新配置,扩展滤波器以支持更长的尾部长度。一个内部模块收集关于参考的统计数据,用于在运行时动态控制这些多路复用器和内存分配。
注意:使用控制接口手动绕过IC并不适用内存重新分配。
下图强调了替代结构被禁用时的音频信号路径(即标准操作)。
![Audio pipeline configuration, [ALT_ARCH=0] mode](https://www.xmos.ai/documentation/XM-014506-UG-3/latest/html/_images/image25.png)
每当ALT_ARCH=1时,管道就会在单独的AEC或单独的IC之间动态切换。在这种情况下,AEC能够利用额外的内存,增加回声消除周期,并使其在高度混响的条件下对回声更有弹性。
![Audio pipeline configuration, [ALT_ARCH=1] when reference signal is present](https://www.xmos.ai/documentation/XM-014506-UG-3/latest/html/_images/image26.png)
动态切换使用从参考信号中收集的统计数据来确定是否需要回声消除。
| Pipeline configuration | Far-end audio (AEC Ref) status | Pipeline functionality | AEC characteristics |
|---|---|---|---|
| ALT_ARCH = 0 | With and without Far-end audio present | IC enabled AEC enabled | Max echo delay = 150ms |
| ALT_ARCH = 1 | No far-end audio | IC enabled AEC disabled | No cancellation |
| ALT_ARCH = 1 | Far-end audio present | IC disabled AEC enabled | Max echo delay = 225ms |
下表描述了备选架构的配置参数。
| Command | type | Value | Description |
|---|---|---|---|
| SET_ALT_ARCH_ENABLED | uint32 | [0,1] | 启用或禁用备用架构(alt arch) |
| 0 - Alt arch 禁用 | |||
| 1 - Alt arch 启用 | 当启用alt arch时,系统工作在AEC模式(当检测到远端信号时)或IC模式(当检测不到远端信号时)。当在Alt arch的AEC模式下,AEC处理只发生在一个Mic通道上,每个mic-ref AEC滤波器有15个相位。 |