1
$\begingroup$

I am currently building a Reverb that needs to fit on a DSP. I am using the model proposed in this link https://ccrma.stanford.edu/~jos/pasp/Freeverb.html.

It involved to create some Feedback Comb-Filters with high orders (more than 1000). For that I use a 2nd-order section IIR filter (IIRSOS) integrated in my DSP. I am using the Matlab function "tf2sos" that takes numerator and denominator of the Transfer Function (TF) of the desire filter and create a matrix of Second Order Section (SOS) coefficient. With this coefficients, I can make what I want.

Problem : for high filter orders (arround order 200) the "tf2sos" function appears to be totally unstable. However the Matlab object called dsp.IIRFilter that use also 2nd-order section IIR seems to handle it :

Impulse response for order = 200 : Impulse response for order = 200 Impulse response for order = 1500 : Impulse response for order = 1500

On the 2nd picture you can see that the filter with the tf2sos coefficients is going totally wrong. Does someone knows how I can get a functional coefficient matrix for orders like 1500 ?

Thank you.

$\endgroup$
5
  • $\begingroup$ Hello. I'm not sure it makes sens to decompose this filter structure in to biquads, it is rather over complicating things. If you take the difference equation of the filter you'll see it's actually very simple to implement directly in code. and will use significantly less calculations than implementing it as biquads. $\endgroup$ Aug 23, 2018 at 8:22
  • $\begingroup$ Hello kippertoffee, make a single filter to design this is impossible because more the order is high more the filter is unstable. I use this kind of filter to avoid this problem, but the main problem is why the transaltion of the transfer function become unstable. $\endgroup$
    – remi
    Aug 23, 2018 at 8:59
  • $\begingroup$ The transfer function must look like something with this coefficient : numerator = [1 -0.9]; denominator = [1 zeros(1, 1000) -0.7]; $\endgroup$
    – remi
    Aug 23, 2018 at 9:04
  • $\begingroup$ I get that is the general theory, but surely if you just have one feedback coefficient, if that coefficient is < +/-1 then the filter cannot become unstable. $\endgroup$ Aug 23, 2018 at 10:08
  • $\begingroup$ @remi I agree with kippertoffee: You're taking something extremely easy – single tap IIRs (that's what a FBCF is) – and converting it to something with many different taps. That doesn't sound clever – your FBCF is stable unless it's not. $\endgroup$ Aug 23, 2018 at 12:35

1 Answer 1

4
$\begingroup$

The Schroeder/Moore implementation uses sparse IIR filters. It's extremely inefficient to implement these as regular IIR filters or biqauds.

It's much easier and more efficient to implement these directly. See for example https://ccrma.stanford.edu/~jos/pasp/Schroeder_Allpass_Sections.html

Both the comb filter and the schroeder allpass use the same structure as a regular IIR filter, but the delay(s) are not a single sample but much larger number. So the Schroeder allpass looks like any other 1rst order allpass except that the delay in there is big. If you want get technical about this

The algorithm was specifically designed to be computational efficient, hence it makes no sense using standard biquads. On the downside, it typically doesn't sound very good. Feedback delay networks tend to sound a lot better.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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