Speex 中回声消除的远端信号FFT变换

采样率48k, 单声道,10ms的数据,共480个采样点。

原始远端信号

Speex 中回声消除的远端信号FFT变换_第1张图片
原始远端信号

FFT变换前的远端数据x

执行如下代码后:

for (speak = 0; speak < K; speak++)
    {
        for (i = 0;i < st->frame_size; i++)
        {
            spx_word32_t tmp32;
            st->x[speak*N + i] = st->x[speak * N + i + st->frame_size];

            tmp32 = SUB32(EXTEND32(far_end[i * K + speak]), 
                          EXTEND32(MULT16_16_P15(st->preemph, st->memX[speak])));

#ifdef FIXED_POINT
            /*FIXME: If saturation occurs here, we need to freeze adaptation for M frames (not just one) */
            if (tmp32 > 32767)
            {
                tmp32 = 32767;
                st->saturated = M+1;
            }      
            if (tmp32 < -32767)
            {
                tmp32 = -32767;
                st->saturated = M+1;
            }      
#endif
            st->x[speak * N + i + st->frame_size] = EXTRACT16(tmp32);

            st->memX[speak] = far_end[i * K + speak];
        }
    } 
Speex 中回声消除的远端信号FFT变换_第2张图片
保存远端信号的x的示意图

主要进行了2个操作:

  1. 将B的内容拷贝到A


    Speex 中回声消除的远端信号FFT变换_第3张图片
    x中数据变换示意图
  2. 将远端far_end的数据进行语音预加重(加重高频部分)后,放在B。

Speex 中回声消除的远端信号FFT变换_第4张图片
FFT变换前的远端数据x 示意图

FFT变换后的X

Speex 中回声消除的远端信号FFT变换_第5张图片
FFT变换后的X

你可能感兴趣的