Login  Register

Re: Fourier fitting

Posted by Michael Schmid on May 02, 2018; 12:56pm
URL: http://imagej.273.s1.nabble.com/Fourier-fitting-tp5020599p5020605.html

Hi Greg,

curve fitting with too many parameters is generally unreliable, so the
command is limited to 6 parameters.
If you use Java to access the CurveFitter you can rewrite the problem
  y = a + b*[cos("+2*PI/24+" * x + c) + d*cos("+4*PI/24+" * x + e) +
f*cos("+6*PI/24+" * x + g)]

Then the 'a' and 'b' parameters can be eliminated from the internal
action of the CurveFitter with
   cf.setOffsetMultiplySlopeParams(0, 1, -1)
(where 'cf' is the CurveFitter), and only parameters c-g need to be
fitted (a and b are calculated directly via linear regression). This
makes the fit more reliable (and faster).

If you don't need the phases, only the amplitudes, a Fourier transform
might provide a rough solution. See the Array.fourier(array, windowType)
macro function. If the frequencies are integer (as in your case), best
use the 'Hann' window type.

Michael
________________________________________________________________
On 01/05/2018 23:22, Gregory James wrote:

> Hello ImageJ community,
>
> I am a familiar user of the curve fitting feature but I am struggling with a problem...
>
> I want to perform a Fourier fit with 3 harmonics. The code I'm using is therefore:
>
> FourierFit = "y = a + b*cos("+2*PI/24+" * x + c) + d*cos("+4*PI/24+" * x + e) + f*cos("+6*PI/24+" * x + g)";
> Fit.doFit(FourierFit, Xarray, Yarray);
> Fit.plot();
>
> There are 24 elements in my X and Y arrays. For whatever reason, ImageJ takes issue with the coefficient 'g' saying that it is an undefined variable. When I strip out the 3rd harmonic the code works fine so this is really puzzling me.
>
> Does anyone know what's going on here?
>
> Alternatively, can anyone see an easier way of performing a Fourier fit?
>
> Many thanks,
>
> Greg.

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html