Is it a realistic mapping to divide the frequency bins in 3 parts, high/mid/low frequencies?

How can these bins then be manipulated to control the level of these bands in the time domain?

Is it sufficient to adjust these bin segments and do an iFFT to time domain?

  • $\begingroup$ I think you want an equaliser, which is best formulated using time domain filters. For a basic implementation please consult the famous EQ cookbook at musicdsp.org/files/Audio-EQ-Cookbook.txt $\endgroup$ – Jazzmaniac Apr 19 '14 at 10:35

while you could do this in the frequency domain, there are many problems with this approach, some of which are outlined here.

A better approach is to use a time domain filter. There is a tutorial here.


Even if you want to do the filtering strictly in the frequency domain using FFTs, you will still need to compute the time-domain impulse response of your desired multi-band frequency modification and somehow limit the length of this impulse response that is above some noise floor. Then you will need to use longer FFTs and IFFTs that are as long or longer than the sum of the length of this impulse response plus the length of your data windows. If you want to process blocks or windows shorter than the entire length of your signal (entire song, etc.), then you will additionally have to use overlap-add or overlap-save processing to combine all the FFT fast convolution filter results.

If you don't do the above, you will get circular convolution artifacts corrupting your filter output.

Thus, even frequency domain filtering requires some creation and analysis of a time domain filter kernel, which may turn out to be non-trivial.

You may also need to evaluate the frequency response between your modification points (FFT bins, etc.), which can end up extremely distorted (ripple, pre-ring, etc.) near any sudden changes in your desired frequency control adjustments.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.