View License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from
Simple real Fourier series approximation

Join the 15-year community celebration.

Play games and win prizes!

» Learn more

5.0
5.0 | 9 ratings Rate this file 55 Downloads (last 30 days) File Size: 3.39 KB File ID: #31013 Version: 1.0.0.1
image thumbnail

Simple real Fourier series approximation

by

Matt Tearle (view profile)

 

11 Apr 2011 (Updated )

Computes coefficients for the real Fourier series approximation to a data set.

| Watch this File

File Information
Description

Includes two functions: Fseries.m and Fseriesval.m
[a,b] = Fseries(X,Y,n) fits an nth-order Fourier expansion of the form
  y = a_0/2 + Sum_k[ a_k cos(kx) + b_k sin(kx) ]
to the data in the vectors X & Y, using a least-squares fit.

Y = Fseriesval(a,b,X) evaluates the Fourier series defined by the coefficients a and b at the values in the vector X.

Extra arguments allow for rescaling of X data and sin-only or cosine-only expansions.

Example:
% Generate data
x = linspace(0,2,41)';
y = mod(2*x,1);
% Use FSERIES to fit
[a,b,yfit] = Fseries(x,y,10);
% Evaluate on finer grid
xfine = linspace(0,2)';
yfine = Fseriesval(a,b,xfine);
% Visualize results
plot(x,y,'x',x,yfit,'o',xfine,yfine)

This generates the attached image of a 10-term Fourier series approximation of a sawtooth wave.

MATLAB release MATLAB 7.11 (R2010b)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (16)
20 May 2016 Matt Tearle

Matt Tearle (view profile)

@Amir Zakaria: Thanks for the feedback. I just had a look at what the Curve Fitting app is doing at its "Fourier" option includes the fundamental frequency as one of the fit parameters. So it's fitting a_k cos(w*k*x), where the coefficients a_k *and* the frequency w are parameters. My function is intended for just plain Fourier series expansion (a_k cos(k*x)). If you call Fseries with the scaling option set to false, and run the Curve Fitting app with w forced to 1 (you can set bounds on the parameters with "Fit Options"), you get the same values. Hope that helps.

Comment only
20 May 2016 Amir Zakaria

I found this very useful, but when i compare the same number of coefficients for example 5 using this function and using cftool, i have different values. can someone explain why?

15 May 2016 Zachary Hugo  
19 Nov 2015 ding

ding (view profile)

very good tool

24 Apr 2014 Moisés  
25 Feb 2013 Chihan

Chihan (view profile)

 
22 Sep 2012 Kevin Hammonds

Does anyone know if there is a way to extract a_o , a_n, and b_n from the command line or the script in the more general cos and sin terms?

Comment only
12 Aug 2012 Tillmann

Really great!
But, how can I visualize more than one period?

14 Jul 2012 Miguel Angel

I have a question: I've used your code to fit a Fourier series to a set of data (t,x). However, when I apply the same found coefficients to a different vector of time t', I do not obtain the same function (I expected that were the case). What can be occuring? Thank you so much in advance.

Comment only
13 Jul 2012 Miguel Angel

Very fast and useful.
Thank you very much.

Comment only
13 Jul 2012 Miguel Angel  
21 Nov 2011 Christiaan Tol

very helpful, thanks! I used it for my project

10 Nov 2011 Matt Tearle

Matt Tearle (view profile)

The expansion is in terms of sin/cos(kx) for k = 0:n, so the frequencies are simply k/L (for k from 0 to n), where L = max(x) - min(x). The units would be in inverse units of x. In the example given in the description, you can see the dominant contribution from the 4th sine term, which corresponds to a frequency of 4/(2-0) = 2 Hz (if x represented time in seconds).

Comment only
10 Nov 2011 Matt Tearle

Matt Tearle (view profile)

Thanks for the feedback, too. Glad it could help.

Comment only
26 Oct 2011 Jong-Hwan Kim

Jong-Hwan Kim (view profile)

Could you explain how to produce frequency from your code?

Comment only
26 Oct 2011 Jong-Hwan Kim

Jong-Hwan Kim (view profile)

this is a very good tool. I really like it. It helps my project. Thanks

Updates
01 Sep 2016 1.0.0.1

Updated license

Contact us