Files
AC707N/SDK/audio/effect/audio_dc_offset_remove.c
2025-12-03 11:12:34 +08:00

108 lines
2.7 KiB
C

#ifdef SUPPORT_MS_EXTENSIONS
#pragma bss_seg(".audio_dc_offset_remove.data.bss")
#pragma data_seg(".audio_dc_offset_remove.data")
#pragma const_seg(".audio_dc_offset_remove.text.const")
#pragma code_seg(".audio_dc_offset_remove.text")
#endif
/*
****************************************************************
* Audio DC-Offset Remove
* Brief : 去除直流偏移
* Notes :
*
****************************************************************
*/
#include "audio_dc_offset_remove.h"
#include "app_config.h"
//一段高通滤波器 可调中心截止频率、带宽
//默认Freq:100Hz Gain:0 Q:0.7f
static struct eq_seg_info dccs_eq_tab_8k[] = {
{0, EQ_IIR_TYPE_HIGH_PASS, 100, 0, 0.7f},
};
static struct eq_seg_info dccs_eq_tab_16k[] = {
{0, EQ_IIR_TYPE_HIGH_PASS, 100, 0, 0.7f},
};
//使用EQ模块去除直流偏置配置
#if TCFG_EQ_ENABLE
#define DCC_VIA_EQ_ENABLE 1
#else
#define DCC_VIA_EQ_ENABLE 0
#endif/*TCFG_EQ_ENABLE*/
/*
*********************************************************************
* Audio DC-Offset Remove Open
* Description:
* Arguments : sample_rate
* ch_num
* Return : Null
* Note(s) :
*********************************************************************
*/
void *audio_dc_offset_remove_open(u32 sample_rate, u32 ch_num)
{
#if DCC_VIA_EQ_ENABLE
struct audio_eq_param eq_param = {0};
eq_param.channels = ch_num;
eq_param.sr = sample_rate;
eq_param.cb = eq_get_filter_info;
eq_param.global_gain = 0;
if (sample_rate == 8000) {
eq_param.max_nsection = eq_param.nsection = ARRAY_SIZE(dccs_eq_tab_8k);
eq_param.seg = dccs_eq_tab_8k;
} else {
eq_param.max_nsection = eq_param.nsection = ARRAY_SIZE(dccs_eq_tab_16k);
eq_param.seg = dccs_eq_tab_16k;
}
struct audio_eq *eq = audio_dec_eq_open(&eq_param);
return (void *)eq;
#else
return NULL;
#endif
}
/*
*********************************************************************
* Audio DC-Offset Remove Run
* Description:
* Arguments : hdl
* data
* len
* Return : Null
* Note(s) :
*********************************************************************
*/
void audio_dc_offset_remove_run(void *hdl, void *data, u32 len)
{
#if DCC_VIA_EQ_ENABLE
if (hdl) {
audio_dec_eq_run(hdl, (s16 *)data, (s16 *)data, len);
}
#endif
}
/*
*********************************************************************
* Audio DC-Offset Remove Close
* Description:
* Arguments : hdl
* Return : Null
* Note(s) :
*********************************************************************
*/
void audio_dc_offset_remove_close(void *hdl)
{
#if DCC_VIA_EQ_ENABLE
if (hdl) {
audio_dec_eq_close(hdl);
/* hdl = NULL; */
}
#endif
}