4
$\begingroup$

I am trying to track down references (published articles or reports ideally) that establish the basis for some of the techniques being used to minimize the effect of recursive digital filter startup transients on the sampled signal. My specific application is the digital filtering of acceleration signals that have already been acquired (post-processing). The examples below are based on Python and the scipy.signal module.

An example of the techniques I am referring to is illustrated in scipy.signal.filtfilt (and presumably the Matlab version). In this function, there are options to specify a padding type and padding length presumably to get the filter initialized and dissipate the transient before running into the "real" data. Another technique and a reference to F. Gustaffson, “Determining the initial states in forward-backward filtering”, Transactions on Signal Processing, Vol. 46, pp. 988-992, 1996, is also implemented in the filter.

Another example is scipy.signal.lfilter_zi that describes a technique in the notes to set the initial filter delays from the initial value of the signal. (Interestingly, this is also implemented within the filtfilt function referenced above, in addition to the padding.) The notes describe the derivation of the technique, but there are no references in the source code for this function. There is also no discussion of the pros and cons of this technique. I have found a reference that seems to describe this technique by Fletcher (1973). Can someone confirm that this is the correct, general reference?

Another source I have found for a more general technique is a report out of MIT by Chornoboy (1990). I have not seen this technique implemented in any libraries and I have not found a comparison of this technique with others, other than what is in the report. This report mentions the Fletcher report.

Finally, I have perused a number of books on digital signal processing. The book I own ("Digital Filters" by Hamming) specifically states that a general-purpose technique that is independent of the input signal has not been found. Other books do not mention the filter startup transient or, if it is mentioned, practical methods to minimize the effect are not discussed.

Is anyone aware of a single resource that discusses each of these techniques in the context of post-processing (filtering) digital signals? Short of that, are there any references for the (obvious) technique of padding the signal and discussing the various techniques of padding (i.e. odd, even, constant)?

$\endgroup$
  • $\begingroup$ Take a look at this question and its answers discussing Matlab's (and Octave's) filtfilt implementation. I don't know of any article that covers all the methods you've mentioned. $\endgroup$ – Matt L. Nov 4 '18 at 20:39
2
$\begingroup$

For a given fequency response magnitude, a minimum phase filter implementation will have the shortest possible transient duration.

A minimum phase filter will have most of its energy packed at the beginning. Hence it's also called as a maximum energy filter. So it will produce steady state outputs as soon as possible (among the set of filters having the same frequency response magnitude)

However, a minimum phase filter cannot be linear phase simultaneously. Because linear phase filter would have a symmetric impulse response but that would also imply transfer function zeros outside of unit circle. Consequently it cannot be a minimum phase filter at the same time as for a minimum phase filter all the poles and zeros of transfer function are inside the unit circle.

Alternatively, if you have some reliable estimation of the initial samples, before $n=0$, of the input signal, then you can initialize the filter according to those values instead of a full blind zero initialization.

$\endgroup$
1
$\begingroup$

In the control theory literature, this is known as bumpless transfer --- meaning that we want to change the controller from one to another without adverse transients resulting.

For python, this page seems to have an example specific to python and controls. I'm not sure it'll help what you're after.

$\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.