Re: Efficiently compute Fourier coefficients for discrete function
- To: mathgroup at smc.vnet.net
- Subject: [mg105453] Re: Efficiently compute Fourier coefficients for discrete function
- From: dh <dh at metrohm.com>
- Date: Thu, 3 Dec 2009 06:14:55 -0500 (EST)
- References: <hf5jko$qrd$1@smc.vnet.net>
Kelly Jones wrote: > Mathematica-wise, how to efficiently compute the Fourier coefficients > for a function defined at finite "random" points. Example: > > This defines Sin[3*x] for 100 random values of x: > > l = Table[Random[],{i,1,100}] > l2 = Table[{l[[i]],Sin[3*l[[i]]]},{i,1,Length[l]}] > > This calculates the nth Fourier coefficient: > > pfourier[s_,n_] := Sum[s[[i]][[2]]*Exp[-I*n*s[[i]][[1]]], {i,1,Length[s]}] > > (I realize I'm off by a factor of pi; I'm only interested in relative > size for now). > > As expected, the imaginary/sine part of the 3rd coefficient has the > greatest magnitude: > > Table[Im[pfourier[l2,n]],{n,1,10}] > > I could compute pfourier[l2,n] for all n, but that seems inefficient. > > Is there a simpler function (similar to Fourier and FourierTransform) > that does this? > Hi Kelly,$ there is no ready made function for this, but you may easily mke one. E.g: ff[d_] := d[[All, 2]] . Exp[-I # d[[All, 1]]] & /@ Range[0, Length[d]]; and then ff[l2] would give the transformed data. Daniel