123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511 |
- #ifndef _API_NR_H
- #define _API_NR_H
- #define _MAX_GAIN (0x800000)
- #define SOFT_DIG_P0DB (_MAX_GAIN * 1.000000)
- #define SOFT_DIG_P1DB (_MAX_GAIN * 1.122018)
- #define SOFT_DIG_P2DB (_MAX_GAIN * 1.258925)
- #define SOFT_DIG_P3DB (_MAX_GAIN * 1.412538)
- #define SOFT_DIG_P4DB (_MAX_GAIN * 1.584893)
- #define SOFT_DIG_P5DB (_MAX_GAIN * 1.778279)
- #define SOFT_DIG_P6DB (_MAX_GAIN * 1.995262)
- #define SOFT_DIG_P7DB (_MAX_GAIN * 2.238721)
- #define SOFT_DIG_P8DB (_MAX_GAIN * 2.511886)
- #define SOFT_DIG_P9DB (_MAX_GAIN * 2.818383)
- #define SOFT_DIG_P10DB (_MAX_GAIN * 3.162278)
- #define SOFT_DIG_P11DB (_MAX_GAIN * 3.548134)
- #define SOFT_DIG_P12DB (_MAX_GAIN * 3.981072)
- #define SOFT_DIG_P13DB (_MAX_GAIN * 4.466836)
- #define SOFT_DIG_P14DB (_MAX_GAIN * 5.011872)
- #define SOFT_DIG_P15DB (_MAX_GAIN * 5.623413)
- #define SOFT_DIG_P16DB (_MAX_GAIN * 6.309573)
- #define SOFT_DIG_P17DB (_MAX_GAIN * 7.079458)
- #define SOFT_DIG_P18DB (_MAX_GAIN * 7.943282)
- #define SOFT_DIG_P19DB (_MAX_GAIN * 8.912509)
- #define SOFT_DIG_P20DB (_MAX_GAIN * 10.000000)
- #define SOFT_DIG_P21DB (_MAX_GAIN * 11.220185)
- #define SOFT_DIG_P22DB (_MAX_GAIN * 12.589254)
- #define SOFT_DIG_P23DB (_MAX_GAIN * 14.125375)
- #define SOFT_DIG_P24DB (_MAX_GAIN * 15.848932)
- #define SOFT_DIG_P25DB (_MAX_GAIN * 17.782794)
- #define SOFT_DIG_P26DB (_MAX_GAIN * 19.952623)
- #define SOFT_DIG_P27DB (_MAX_GAIN * 22.387211)
- #define SOFT_DIG_P28DB (_MAX_GAIN * 25.118864)
- #define SOFT_DIG_P29DB (_MAX_GAIN * 28.183829)
- #define SOFT_DIG_P30DB (_MAX_GAIN * 31.622777)
- #define SOFT_DIG_P31DB (_MAX_GAIN * 35.481339)
- enum {
- DUMP_MIC_TALK = 0, //主MIC数据
- DUMP_MIC_FF, //副MIC数据
- DUMP_MIC_NR, //降噪后数据
- DUMP_AEC_INPUT, //AEC输入数据
- DUMP_AEC_FAR, //AEC远端数据
- DUMP_AEC_OUTPUT, //AEC输出数据
- DUMP_FAR_NR_INPUT, //远端降噪输入数据
- DUMP_FAR_NR_OUTPUT, //远端降噪输出数据
- DUMP_EQ_OUTPUT, //MIC EQ输出数据
- DUMP_SCO_MAX_NB,
- };
- #define DUMP_SNDP_MASK 0x000f
- #define DUMP_AEC_MASK 0x00f0
- #define NR_CFG_TYPE_MASK 0x1F
- //call param
- enum NR_TYPE {
- NR_TYPE_NONE = 0,
- NR_TYPE_AINS,
- NR_TYPE_SNDP_SM,
- NR_TYPE_SNDP_DM,
- NR_TYPE_SNDP_FBDM,
- NR_TYPE_SMIC_AI, //自研单MIC AI降噪算法
- NR_TYPE_SMIC_PRO_AI, //自研单MIC 大模型AI降噪算法
- NR_TYPE_SMIC_AIAEC, //自研单MIC + AIAEC降噪算法
- NR_TYPE_DMIC_AI, //NR_TYPE_DMDNN
- NR_TYPE_USER,
- };
- enum AEC_TYPE {
- AEC_TYPE_NONE = 0,
- AEC_TYPE_DEFAULT, //默认硬件频域AEC
- };
- enum AEC_NR_MODE {
- AEC_NR_MODE0 = 0, //AEC(线性+非线性) + NR
- AEC_NR_MODE1, //AEC(线性) + NR + AEC(非线性)
- AEC_NR_MODE2, //NR + AEC(线性) + AEC(非线性)
- };
- typedef struct {
- u8 level; //稳态最大降噪量,范围0~29dB
- u8 dnn_level; //dnn最大降噪量,范围0~29dB
- u8 param_printf;
- const u32 *coef; //声加配置资源,非0:使用声加工具配置(从资源读取)
- } sndp_sm_cb_t;
- typedef struct {
- u8 distance;
- //小于保护角的语音被保留,大于抑制角的语音被抑制,中间平滑过渡
- u8 degree; //语音保护角,范围0~90度
- u8 degree1; //语音抑制角 = degree + degree1,范围0~90度
- u8 level; //稳态最大降噪量,范围0~29dB
- u8 dnn_level; //dnn最大降噪量,范围0~29dB
- u8 param_printf;
- int bf_upper; //固定波束频率上限, 默认128
- const u32 *coef; //声加配置资源,非0:使用声加工具配置(从资源读取)
- } sndp_dm_cb_t;
- typedef struct {
- u8 level; //稳态最大降噪量,范围0~29dB
- u8 dnn_level; //dnn最大降噪量,范围0~29dB
- u8 param_printf;
- u8 noiserms_th0; //混音阈值,范围0~100
- const u32 *coef; //声加配置资源,非0:使用声加工具配置(从资源读取)
- } sndp_fbdm_cb_t;
- enum NR_CFG_EN {
- NR_CFG_FAR_EN = BIT(0), //使能远端降噪
- NR_CFG_NEAR_AINS2_EN = BIT(1), //使能声加单麦前AINS2
- NR_CFG_TRUMPET_EN = BIT(2), //使能汽车喇叭声降噪
- NR_CFG_SCO_FADE_EN = BIT(3), //使能通话前500ms淡入
- NR_CFG_DAC_DNR_EN = BIT(4), //使能通话下行————动态降噪
- NR_CFG_DAC_DRC_EN = BIT(5), //使能通话下行————DRC
- };
- typedef struct {
- u32 nt;
- u8 prior_opt_idx;
- u8 ns_ps_rate;
- u8 trumpet_en;
- u8 nt_post;
- u8 exp_range;
- } ains_cb_t;
- typedef struct {
- u8 distance; //双mic间距:mm(步进1mm)
- u8 degree; //语音角度(小于90度):10+5*N (5度步进,N<17)
- u8 max_degree; //最大保护角度(小于90度):10+5*N (5度步进,N<17)
- u8 level; //降噪强度:2*N(2dB步进,N<30)
- u8 wind_level;
- u8 param_printf; //使能参数打印
- u8 rfu[1];
- const int *filter_coef; //int coef[512]
- int maxIR; //Q18
- int maxIR2; //Q18
- u16 windnoise_conditioned_eq_x0; //风噪抑制起始频段(Hz)
- u16 windnoise_conditioned_eq_x1; //风噪抑制终止频段(Hz)
- int windnoise_conditioned_eq_y1; //风噪抑制的终止大小(db), 最小为0db
- u8 snr_x0_level; //如果在一般信噪比下,降噪不足,就适当调大(0~0.4 步进0.05),默认0.1
- u8 snr_x1_level; //如果低信噪比下,语音断断续续,就适当调小(0.5~1 步进0.05),默认0.8
- } dmic_cb_t;
- typedef struct {
- u16 nt;
- u8 nt_post;
- s16 exp_range_H;
- s16 exp_range_L;
- u8 model_select;
- u16 min_value;
- u16 nostation_floor;
- u8 wind_thr;
- u8 wind_en;
- u8 noise_ps_rate;
- u8 prior_opt_idx;
- u8 prior_opt_ada_en;
- u8 wind_level;
- u16 wind_range;
- u16 low_fre_range;
- u16 low_fre_range0;
- u8 pitch_filter_en;
- u8 param_printf; //使能参数打印
- u16 mask_floor;
- u8 mask_floor_r;
- u8 music_lev;
- u8 comforN_level;
- u16 gain_expand;
- u8 nn_only;
- u16 nn_only_len;
- u16 gain_assign;
- u8 sin_gain_post_en;
- u16 sin_gain_post_len;
- u16 sin_gain_post_len_f;
- } dnn_cb_t;
- typedef struct {
- u16 gain_floor;
- //u8 nt_post;
- //s16 exp_range_H;
- //s16 exp_range_L;
- u8 noise_ps_rate;
- u8 prior_opt_idx;
- u8 prior_opt_ada_en;
- //u8 wind_level;
- //u16 wind_range;
- u16 low_fre_range;
- u8 param_printf; //使能参数打印
- u8 music_lev;
- u8 nn_only;
- u16 nn_only_len;
- u16 gain_assign;
- u8 sin_gain_post_en;
- u16 sin_gain_post_len;
- u16 sin_gain_post_len_f;
- } dnn_pro_cb_t;
- typedef struct {
- s16 gamma;
- u8 nlp_en;
- u8 nlp_level;
- s16 nt;
- u8 param_printf;
- u8 music_lev;
- //s16 exp_range_H;
- //s16 exp_range_L;
- u8 noise_ps_rate;
- u8 prior_opt_idx;
- u8 prior_opt_ada_en;
- u8 wind_level;
- u16 wind_range;
- s16 mask_floor;
- u16 low_fre_range;
- u8 nn_only;
- u16 nn_only_len;
- u8 sin_gain_post_en;
- u16 sin_gain_post_len;
- u16 sin_gain_post_len_f;
- u8 smooth_en;
- u16 far_post_thr;
- u32 dtd_post_thr;
- s16 gain_assign;
- u16 echo_gain_floor;
- s16 dtd_smooth;
- s16 single_floor;
- s16 gain_assign_nlp;
- u16 gain_st_thr;
- s32 intensity;
- } dnn_aec_ns_cb_t;
- typedef struct {
- u8 param_printf; //使能参数打印
- u8 mic_cfg; //主副麦选择
- u8 bf_type; //beamforming类型
- s16 distance; //双麦间距
- u16 degree; //拾音角度方向
- s16 nt; //普通降噪量
- u8 nt_post; //后滤波降噪量
- s16 exp_range;
- //u8 fast_convergence_en; //快速收敛功能,对人声有影响,默认不开
- //u16 lowside_corr; //下支路相关系数
- // u8 trumpet_en; //喇叭声抑制
- u8 cmp_tbl_dis;
- u8 dm_dnn_en; //是否使能双麦AI算法
- u8 noise_ps_rate;
- u8 comp_mic_fre; //双麦+AI的参数
- u16 comp_mic_fre_L; //传统双麦的参数
- u16 comp_mic_fre_H; //传统双麦的参数
- u8 prior_opt_idx;
- u16 low_fre_ns0_range;
- u8 wind_sig_choose;
- u8 bf_choose;
- u8 tf_en;
- u8 post_filter_en;
- u8 phase_comp_en;
- u8 phase_comp_en_B;
- u8 low_bf_lim;
- s32 NSC;
- u16 tf_len;
- u8 tf_norm_en;
- u8 tf_norm_only_en;
- s32 opt_limit;
- s16 exp_range_H;
- s16 exp_range_L;
- u8 music_lev;
- u16 gain_expand;
- u8 nn_only;
- u16 nn_only_len;
- u8 hi_fre_en;
- u16 gain_assign;
- u8 sin_gain_post_en;
- u16 b_frein2_floor;
- u16 Gcoh_thr;
- u16 Gcoh_sum_thr;
- u8 wind_or_en;
- u8 v_white_en;
- //u8 wind_type;
- s16 sin_gain_post_len_f;
- u8 enlarge_v;
- s16 mask_floor;
- u16 mask_floor_hi;
- s16 wind_state_lim;
- s16 wind_sup_floor;
- u8 wind_sup_open;
- u8 wind_a_pow_en;
- u8 bfrein_en;
- u8 bfrein3_ns;
- u16 wind_len_used;
- u8 bfrein3_en;
- s32 gu_value;
- u8 TCtrigger_sta;
- u8 white_approach_shape;
- u8 low_grad_prot;
- s32 grad_gain_floor;
- } dmns_cb_t; //dmns和dmdnn共用一套结构体
- typedef struct {
- u8 param_printf; //使能参数打印
- u8 mic_cfg; //主副麦选择
- // u8 bf_type; //beamforming类型
- s16 distance; //双麦间距
- u16 degree; //拾音角度方向
- s16 nt; //普通降噪量
- u8 nt_post; //后滤波降噪量
- s16 exp_range;
- //u8 fast_convergence_en; //快速收敛功能,对人声有影响,默认不开
- //u16 lowside_corr; //下支路相关系数
- // u8 trumpet_en; //喇叭声抑制
- u8 cmp_tbl_dis;
- u8 dm_dnn_en; //是否使能双麦AI算法
- u8 noise_ps_rate;
- u8 comp_mic_fre; //双麦+AI的参数
- u16 comp_mic_fre_L; //传统双麦的参数
- u16 comp_mic_fre_H; //传统双麦的参数
- u8 prior_opt_idx;
- u16 low_fre_ns0_range;
- u8 wind_sig_choose;
- s16 wind_state_lim;
- s16 wind_sup_floor;
- u8 wind_sup_open;
- u8 wind_a_pow_en;
- u8 bf_choose;
- u8 tf_en;
- //u8 low_bf_lim;
- u16 tf_len;
- u8 tf_norm_en;
- u8 tf_norm_only_en;
- s16 exp_range_H;
- s16 exp_range_L;
- u8 music_lev;
- u16 gain_expand;
- u8 nn_only;
- u16 nn_only_len;
- u8 hi_fre_en;
- u16 gain_assign;
- u8 sin_gain_post_en;
- u16 b_frein2_floor;
- u16 Gcoh_thr;
- u16 Gcoh_sum_thr;
- u8 wind_or_en;
- u8 v_white_en;
- //u8 wind_type;
- s16 sin_gain_post_len_f;
- u8 enlarge_v;
- s16 mask_floor;
- u16 mask_floor_hi;
- s32 gu_value;
- u8 bfrein3_ns;
- u16 wind_len_used;
- u16 Ftrust;
- } ldmdnn_cb_t;
- typedef struct {
- u8 mode; //auto or manual mode
- u8 level; // 降噪量
- u8 min_range1; // 噪声谱更新系数
- u8 min_range2; // 噪声谱更新系数
- u8 min_range3; // 噪声谱更新系数
- u8 min_range4; // 噪声谱更新系数
- u8 anksnr_en; // 是否使能ank snr
- u16 nera_val; // anksnr_en为0时有效,alp1固定值
- u32 block_cnt;
- } peri_nr_cfg_t;
- typedef struct {
- u8 agc_en;
- u16 sampleHzIn;
- u8 bit;
- u8 compress_agcDb;
- u8 target_agcDbfs;
- u8 low_signal_en;
- u8 max_gain;
- } agc_cb_t;
- typedef struct {
- u8 nr_type; //近端降噪类型
- u8 nr_cfg_en; //远端降噪、喇叭声降噪、500ms淡入等降噪配置
- u32 dump_en;
- u8 rfu[2];
- u8 calling_voice_pow; //用于呼出电话,响铃之前动态降噪
- u8 calling_voice_cnt;
- u8 calling_voice_temp_cnt;
- void *far_nr; //远端降噪算法配置
- int dac_dnr_thr;
- agc_cb_t agc_cb;
- } nr_cb_t;
- typedef struct {
- u32 type :4;
- u32 mode :1; //auto or manual mode
- u32 nlp_bypass :1; //aec nlp bypass
- u32 nlp_only :1; //aec nlp only select
- u32 nlp_level :4;
- u32 nlp_part :2;
- u32 comforn_level :4;
- u32 comforn_floor :10;
- u32 comforn_en :1;
- u32 xe_add_corr :16;
- u32 upbin :8;
- u32 lowbin :8;
- u32 diverge_th :4;
- u32 gamma :16;
- u32 aggrfact :16;
- u32 depre_mode :1;
- u32 mic_ch :1;
- u32 dig_gain :24;
- u32 echo_th ;
- u16 far_offset;
- u8 ff_mic_ref_en;
- u32 qidx;
- } aec_cfg_t;
- typedef struct {
- u8 alc_en;
- u8 rfu[1];
- u8 fade_in_step;
- u8 fade_out_step;
- u8 fade_in_delay;
- u8 fade_out_delay;
- s32 far_voice_thr;
- } alc_cb_t;
- typedef struct {
- aec_cfg_t aec;
- alc_cb_t alc;
- nr_cb_t nr;
- u8 rfu[3];
- u8 mic_eq_en : 1;
- u8 mic_drc_en : 1;
- int post_gain;
- } call_cfg_t;
- void bt_call_init(call_cfg_t *p);
- void bt_call_exit(void);
- bool bt_sco_dnn_en(void);
- bool bt_sco_dac_drc_init(u8 *drc_addr, int drc_len);
- bool bt_sco_far_cache_write(u8 *inbuf, u32 wlen);
- bool bt_sco_far_cache_read(u8 *outbuf, u32 rlen);
- void bt_sco_far_cache_init(void);
- void bt_ldmdnn_init(void *alg_cb);
- void bt_ldmdnn_exit(void);
- void bt_dmns_init(void *alg_cb);
- void bt_dmns_exit(void);
- void bt_dnn_init(void *alg_cb);
- void bt_dnn_exit(void);
- void bt_dnn_pro_init(void *alg_cb);
- void bt_dnn_pro_exit(void);
- void bt_aiaec_dnn_init(void *alg_cb);
- void bt_aiaec_dnn_exit(void);
- void bt_sndp_sm_init(void *alg_cb);
- void bt_sndp_sm_exit(void);
- void bt_ains_init(void *alg_cb);
- void bt_ains_exit(void);
- void bt_sndp_fbdm_init(void *alg_cb);
- void bt_sndp_fbdm_exit(void);
- void bt_sndp_dm_init(void *alg_cb);
- void bt_sndp_dm_exit(void);
- void bt_agc_init(void);
- void bt_sco_agc_proc(s16 *buf);
- void trumpet_denoise_init(u8 level);
- void trumpet_denoise(int *fft_in);
- void nr_init(u16 nt);
- void nr_process(s16 *data); //data:64个点
- u32 nr_gain_radio_convert(u8 dB);
- void bt_peri_nr_init(void);
- void bt_peri_nr_exit(void);
- bool bt_peri_nr_wait_done(void);
- void bt_sco_far_nr_int(void *cfg);
- void bt_sco_far_peri_nr_process(s16 *ptr, u16 samples);
- void peri_nr_isr(void);
- void wnr_init(void);
- void wnr_detect(s32 *p);
- void wnr_process(s32 *re, s32 *im);
- void aec_nlms_process(u8 mic_sel);
- void aec_nlp_process(void);
- void aec_far_process(void);
- void aec_init(void);
- bool aec_isr(void);
- void aec_exit(void);
- void alc_init(void);
- bool alc_isr(void);
- void alc_exit(void);
- #endif
|