3. 自适应陷波啸叫抑制(notch_howling)

使用扩音时,当麦克风到喇叭整体环路反馈大于1的时候,就会发生啸叫。只要改变整个环路的反馈,就可以抑制啸叫。自适应陷波抑制啸叫是其中一种算法,可以抑制改变环路反馈声音的频率,环路反馈一直改变,起到了平衡磨损的作用,防止某个频率一直放大。

3.1. 配置参数说明

  • notch_howling_work_buf:自适应陷波啸叫抑制运算需要的buff

    根据配置参数决定buff大小,可通过ops->need_buf()接口获取大小;

"图1 notch_howling buff大小获取"

图1 notch_howling buff大小获取


3.2. 相关函数

3.2.2. 函数void *notch_howling_api(void *obuf, u32 sr, void **ppsound)

该函数用于初始化自适应陷波抑制啸叫(notch_howling)的相关参数,由函数link_notch_howling_sound()调用即可,需要关注的其内部参数的初始化:

1、gain:陷波器压制程度,该值越大防啸叫效果越好,但发声啸叫频点误检时音质会更差;
2、Q:陷波器带宽,该值越小防啸叫效果越好,但发声啸叫频点误检时音质会更差;
3、fade_time:陷波器启动与释放时间,该值越小启动与释放越快,但可能导致杂音出现和音质变差;
4、threshold:频点啸叫判定阈值,该值越小防啸叫效果越好,但越容易误检;
5、SampleRate:输入音频的采样率;

3.2.3. 函数void notchhowling_release(void **ppeffect)

该函数用于释放音效申请的资源。适用于带有MMU的芯片(如AD23N)

1、ppeffect:存放当前音效算法控制句柄指针的指针,即link时传入的指针;

3.3. 资源使用说明

陷波啸叫抑制使用到的运算buff由于要经过硬件fft访问,所以不能malloc运算buff,否则可能出现一些边界问题。因此该算法的运算buff保留在overlay。

"图2 陷波啸叫抑制运算buff"

图2 陷波啸叫抑制运算buff

陷波啸叫抑制除了该buff以外,其他句柄所使用到的ram都在link时通过malloc获取。