Re: maximum entropy method for deconvolution
- To: mathgroup at smc.vnet.net
- Subject: [mg75432] Re: [mg75403] maximum entropy method for deconvolution
- From: "turnback" <turnback at bluebottle.com>
- Date: Mon, 30 Apr 2007 03:41:28 -0400 (EDT)
- References: <200704281000.GAA09123@smc.vnet.net>
Hi,
Your problem is a deconvolution problem. It is difficult in general. But
since your function p is simply a rectangle function, things may not be that
bad.
Let me define t0:=33.6, g(t):=G, f(t):=F
Then according to the definition of convolution, we can get:
g(t)=Integrate[f(s), {s, t-t0, t}]
and for any small dt, we can get:
==> g(t+dt)=Integrate[f(s), {s, t+dt-t0, t+dt}]
==> g(t+dt)-g(t)
=Integrate[f(s), {s, t+dt-t0, t+dt}]-Integrate[f(s), {s, t-t0, t}]
=Integrate[f(s), {s, t, t+dt}]-Integrate[f(s), {s, t-t0, t-t0+dt}]
=Integrate[f(s)-f(s-t0), {s, t, t+dt}]
define l(t):=f(t)-f(t-t0), then
g(t+dt)-g(t)=Integrate[l(s), {s,t,t+dt}]
==> Limit[(g(t+dt)-g(t))/dt,dt->0] = Limit[(Integrate[l(s),
{s,t,t+dt}])/dt,dt->0]
Suppose g(t) is differentiable, then
==> g'(t)=l(t)=f(t)-f(t-t0)
then performing Fourier transform:
==> I*w*G(w)=(1-Exp[-I*w*t0])*F(w)
==> F(w)=G(w)*I*w/(1-Exp[-I*w*t0])
With inverse transform, you get f(t).
By the way, According to my knowledge, p's Fourier transform is a Sinc
function. When you claim function p has a lot of zeros in the frequency
domain, you may implement the transform by using Discrete Fourier Transform
and you pick up a specific sampling rate. If real time performance is not
your concern, try to increase your sampling rate a lot. You should get
correct result with your original approach.
After all, I just realise that instead of writing
p=UnitStep[t]*UnitStep[33.6-t], you can write it as:
p[t]=UnitStep[t]-UnitStep[t-33.6]. You may find much easier proof.
hui.
----- Original Message -----
From: "dantimatter" <dantimatter at gmail.com>
To: <mathgroup at smc.vnet.net>
Sent: Saturday, April 28, 2007 6:00 AM
Subject: [mg75432] [mg75403] maximum entropy method for deconvolution
>
> hello all,
>
> first off, many thanks to 'Roman' et al for all the previous help with
> my inversion problem.
>
> i have a convolution function G which is the convolution of F and p (G
> = F**p). i know G and i know p, and i'd like to extract F. i can do
> this by taking the Fourier transform of G, dividing by the Fourier
> transform of p, and inverting the result to get F. the problem is
> that p is a step function (p = UnitStep[t]*UnitStep[33.6-t]) which has
> a lot of zeros in frequency space, and thus it is difficult to get at
> F via inversion. Mathematica is happily doing the inversion but the
> results are very noticeably wrong.
>
> i understand from my conversations with some of you and much time
> spent in the library that this is in general a difficult problem, but
> there are some methods that are known to make this type of problem
> tractable, such as the maximum entropy method (MEM) for inversion. is
> anyone aware of an implementation of a MEM algorithm in Mathematica?
> i have read Numerical Recipes a couple of times and i am unable to get
> my head around the relevant chapter. If there isn't a Mathematica
> implementation, perhaps someone could offer some advice on where else
> to look? if it exists, a "for dummies" type book with step-by-step
> instructions would be the best resource for me...
>
> cheers,
> dan
>
>
>
----------------------------------------------------------------------
Find out how you can get spam free email.
http://www.bluebottle.com
- References:
- maximum entropy method for deconvolution
- From: dantimatter <dantimatter@gmail.com>
- maximum entropy method for deconvolution