Is anybody familiar with Gustafson's algorithm for minimizing transients in forward backward filtering [1]? I'm trying to implement it and my first guess was to check Matlab's filtfilt.m, since they are referencing the paper. In the Matlab function also a linear equation system is solved in order to find initial conditions zi that minimize the startup transients, but the relationship between reference and code is not obvious to me. The only lines of code regarding the minimization are (nfilt is the length of the coefficient vectors):
zi = ( eye(nfilt-1) - [-a(2:nfilt), [eye(nfilt-2); zeros(1,nfilt-2)]] ) \...
( b(2:nfilt) - b(1)*a(2:nfilt) );
Can anybody point me in the right direction on how those lines relate to the algorithm described in Gustafson's article?
[1] Gustafsson, F. "Determining the initial states in forward-backward filtering." IEEE® Transactions on Signal Processing. Vol. 44, April 1996, pp. 988–992.
filtfilt()
i cannot see why. i have not read the Gustafson paper (i'm not IEEE and can't get it for free, anyone who has a copy is welcome to email me a .pdf of it). in using the concept offiltfilt
, one can do it to an entire file of samples (for me it would be an audio or sound file, like a .wav) first forward filter the sound with it zero-padded on the end by as long as you expect the impulse response of the forward filter to be. that lengthens the file, but the output gets virtually to zero. then run the resulting file through the filter backwards. $\endgroup$filtfilt
in real time by breaking the input into blocks of samples, zero-padding each block, filtering the blocks backward but keeping the "tails" flipping it back around to the forward direction and overlap-adding. Powell-Chau did not do this, but i think this is a good application of Truncated IIR filters, so you know when the decaying block output ends. $\endgroup$