麦克风模数转换器(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。