同一個文件48k,重采樣為32k本慕,16k,8k侧漓。
使用Speex的回聲消除功能锅尘,
frame_size: 10ms的數(shù)據(jù)
filter_length: 100ms的數(shù)據(jù)。
近端和遠(yuǎn)端用同一個pcm文件布蔗,如果成功消除藤违,那么輸出應(yīng)該為一條直線。
SpeexDSP 1.2rc3 測試結(jié)果
使用最新版本的SpeexDSP 1.2rc3:
測試結(jié)果如下(看到的是徹底消除時間):
8k
16k
32k
48k
結(jié)果
SpeexDSP 1.2rc3 測試結(jié)論:
看出徹底消除時間都在2秒左右纵揍,可見采樣率對徹底消除時間的影響不大顿乒。
Speex Version 1.1.15 測試結(jié)果
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
測試結(jié)果如下(看到的是徹底消除時間):
8k
16k
32k
48k
測試數(shù)據(jù)總結(jié):
測試數(shù)據(jù)
注: adapt時間,是指第一次執(zhí)行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\n", elapsed, g_nCnt * 10);
}
Speex Version 1.1.15 結(jié)論:
采樣率變化幾乎收斂時間沒有影響特漩。
采樣率越小,徹底消除時間越短骨杂。
8k涂身,16k時反映比較明顯。
32k和48k時搓蚪,徹底消除時間差別不大蛤售。
總體結(jié)論
還是建議使用最新版本的libspeexdsp
-
Speex DSP Source Code
SpeexDSP 1.2rc3 測試可以看出:
徹底消除時間都在2秒左右,可見采樣率對徹底消除時間的影響不大妒潭。