跳转至

麦克风模数转换器(MADC)


1、简介

MADC(Microphone ADC,麦克风模数转换器)是CI14LP芯片为语音采集设计的专用音频ADC通路,支持:

  • 模拟MIC(单端/差分输入)与数字MIC(DMIC)两类麦克风
  • 16K ~ 768K采样率、16/18/20/24bit数据宽度
  • MIC升压级增益(-2dB ~ 24dB)与数字增益(-64dB ~ 63dB)
  • ALC(自动电平控制)、噪声门控、风噪滤波、高通滤波
  • 滤波器三模式:高过滤/平衡/低延迟
  • 独立的低功耗模式与硬件自动上电唤醒

MADC作为codec设备挂接在codec_manager音频管理组件之下,SDK默认录音通路即为MADC。


2、API

2.1 读状态与初始化

函数名 描述
madc_power_on_status 读取MADC上电状态
madc_analog_record_init 模拟录音模式初始化
madc_codec_init codec_manager标准初始化接口
madc_codec_start codec_manager标准启动接口
madc_codec_config codec_manager标准参数配置接口
madc_codec_stop codec_manager标准关闭接口
madc_codec_ioctl codec_manager标准控制接口
printf_madc_reg 打印MADC寄存器(调试用)

2.2 参数配置

函数名 描述
madc_set_protocol 数据格式设置(PARALLEL / IIS)
madc_set_pairing IIS格式左右声道数据排序
madc_set_data_width 数据宽度设置(16/18/20/24bit)
madc_set_digital_gain 数字增益设置(-64dB~63dB)
madc_set_sampling_rate 采样率设置(16K~768K)
madc_set_mode 主从模式设置
madc_set_active_mode 工作模式设置(关机/睡眠/正常录音等5种)
madc_set_power_mode 功耗模式设置(正常/低功耗)
madc_set_filter_mode 滤波器模式设置(高过滤/平衡/低延迟)

2.3 使能与静音

函数名 描述
madc_enable MADC使能/关闭
madc_high_pass_filter_enable 高通滤波使能
madc_snr_optimisation_enable SNR优化使能
madc_left_right_swap_enable 左右声道对换使能
madc_soft_mute 软静音
madc_hard_mute 硬件静音

2.4 通道与MIC配置

函数名 描述
madc_channel_inputs 通道输入选择(正常/对换/硬件静音)
madc_channel_enable 通道使能
madc_set_dmic_ratio DMIC时钟分频(4/12/16分频)
madc_dmic_enable DMIC使能
madc_mic_bias_enable MIC偏置电压使能
madc_set_mic_type MIC类型选择(模拟/数字)
madc_mic_input_mode MIC输入模式(单端/差分)
madc_mic_bias_output_state MIC偏置输出状态
madc_set_mic_gain MIC升压级增益(-2dB~24dB)
madc_mic_capacitor_input MIC电容输入模式

2.5 ALC与滤波

函数名 描述
madc_set_alc_target_level ALC目标电平设置
madc_set_alc_hold_time ALC保持时间设置
madc_set_alc_attack_time ALC上升时间设置
madc_set_alc_decay_time ALC衰减时间设置
madc_set_alc_max_gain / madc_set_alc_min_gain ALC增益上/下限设置
madc_alc_enable ALC使能
madc_alc_init ALC结构体一次性初始化
madc_noise_gate_enable 噪声门控使能
madc_set_noise_gate_threshold 噪声门限阈值设置(0~42dB)
madc_set_wind_noise_filter 风噪滤波模式设置

3、关键类型

