[Speex-dev] Downsampling

Thorvald Natvig speex at natvig.com
Tue Jun 7 13:16:38 PDT 2005

Ok, this is slightly offtopic, but relates to the quality of input for 
speex :)

I'm working on echo cancellation by means of sampling the wave mix 
of the sound card as well as the microphone. I originally had two sound 
cards, which had some synchronization problems (now solved, more or 
less), but I have also discovered a much better solution using ASIO 2.0, 
which enables me to sample multiple sources on the same soundcard.

Unfortunately, ASIO is limited to the internal sampling frequency of the 
sound card, which for my Audigy 2 is 48 khz, and only delivers stereo. As 
I understand it, just picking every 3rd sample and averaging left and 
right will introduce aliasing, so I added a FIR-filter to remove all 
components above 7.5 khz before downsampling. While I can't say I really 
notice any difference in audible audio quality, the samples seem to have 
slightly better SNR when inspected in various audio programs.

However, I still downmix to mono by just averaging the left and right 
samples, which (from my googling) I can tell will introduce aliasing but I 
found no good highquality solution to this :(

The question is, is this FIR-decimator the best method to downsample? I 
thought of converting the frame to the frequency domain, drop components 
> 8khz and convert back, but I'm not sure if that would produce a 
better signal or worse.

Also, would it be best to do echo cancellation and preprocessing at 48khz 
and then decimate to 16khz, or (as I currently do) decimate first then do 
echo cancellation and preprocessing?

More information about the Speex-dev mailing list