speex-DSP 源码分析AEC篇

1. 陷波器去直流

  speex采用数字陷波器去直流。数字陷波器去直流的基本原理就是在单位圆频率为0(即x轴正半轴与单位圆交点)的地方放置一个零点,并在接近零点的单位圆内放置一对共轭极点,这样即实现了去除直流分量的滤波作用;
  公式如下所示:

speex-DSP 源码分析AEC篇_第1张图片
陷波器系统函数

  极零图如下所示:
speex-DSP 源码分析AEC篇_第2张图片
极零图

speex所用的系统函数为:
speex-DSP 源码分析AEC篇_第3张图片
image.png

源码如下

static inline void filter_dc_notch16(const spx_int16_t *in, spx_word16_t radius, spx_word16_t *out, int len, spx_mem_t *mem, int stride)
{
   int i;
   spx_word16_t den2;
#ifdef FIXED_POINT
   den2 = MULT16_16_Q15(radius,radius) + MULT16_16_Q15(QCONST16(.7,15),MULT16_16_Q15(32767-radius,32767-radius));
#else
   den2 = radius*radius + .7*(1-radius)*(1-radius);
#endif
   /*printf ("%d %d %d %d %d %d\n", num[0], num[1], num[2], den[0], den[1], den[2]);*/
   for (i=0;i

你可能感兴趣的:(speex-DSP 源码分析AEC篇)