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