fluid-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [fluid-dev] A change to the IIR filter


From: David Henningsson
Subject: Re: [fluid-dev] A change to the IIR filter
Date: Tue, 05 Apr 2011 05:51:50 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.15) Gecko/20110307 Thunderbird/3.1.9

On 2011-04-04 17:52, Krzysztof Foltman wrote:
On 03/04/11 10:38, David Henningsson wrote:

3) I'm not an IIR filter expert, and so I'm a little out on deep water
here and I'm not completely sure this is the right way to fix it. If
you happen to know any digital filter algorithm expert, feel free to
ask him/her to review the code :-)


The whole problem is a royal PITA for everyone.

www.dafx.ca/proceedings/papers/p_057.pdf
http://www.acoustics.hut.fi/~vpv/publications/icassp98-trel.pdf

And this thread on KVR:
http://www.kvraudio.com/forum/viewtopic.php?p=4134891

I had some success interpolating filter coefficients for a number of
frames (say, 64), but this is just a partial solution. The problem is,
depending on filter implementation there may be a risk of coefficients
getting out of the unit circle, causing temporary instability.

There are some clever solutions to try. For example, interpolating
log(magnitude) and phase of the poles/zeros separately, so that the
poles never get outside of the unit circle and the amplitude changes are
"even". But it sounds like a rather CPU-consuming approach and I never
tried that myself.

K.

Thanks for the input - seems like you know much more about the background and math behind this formula than I do. Have you had a look at the code? The old code would linearly interpolate a and b coefficients over FLUID_BUFSIZE = 64 samples. What I came up with was to modify w(n) based on changes of b, if b changes rapidly. Might be kind of hacky, so I'm happy for some input for a more correct and/or faster approach. I understand that there isn't something that's both optimal and fast, so do you have any suggestion on a best compromise that would work for FluidSynth?

// David




reply via email to

[Prev in Thread] Current Thread [Next in Thread]