DSP

Speex 采样率对回声消除的影响

2019-07-13 18:46发布

同一个文件48k,重采样为32k,16k,8k。
使用Speex的回声消除功能,
frame_size: 10ms的数据
filter_length: 100ms的数据。
近端和远端用同一个pcm文件,如果成功消除,那么输出应该为一条直线。

SpeexDSP 1.2rc3 测试结果

使用最新版本的SpeexDSP 1.2rc3: 测试结果如下(看到的是彻底消除时间):
1720840-7b5b1b579f2f84b3.png 8k
1720840-da69e754a124dd2e.jpg 16k 1720840-23d6a8d5a9c4f0ae.png 32k
1720840-727b596190a7f63a.jpg 48k 1720840-da5d65286651d366.jpg 结果 SpeexDSP 1.2rc3 测试结论:
看出彻底消除时间都在2秒左右,可见采样率对彻底消除时间的影响不大

Speex Version 1.1.15 测试结果

Speex版本信息: #ifndef SPEEX_VERSION #define SPEEX_MAJOR_VERSION 1 /**< Major Speex version. */ #define SPEEX_MINOR_VERSION 1 /**< Minor Speex version. */ #define SPEEX_MICRO_VERSION 15 /**< Micro Speex version. */ #define SPEEX_EXTRA_VERSION "" /**< Extra Speex version. */ #define SPEEX_VERSION "speex-1.2beta3" /**< Speex version string. */ #endif 测试结果如下(看到的是彻底消除时间):
1720840-88102f393be76a78.png 8k
1720840-9d9a5b774f207363.png 16k
1720840-cc459362ad2d5ba9.png 32k
1720840-97a2322e92bba94d.png 48k 测试数据总结:
1720840-7151134d6c5e4831.png 测试数据 注: adapt时间,是指第一次执行speex_echo_cancellation到,adapt为1的时间, 我理解这个就是收敛时间。
adapt为1, 条件如下: if ( !st->adapted && st->sum_adapt > SHL32(EXTEND32(M), 15) && MULT16_32_Q15(st->leak_estimate, Syy) > MULT16_32_Q15(QCONST16(.03f,15), Syy)) { st->adapted = 1; QueryPerformanceCounter(&timeEndCount); elapsed = (((float)(timeEndCount.QuadPart - timeStartCount.QuadPart) * 1000/ timeFreq.QuadPart)); printf("elapsed : %.2f ms duration:%d ms ", elapsed, g_nCnt * 10); } Speex Version 1.1.15 结论:
  1. 采样率变化几乎收敛时间没有影响。
  2. 采样率越小,彻底消除时间越短
    8k,16k时反映比较明显。
    32k和48k时,彻底消除时间差别不大。

总体结论

还是建议使用最新版本的libspeexdsp
  • Speex DSP Source Code
    SpeexDSP 1.2rc3 测试可以看出:
    彻底消除时间都在2秒左右,可见采样率对彻底消除时间的影响不大