[SciPy-User] deconvolution of 1-D signals

Friedrich Romstedt friedrichromstedt at gmail.com
Mon Aug 1 16:22:18 EDT 2011


Hi Ralf,

2011/7/31 Ralf Gommers <ralf.gommers at googlemail.com>:
> For a measured signal that is the convolution of a real signal with a
> response function, plus measurement noise on top, I want to recover the real
> signal. Since I know what the response function is and the noise is
> high-frequency compared to the real signal, a straightforward approach is to
> smooth the measured signal (or fit a spline to it), then remove the response
> function by deconvolution. See example code below.

I ran across this (see below) soon ago since I'm dealing with
information theory recently.  It has an deconvolution example included
in 1D, and it compares some different general methods in a kind-of
"unified framework", as far as this exists.  I found it quite
informative and helpful.  If you can't get access I can get it from
the library in 2 weeks.  The citation is:

Robert L. Fry (ed.), Bayesian Inference and Maximum Entropy Methods in
Science and Engineering: 21st International Workshop, Baltimore,
Maryland, AIP Conf. Proc. 617 (2002)
ISBN 0-7354-0063-6; ISSN 0094-243X
Tutorial "Bayesian Inference for Inverse Problems" (A.
Mohammad-Djafari) on page 477ff.

It includes different noise models, afair, at least the structure how
to deal with this.  If I'm not mistaken the problem discussed there
was a mass-spectrometry spectrum, so should been shot noise mainly,
and of course the psf.

The tutorial covers (in short) maximum entropy as well as maximum
likelihood, and a combination of both (hence the "unification").  I
cannot help much with this since I'm new to it myself.  But I did a
reasonable literature search, and this was one of the best outcomes.
But as said, I was about information theory.

Hope this is a useful pointer,
Friedrich

> Can anyone point me towards code that does the deconvolution efficiently?
> Perhaps signal.deconvolve would do the trick, but I can't seem to make it
> work (except for directly on the output of np.convolve(y, window,
> mode='valid')).

No.  In fact, I don't think there is an automagical solution anywhere.  :-)

Good luck!



More information about the SciPy-User mailing list