[SciPy-Dev] SciPy Goal
Travis Oliphant
travis at continuum.io
Thu Jan 5 16:48:29 EST 2012
On Jan 5, 2012, at 1:19 PM, Neal Becker wrote:
> Travis Oliphant wrote:
>
>>
>> On Jan 5, 2012, at 10:00 AM, josef.pktd at gmail.com wrote:
>>
>>> On Thu, Jan 5, 2012 at 10:32 AM, Neal Becker <ndbecker2 at gmail.com> wrote:
>>>> Some comments on signal processing:
>>>>
>>>> Correct me if I'm wrong, but I think scipy signal (like matlab) implement
>>>> only a
>>>> general purpose filter, which is an IIR filter, single rate. Efficiency is
>>>> very important in my work, so I implement many optimized variations.
>>>>
>>>> Most of the time, FIR filters are used. These then come in variations for
>>>> single rate, interpolation, and decimation (there is also another design for
>>>> rational rate conversion). Then these have variants for scalar/complex
>>>> input/output, as well as complex in/out with scalar coefficients.
>>>>
>>>> IIR filters are seperate.
>>>>
>>>> FFT based FIR filters are another type, and include both complex in/out as
>>>> well as scalar in/out (taking advantage of the 'two channel' trick for fft).
>>>
>>> just out of curiosity: why no FFT base IIR filter?
>>>
>>> It looks like a small change in the implementation, but it is slower
>>> than lfilter for shorter time series so I mostly dropped fft based
>>> filtering.
>>
>> I think he is talking about filter design, correct?
>>
>
> The comments I made were all about efficient filter implementation, not about
> filter design.
>
> About FFT-based IIR filter, I never heard of it. I was talking about the fact
> that fft can be used to efficiently implement a linear convolution exactly (for
> the case of convolution of a finite or short sequence - the impulse response of
> the filter - with a long or infinite sequence, the overlap-add or overlap-save
> techniques are used).
Sure, of course. It's hard to know the way people are using terms. I agree that people don't usually use the term IIR when talking about an FFT-based filter (but there is an "effective" time-domain response for every filtering operation done in the Fourier domain --- as you noted). That's what I was referring to.
It's been a while since I wrote lfilter, but it transposes the filtering operation into Direct Form II, and then does a straightforward implementation of the feed-back and feed-forward equations.
Here is some information on the approach:
https://ccrma.stanford.edu/~jos/fp/Direct_Form_II.html
IIR filters implemented in the time-domain need something like lfilter. FIR filters are "just" convolution in the time domain --- and there are different approaches to doing that discrete-time convolution as you've noted. IIR filters are *just* convolution as well (but convolution with an infinite sequence). Of course, if you use the FFT-domain to implement the filter, then you can just as well design in that space the filtering-function you want to multiply the input signal with (it's just important to keep in mind the impact in the time-domain of what you are doing in the frequency domain --- i.e. sharp-edges result in ringing, the basic time-frequency product limitations, etc.)
These same ideas come under different names and have different emphasis in different disciplines.
-Travis
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scipy-dev/attachments/20120105/6a2e7da7/attachment.html>
More information about the SciPy-Dev
mailing list