I am using cftool in Matlab to fit time series values to Fourier model with 8 terms:

 General model Fourier8:
 f(x) =
           a0 + a1*cos(x*w) + b1*sin(x*w) +
           a2*cos(2*x*w) + b2*sin(2*x*w) + a3*cos(3*x*w) + b3*sin(3*x*w) +
           a4*cos(4*x*w) + b4*sin(4*x*w) + a5*cos(5*x*w) + b5*sin(5*x*w) +
           a6*cos(6*x*w) + b6*sin(6*x*w) + a7*cos(7*x*w) + b7*sin(7*x*w) +
           a8*cos(8*x*w) + b8*sin(8*x*w)

But I don't understand how Matlab calculate a and b coefficients. I found in literature that I can use formulas:

ak=2/n * sum ( x(t) cos (2*pikt/n))

bk=2/n * sum ( x(t) sin (2*pikt/n)) where n is number of terms in time series, k is index of current term k=1,...n, sum is with t,

but I can't get values which Matlab showed me for these coefficients.

Is Matlab General model Fourier8- formula for trigonometric Fourier series? Because in literature the first term in formula is a0/2, here is a0? Also Matlab value for a0 is not mean value. How to calculate this correct?


1 Answer 1


The cftool is going to use a curve fitting procedure. Some time of non-linear regression. In a general sense, it is a trial and error method:
1) guess a value for the coefficients 2) calculate the function with the coefficient, and determine the error between the calculated function and the original data, 3) try a new value for the coefficients, that is slightly different than the original guess. 4) go back to step 2, and keep going until the error is sufficiently small.

cftool is a very general tool that can be used for all kinds of problems, not just fourier series. cftool has no idea that you are trying fit a fourier series. In a general sense, it really is no different than if you just tried a whole bunch of combinations until you found one that worked, it's just that because it is a computer it can try many thousands of combinations in a second.

The formulas you showed, on the other hand, are the actual expression for calculating a fourier series. Depending on your data, cftool will probably never match these exactly, although it might get close. The reason it doesn't match is that there may be many different combinations that match the data fairly well, and cftool cannot tell the difference between them. One way to help cftool get closer would be to give it more data to work with (i.e. a longer sample).

Depending on what your goal is, you might just want to use the closed form expression for a fourier series. that will be the most accurate, and probably quicker to compute anyway.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.