移频啸叫抑制(pitchshifter_howling) ========================================= | 如果在一个环路系统的 AD->…->DA 中存在某个频点明显的响应峰值,该位置容易形成啸叫。因此,AD->…->移频->…->DA,在一个AD到DA的环路中,移频模块将频率不断移动,加入非线性运算,来改变整个环路的频响,防止同一个频率被反复放大。 | 移频防啸叫模块,可以配合 EQ模块,自适应陷波模块一起处理。具体根据实际样机的资源效果做选择。 ^^^^^^^^^^^^^^^^^^^^ 1 配置参数说明 ################################ * FRESHIFT_SPEED_MODE_QUALITY:滤波器音阶数 滤波器音阶数配置范围[2, 8],音阶数越大,运算量越大; * FRESHIFT_USE_LONG_FILTER:是否使用加长滤波来减少镜像频率 * FRESHIFT_USE_BAND_RESTICT:移频较多的时候,选择是否加入抗混叠滤波,减少混叠的使能标志 * howling_work_buf:移频啸叫抑制运算需要的buff 根据移频方式和滤波器音阶数决定buff大小,可通过ops->need_buf()接口获取大小; .. image:: get_pitchshift_buff_size.png :alt: "图1 pitch_shifting buff大小获取" :align: center .. centered:: 图1 pitch_shifting buff大小获取 ^^^^^^^^^^^^^^^^^^^^ 2 相关函数 ################################ 2.1 函数void \*link_pitchshift_howling_sound(void \*p_sound_out, void \*p_dac_cbuf, void \**pp_effect, u32 sr) ************************************************************************************************************** 该函数为串联音频链路的标准接口,实现响应算法的启动,并添加到音频链路上,其中参数: :: 1、p_sound_out:当前算法的前级音频通道句柄; 2、② p_dac_cbuf:输出的音频buff; 3、pp_effect:存放当前音效算法控制句柄指针的指针; 4、sr:当前输入音频的采样率,线性移频时采样率要和音源一致,否则会出现移频和配置频率不一致; 5、返回值:启动之后最新的音频通道句柄; 2.2 函数void \*pitchshift_howling_api(void \*obuf, u32 sr, void \**ppsound) ***************************************************************************** 该函数用于初始化移频抑制啸叫(pitchshifter_howling)的相关参数,由函数link_pitchshift_howling_sound()调用即可,需要关注的其内部参数的初始化: :: 1、effect_v:移频方式,可选EFFECT_HOWLING_PS或EFFECT_HOWLING_FS; 2、ps_parm:等比移频,建议范围[-350, 350],归一化系数为8192,effect_v置上EFFECT_HOWLING_PS有效; 3、fs_parm:线性移频,单位Hz,向高频移取正数,向低频移取负数,effect_v置上EFFECT_HOWLING_FS有效; 2.3 函数void update_howling_parm_fs_api(u32 sr, s16 new_fs) ***************************************************************************** 该函数用于动态更新线性移频参数 :: 1、sr:采样率; 2、new_fs:需要更新的线性移频参数; .. note:: 使用该函数前,在初始化需要移频方式 选中 线性移频,否则该函数调用无效。 .. image:: update_fs_init.png :alt: "图2 更新线性移频参数前初始化需要采用线性移频方式 " :align: center .. centered:: 图1 更新线性移频参数前初始化需要采用线性移频方式