类型 说明
madc_active_mode_t 工作模式:SHUTDOWN(关机)、ANALOG_SLEEP(模拟睡眠)、ANALOG_RECORD(模拟正常)、ANALOG_RECORD_NO_IIS、DIGITAL_RECORD(数字正常)
madc_power_mode_t 功耗模式:NORMAL、LOWPOWER
madc_channel_t 通道:MADC_CHANNEL_LEFT、MADC_CHANNEL_RIGHT(模拟MIC仅1路,数字MIC 2路)
madc_data_width_t 数据宽度:MADC_DATA_WIDTH_16BIT ~ 24BIT
madc_mode_t 主从模式:MADC_MASTER、MADC_SLAVE
madc_sampling_rate_t 采样率:16K、48K、96K、192K、384K、768K
madc_filter_mode_t 滤波模式:高过滤、平衡滤波、低延迟
madc_dmic_ratio_t DMIC分频:4(3.072MHz)、12(1.024MHz)、16(0.768MHz)
madc_mic_type_t MIC类型:模拟(ANALOG)、数字(DIGITAL)
madc_channel_inputs_t 输入选择:正常输入、左右对换、硬件静音
madc_wind_noise_filter_t 风噪滤波:不使能及模式1~3(-3dB@60.4/119.8/240.6Hz)
madc_input_mode_t 输入模式:单端、差分
madc_mic_amplify_t MIC增益:-2dB ~ 24dB,步进2dB
madc_alc_config_t ALC配置结构体(目标电平、保持/上升/衰减时间、门控、增益上下限等)

4、示例

1) 以下代码通过codec_manager标准接口初始化MADC录音(SDK默认方式):

#include "ci14lp_madc.h"
#include "codec_manager.h"

void madc_record_demo(void)
{
    //初始化MADC(模拟MIC、正常功耗模式)
    madc_analog_record_init(MADC_POWER_MODE_NORMAL);

    //配置MIC输入
    madc_set_mic_type(MADC_CHANNEL_LEFT, MADC_MIC_TYPE_ANALOG);
    madc_mic_input_mode(MADC_CHANNEL_LEFT, MADC_INPUT_MODE_DIFFERENTIAL);
    madc_set_mic_gain(MADC_CHANNEL_LEFT, MADC_MIC_AMP_20dB);
    madc_mic_bias_enable(MADC_CHANNEL_LEFT, ENABLE);

    //使能通道
    madc_channel_enable(MADC_CHANNEL_LEFT, ENABLE);
    madc_enable(ENABLE);
}

2) 以下代码配置ALC(自动电平控制)用于语音通话场景:

#include "ci14lp_madc.h"

void madc_alc_demo(void)
{
    madc_alc_config_t alc_cfg;

    alc_cfg.target_level         = MADC_ALC_LEVEL__9dB;     //目标电平
    alc_cfg.hold_time            = MADC_ALC_HOLD_TIME_16MS; //保持时间
    alc_cfg.decay_time           = MADC_ALC_TIME_128MS;     //衰减时间
    alc_cfg.attack_time          = MADC_ALC_TIME_32MS;      //上升时间
    alc_cfg.noise_gate           = ENABLE;                  //噪声门控使能
    alc_cfg.noise_gate_threshold = MADC_NOISE_GATE_THRE_18dB;
    alc_cfg.snr_en               = ENABLE;
    alc_cfg.max_gain             = MADC_ALC_GAIN_23dB;      //增益上限
    alc_cfg.min_gain             = MADC_ALC_GAIN_0dB;       //增益下限
    alc_cfg.alc_en               = ENABLE;                  //ALC使能

    madc_alc_init(&alc_cfg);
}

3) 以下代码切换MADC工作模式实现低功耗管理:

#include "ci14lp_madc.h"

void madc_lowpower_demo(void)
{
    //进入模拟睡眠模式(模拟MIC不供电)
    madc_set_active_mode(MADC_ACTIVE_MODE_ANALOG_SLEEP);

    //恢复正常录音模式
    madc_set_active_mode(MADC_ACTIVE_MODE_ANALOG_RECORD);
}

5、其它

  • 录音增益(MIC增益/数字增益/ALC)的推荐配置与调节方法参见Speech API-增益调节。
  • MADC硬件上电唤醒配合SCU的 scu_madc_wakeup_auto_en、scu_madc_sleep_powerup_param 等接口实现低功耗语音唤醒,详见系统API-低功耗方案说明。
  • 模拟MIC只有1路通道,两麦场景需使用MADC+DCODEC ADC组合或外接IIS codec。

6、API 参考

本模块接口声明于 driver\ci14lp_chip_driver\inc\ci14lp_madc.h,实现位于 driver\ci14lp_chip_driver\src\ci14lp_madc.c。