0
$\begingroup$

I have a beginners question. I just installed Audiovero Acourate. This software create FIR filters for room correction of my loud speakers. The filters are .wav files which then should be used by a convolution engine, like jconvolver or brutefir on Linux.

Now, I decided to try to setup a convolution engine on Windows instead, since there are several pain points (software and driver / hardware) on Linux. I now use Equalizer APO on Windows for the convolution.

My question is: Is there any difference between convolution engines for IIR and FIR filters? And is there a difference in sound quality using either convolution engine?

I could not find much info about the convolution engine within Equalizer APO. I‘m just interested in best audio quality.

$\endgroup$
  • $\begingroup$ The main difference should be the linearity of the phase. This means you'll have to use your ears to determine if the resulting processing is to your liking. But the convolutions are different, yes, since IIR=/=FIR, but that should not be transparent to the user. $\endgroup$ – a concerned citizen Jul 4 '18 at 6:21
  • $\begingroup$ sound quality is very subjective. I think you need to decide for yourself. $\endgroup$ – Stanley Pawlukiewicz Jul 5 '18 at 4:48
  • 1
    $\begingroup$ OP, since your question has been answered, consider marking it as accepted. $\endgroup$ – jojek Jul 5 '18 at 11:17
2
$\begingroup$

Is there any difference between convolution engines for IIR and FIR filters? And is there a difference in sound quality using either convolution engine?

A convolution engine performs convolution the discrete version of which is:

$$y[n] = \sum_{k=0}^{|h|-1}x[n-k] \cdot h[k]$$

Where:

  • $n$ denotes discrete time
  • $|\cdot|$ denotes length of sequence (so $|h|$ means, the length of the impulse response).
  • $y$ is the output
  • $x$ is the input
  • $h$ is impulse response

Notice here that this formula is giving you $y[n]$. This means that to calculate one time instance for the output you need to take into account $|h|-1$ time instances in the past of the signal ($x[n-k]$ for $k=0$ is the present value).

Both Finite Impulse Response (FIR) and Infinite Impulse Response (IIR) filters can theoretically be expressed via convolution.

But, in the case of IIR filters, $|h|=\infty$. Therefore, to produce a given $y[n]$, you would have to wait forever. What is really done in practice given an IIR filter is to truncate its impulse response when this has decayed sufficiently. The alternative (still in the case of IIR filters) is to implement them in one of the standard forms. In that case, you are implementing a recursive difference equation that produces one $y[n]$ as a combination of a finite set of past values of both its input and output. As a side note, the fact that the filter now has feedback from its output back to its input is what makes it IIR as there are now conditions by which numbers can circulate forever in that loop without necessarily decaying to zero.

Therefore:

  1. When referring to a "...convolution engine" we are talking about FIR filters.

  2. Because of the fact that you would have to truncate the IIR impulse response to express it via convolution, yes the result can be different.

I could not find much info about the convolution engine within Equalizer APO. I‘m just interested in best audio quality.

Equalizer APO can do both types of filters (look into filters/) plus special implementations for some standard filters. For example, if you look into filters/IIRFilter.cpp and specifically the function IIRFilter::process(), you will see exactly the two iterations that apply coefficients to an input buffer, an output buffer and finally produce an output value. And if you look into filters/ConvolutionFilter.cpp you will notice that it performs convolution via FFT (faster) and libHybridConv (see libHybridConv/libHybridConv.c, hcProcessSingle()).

In conclusion: "Best audio quality..." depends on the workload of your machine. A sufficiently long IIR filter would not sound too different than an FIR one. And at the same time, long filters take more time to calculate. This is further worsened if you want to apply the filter in more than one channels (and I am not talking multiple speakers here, just going stereo means applying one convolution per channel. You should also take into account the comments about the sound quality being subjective here :) ).

However, you might be able to take the results of your room's impulse response, prioritise which "problems" you want to correct and then use a simple graphic equaliser to correct those problems in particular.

You can run a simple graphic EQ, whether in Equalizer APO or any other VST host and then re-route your audio source to be going first through the VST filter and then to the output.

Hope this helps.

$\endgroup$

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.