Reply by feli...@hotmail.com August 12, 20122012-08-12
Hello all,
>
>I had some questions regarding audio compression (bit reduction) using the Short Time Fourier Transform.
>
>I am trying to implement this in MATLAB.
>For the STFT, my method has been as follows:
>1. Window the desired signal by multiplying the signal with a rectangle of desired length (256 pts for example)
>2. Perform an FFT on each of these short time sections
>3. Look at the frequency response of each of these short time sections and eliminate (set to 0) any components that are below a certain threshold
>4. Perform an IFFT on each of these short time sections
>5. Reconstruct the signal by stitching together each of the windowed sections
>
>When I reconstruct the signal, based on the window length I use as well as the thresholding I perform, I can see a clear degradation in the clarity of the signal. By varying these two factors, I can get to the point where the audio is not intelligible anymore. However, when I try to write this file back into a .wav to compare with the original sound file, the two are identical in file size. I understand I am writing the new "compressed" version of the signal with the same # of bits, but then I don't understand how this can be used as a compression scheme.
>
>I was wondering if someone had any intuition as to whether I was going about this in the correct manner or not? Am I missing the fundamental concept of compression using STFT's or is there simply a consideration in MATLAB I am missing that is preventing me from realizing the results?
>
>Any help would be greatly appreciated!

Hello,

Firs of all, you should not use a rectangular window. The "compression" of the frames will depend on the spectral characteristics of each one. It means that if you put together 2 consecutive frames, there will be clicks or degradation just at the borders of the frames. So, instead, use a Hanning or Blackman window.

- Felipe
Reply by arpl...@gmail.com December 5, 20112011-12-05
Hello all,

I had some questions regarding audio compression (bit reduction) using the Short Time Fourier Transform.

I am trying to implement this in MATLAB.
For the STFT, my method has been as follows:
1. Window the desired signal by multiplying the signal with a rectangle of desired length (256 pts for example)
2. Perform an FFT on each of these short time sections
3. Look at the frequency response of each of these short time sections and eliminate (set to 0) any components that are below a certain threshold
4. Perform an IFFT on each of these short time sections
5. Reconstruct the signal by stitching together each of the windowed sections

When I reconstruct the signal, based on the window length I use as well as the thresholding I perform, I can see a clear degradation in the clarity of the signal. By varying these two factors, I can get to the point where the audio is not intelligible anymore. However, when I try to write this file back into a .wav to compare with the original sound file, the two are identical in file size. I understand I am writing the new "compressed" version of the signal with the same # of bits, but then I don't understand how this can be used as a compression scheme.

I was wondering if someone had any intuition as to whether I was going about this in the correct manner or not? Am I missing the fundamental concept of compression using STFT's or is there simply a consideration in MATLAB I am missing that is preventing me from realizing the results?

Any help would be greatly appreciated!