Audio ADC ========== 概述 ---------- Audio ADC 进行麦克风模拟信号到数字信号的转换,以及数字信号的处理,最终输出高信噪比的低速高比特数字信号。 Audio ADC 主要包含以下 3 个部分: - AMIC:Analog Microphone - SDM-ADC:Sigma Delta Modulator Analog to Digital Converter - RX-DFE:Receive Digital Front End Audio ADC 的框架如下图所示。 .. image:: ../../../_static/Audio_ADC_framework.png :align: center .. centered:: Audio ADC framework .. note:: 框架图只画出了部分通道,实际总共有 3 个 MIC bias 开关、 3 个 ADC(AMIC)通道、4 个 PDM(DMIC)通道和 8 个 RX-DFE 通道。 AMIC ---------- AMIC 是 Audio ADC 的模拟部分,接收来自麦克风的模拟信号。主要包含 MIC 信号处理,MIC bias 开关和电压控制,PGA(Programmable Gain Amplifier)控制。 AMIC 模块支持如下特性: - 支持 3 路模拟 MIC 输入,每一路 MIC 的输出都可以连接到任意一路 RX-DFE 通道。 - 支持 3 路 MIC bias,每一路 MIC bias 的电压可以配置,一路 MIC bias 既可以控制一路 MIC 开关,也可以同时控制多路 MIC 的开关。 - PGA 模块控制模拟增益,支持的范围为 -6 dB ~ 12 dB。 SDM-ADC ---------- SDM-ADC 模块将模拟 MIC 信号转换成 4 比特的高采样率数字信号 RX-DFE ---------- RX-DFE 概述 ^^^^^^^^^^^^^ RX-DFE 是 Audio ADC 的数字部分,接收来自 SDM-ADC 模块或 PDM 模块输出的高速低比特数字信号,进行降采样、数字滤波和增益控制等处理,最终输出高信噪比的低速高比特数字信号。 RX-DFE 输入信号包括: - 4 比特的 SDM-ADC 数字信号:模拟 MIC 信号经过 SDM(Sigma Delta Modulator)ADC 转换得到。 - 1 比特的 PDM(Pulse Density Modulation,脉冲密度调制)数字信号。如果使用 PDM 输入可以参看 PDM 模块文档。 RX-DFE 输出为固定 24 bits 数字信号。 RX-DFE 与其它模块的连接关系如下图所示。 .. image:: ../../../_static/Audio_ADC_RXDFE_connection.png :align: center .. centered:: Audio RX-DFE 与其它模块连接示意图 RX-DFE 功能特性 ^^^^^^^^^^^^^^^^^ - SDM 模式下,输入数字信号位宽为 4 比特,采样率为 7.68 MHz / 8 MHz。 - PDM 模式下,输入数字信号位宽为 1 比特,采样率为时钟的整数倍分频(如 1/2/4/8/0.96/1.92/3.072/3.84/7.68 MHz)。 - 输出数字信号位宽为 24 bits。 - 支持多种输出采样率,典型的输出信号采样率为 8 KHz、16 KHz、32 KHz 和 48 KHz 等。 - 支持对输出数字音频信号的功率控制,调整精度为 0.1875 dB,范围为 -95.8125 dB ~ +95.8125 dB。 - 支持两级高通滤波器(HPF)。 - 支持多种同步启动控制方案。 - 支持 15.36 MHz / 16 MHz / 32 MHz 等多种时钟模式。 - 支持 PPM calibration。 - 支持 8 个 RX-DFE 通道。 - 支持 ADA-dump 功能和 polling 两种 debug 方式。 RX-DFE 架构 ^^^^^^^^^^^^^ RX-DFE 主要由两级 SINC 抽取滤波器、PPM 滤波器、半带抽取滤波器(HBF)、高通滤波器(HPF)、幅度控制器等组成,如下图所示。 .. image:: ../../../_static/Audio_ADC_RXDFE_structure.png :align: center .. centered:: RX-DFE 结构图 .. note:: SINC 抽取滤波器和 HBF 滤波器用于降采样,PPM 滤波器用于频偏校准,HPF 滤波器用于滤除低频噪声,幅度控制器用于控制信号增益。 RX-DFE 分成两级,第一级由 SINC 滤波器和 HPF 滤波器组成,第一级将数据进行降采样之后输出给第二级时,也会同时输出给 ANC 模块用于降噪。 RX-DFE 第二级由 PPM 滤波器、SINC 滤波器、HBF 滤波器、HPF 滤波器、幅度控制器组成。第二级输入可以来自第一级的输出,也可以来自 I2S 或者 dbg_bus,第二级输入默认来自第一级输出。 RX-DFE 不仅可以用来接收和处理来自 MIC 的数据,也可以接收和处理 I2S 数据,或者用来 dump 一些 debug 点的数据(详细可查看 Audio Dump 模块介绍)。 RX-DFE 有 3 种启动方式: - Self trigger:自启动方式,在 RX-DFE 配置完成的同时也已启动。 - Timer trigger:timer 触发启动方式,是一种硬件自动触发的启动方式,即在 audio timer 计数值达到目标计数值时,硬件会同时触发多个 audio 模块的启动,可以实现多个 RX-DFE 通道或者 RX-DFE 和别的 Audio 模块同时启动。 - Software trigger:软件触发启动方式,是一种软件触发的启动方式,就是将 audio 模块的启动开关放到同一个寄存器里,通过操作这个寄存器实现多个模块同时启动。 接口使用说明 ------------- 1. 初始化 Audio ADC::cpp:func:`wq_audio_adc_init()` 2. 配置并打开 MIC::cpp:func:`wq_audio_adc_analog_start()` - 在配置 MIC 时,推荐多个 MIC 同时进行配置,MIC 的参数配置采用 bitmap 的方式,可以一次性将所有 MIC 的配置传入。 - MIB bias 的配置和硬件设计有关,请根据实际的硬件进行配置。 - 打开 MIC 需要花费大约 50 ms 时间,所以推荐注册 MIC 启动完成回调来确认 MIC 已启动完成。 3. 配置并打开 RX-DFE::cpp:func:`wq_audio_adc_digital_start()` - 如果使用 timer trigger,则需要申请一个 timer,并将 timer id 配置给 RX-DFE - 推荐将低时延模式关闭,低时延模式会通过直接 bypass HBF 来节约一点点硬件延时,但使用 HBF 可以能够保持更好的频率响应,所以低时延模式只在对时延要求非常高时考虑打开。 - 推荐将 HPF 打开(bypass HPF 关闭),HPF 可以将 DC offset 和低频噪声滤除掉,如果需要保留低频信号时考虑将其关闭。 4. 如果需要接收来自 RX-DFE 的数据,则需要申请 RX-FIFO,并将 RX-FIFO 连接到 RX-DFE 通道上。 5. 申请 RX-FIFO 时将会配置好 DMA 通道,将接收 buffer 挂载到 DMA 上,RX-DFE 启动后,DMA 将会从 RX-FIFO 中读取数据并保存到 buffer 中。 6. 关闭 RX-DFE::cpp:func:`wq_audio_adc_digital_stop()` 7. 关闭 MIC::cpp:func:`wq_audio_adc_analog_stop()` 参考示例 ------------- :: examples/unity_test/acore/components/test_case/test_audio_adc_dac_loopback.c API 介绍 ----------- .. doxygenfile:: wq_audio_adc.h .. doxygenfile:: wq_audio_adc_declare.h