[SciPy-User] variable smoothing kernel

Wolfgang Kerzendorf wkerzendorf at googlemail.com
Sun Mar 27 09:41:45 EDT 2011


I guess by FIR-filters you don't mean Far InfraRed ;-). I guess if I 
describe my specific case in more detail than that might help:
My Signal is an optical spectrum which has nm on the x axis and 
intensity on the y. I am trying to simulate the effects of the optical 
properties of a real spectrograph on synthetic spectra. Basically we 
describe this as the resolution (R) = lambda/(fwhm(lambda). That's why I 
have a variable kernel size. So for the moment I interpolate the evenly 
linear spaced spectrum on log space spectrum (I use splrep and splev 
with k=1, rather than interp1d. I hope that's a good idea) and then 
calculate the kernel size and use ndimage.gaussian_filter1d.

Ah while we are on the topic: I sometimes have synthetic spectra which 
are irregularly sampled. This means what I am doing is resampling it on 
a linear grid using smallest wavelength delta (which can be quite 
small). This obviously expands the spectra to many times its original 
size. Then I would resample it on a log spacing where the largest delta 
is equal to the smallest delta on the linear scale. This makes it even 
larger. There is probably a much smarter way.

I should also mention that my knowledge about signal processing is limited.

Your help is very much appreciated,
      Wolfgang

On 27/03/11 11:24 PM, Sturla Molden wrote:
> Den 27.03.2011 03:54, skrev Wolfgang Kerzendorf:
>> I have learned that multiplying functions in fourier space is the same
>> as convoluting them.
>
> Yes.
>
> The best strategy is to do this chunk-wise, however, instead of 
> FFT'ing the whole signal. This leads tot he so-called 
> "overlap-and-add" method, used by e.g. scipy.signal.fftfilt. fftfilt 
> tries to guess the optimum chunk-size to use for filtering.
>
> For short FIR-filters it will be faster to filter in the time-domain.
>
> For moving average filters one can use a very fast recursive filter. 
> Bartlet filter can be implemented by appying MA twice, Gaussian can be 
> approximated by applying MA four times. (A better IIR-approximation 
> for the Gaussian is available, howver, see below.)
>
>
>> I believe that is how the ndimage kernels work so
>> incredibly fast.
>
> No. They truncate the Gaussian, which is why compute time depends on 
> filter size. Cf. the comment on short FIR-filters above.
>
> For the Gaussian it is possible to use a recursive IIR filter instead, 
> for which compute time does not depend on filter size.
>
>
>
>> I wanted to see if there's a similar shortcut for a variable kernel.
>
> Not in general, because the filter will be non-linear.
>
>
> Sturla
>
>
>
>
>
> _______________________________________________
> SciPy-User mailing list
> SciPy-User at scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20110328/2bcd90ab/attachment.html>


More information about the SciPy-User mailing list