This MATLAB code provides an example of plotting a truncated Fourier series representation of a square wave signal. It computes the Fourier series in both complex exponential form (yce) and trigonometric form (yt) up to the Nth term, where N is an odd integer. It plots the original square wave, the truncated Fourier series approximations yce and yt, and their amplitude and phase spectra. The code demonstrates how to calculate and visualize truncated Fourier series representations of a periodic signal.
5. subplot(311),ylabel('Amplitude'),title('Fourier Series Representation of
x(t) with 10 Terms'),...
subplot(312),ylabel('Amplitude'),title('Fourier Series Representation of
x(t) with 30 Terms'),...
subplot(313),ylabel('Amplitude'),title('Fourier Series Representation of
x(t) with 50 Terms'),xlabel('Time (s)'),...
for i = 1:3,subplot(3,1,i),...
hold on,plot([0 2],[1 1],'r-',[2 8],[0 0],'r-',[8 10],[1 1],'r-',[10 16],[0
0],'r-',...
[0 0],[0 1],'r--',[2 2],[1 0],'r--',[8 8],[0 1],'r--',[10 10],[1 0],'r--
',[16 16],[0 1],'r--',...
[-8 -6],[1 1],'r-',[-6 -6],[1 0],'r--',[-6 0],[0 0],'r-'),hold off,...
axis([-8 16 -0.5 1.5]),plotax
end
set(gcf,'Position',fig_size)
figure(3),clf,subplot(211),plot(0,a0,'ro',n,an,'o'),axis([-5 50 -0.2
0.5]),plotax,...
hold on,plot([10.5 10.5],[-0.2 0.5],'r--',[30.5 30.5],[-0.2 0.5],'r--
'),hold off,...
xlabel('Harmonic Number'),ylabel('Amplitude'),title('Trig Fourier Series
Coefficients a_n for x(t)'),...
subplot(212),plot(n,bn,'o'),axis([-5 50 -0.05 0.35]),plotax,...
hold on,plot([10.5 10.5],[-0.05 0.35],'r--',[30.5 30.5],[-0.05 0.35],'r--
'),hold off,...
xlabel('Harmonic Number'),ylabel('Amplitude'),title('Trig Fourier Series
Coefficients b_n for x(t)'),...
set(gcf,'Position',fig_size)
figure(4),clf,subplot(211),plot(0,A0,'ro',n*w0,An,'o'),axis([-2*w0 16 -0.1
0.5]),plotax,...
xlabel('Frequency (r/s)'),ylabel('Magnitde'),title('Cosine Fourier Series
Magnitudes A_n for x(t)'),...
subplot(212),plot(n*w0,thn,'o'),v=axis;axis([-2*w0 16 -200 10]),plotax,...
xlabel('Frequency (r/s)'),ylabel('Phase (deg)'),title('Cosine Fourier
Series Phases Theta_n for x(t)'),...
set(gcf,'Position',fig_size)
6. figure(5),clf,subplot(211),plot(0,X0,'ro',n*w0,Xn,'o',-n*w0,Xn,'o'),axis([-
16 16 -0.1 0.3]),plotax,...
xlabel('Frequency (r/s)'),ylabel('Magnitde'),title('Exponential Fourier
Series Magnitudes X_n for x(t)'),...
subplot(212),plot(n*w0,thn,'o',-n*w0,-thn,'o'),v=axis;axis([-16 16
v(3:4)]),plotax,...
xlabel('Frequency (r/s)'),ylabel('Phase (deg)'),title('Exponential Fourier
Series Phases Theta_n for x(t)'),...
set(gcf,'Position',fig_size)
clear i v
%
Technical discussion about Matlab and issues related to Digital Signal Processing.
Your Email Here Join this Group!
Post a new Thread
fourier series coefficients - Kurt - Dec 1 12:27:01 2009
hello all,
I have a one period square wave on the interval[0,2] defined as:
y(t)= 1, 0<=t<1
y(t)= 0, 1<=t<2
I need to find the fourier series coefficients,ck, with
k=-10,-9,...,9,10
7. I heard using a for loop would work but I am completely stuck on how to
move
through this problem.
All help is greatly appreciated,
Kurt
______________________________
New Code Sharing Section now Live on DSPRelated.com. Learn about the Reward Program for
Contributors here.
(You need to be a member of matlab -- send a blank email to matlab-subscribe@yahoogroups.com )
Re: fourier series coefficients - vishwa - Dec 3 7:52:08 2009
you can try
for k=-10:1:10
c(k+11) = here you enter the Ck equation; % you cant have negative indexing
in
MATLAB
end
Now
c gives you the coefficients
rgds
vishwanath
________________________________
From: Kurt <k...@sbcglobal.net>
To: m...@yahoogroups.com
Sent: Tue, 1 December, 2009 12:50:19 PM
Subject: [matlab] fourier series coefficients
Â
hello all,
I have a one period square wave on the interval[0,2] defined as:
y(t)= 1, 0<=t<1
y(t)= 0, 1<=t<2
I need to find the fourier series coefficients, ck, with
k=-10,-9,... ,9,10
I heard using a for loop would work but I am completely stuck on how to
move
through this problem.
All help is greatly appreciated,
Kurt
______________________________
New Code Sharing Section now Live on DSPRelated.com. Learn about the Reward Program for
Contributors here.
(You need to be a member of matlab -- send a blank email to matlab-subscribe@yahoogroups.com )
Re: fourier series coefficients - Vaibhav Singh - Dec 4 7:44:25 2009
8. Hey..
For fourier coeff u have to find the fft of the given sequence using
matlab.
Since u have to find the coeff for kranging from -10:1:10, i.e.21 points u
have to define ur function in time domain in 21 samples. Take the fft of
these 21 samples. The resultant is your desired fourier coeff .
Regards-vaibhav
On Thu, Dec 3, 2009 at 5:01 PM, vishwa <v...@yahoo.com> wrote:
> you can try
>
> for k=-10:1:10
> c(k+11) = here you enter the Ck equation; % you cant have negative
indexing
> in MATLAB
> end
>
> Now
>
> c gives you the coefficients
>
> rgds
> vishwanath
>
> ________________________________
> From: Kurt <k...@sbcglobal.net <keg1606%40sbcglobal.net>>
> To: m...@yahoogroups.com <matlab%40yahoogroups.com>
> Sent: Tue, 1 December, 2009 12:50:19 PM
> Subject: [matlab] fourier series coefficients
>
> hello all,
> I have a one period square wave on the interval[0,2] defined as:
> y(t)= 1, 0<=t<1
> y(t)= 0, 1<=t<2
> I need to find the fourier series coefficients, ck, with
> k=-10,-9,... ,9,10
> I heard using a for loop would work but I am completely stuck on how to
> move through this problem.
> All help is greatly appreciated,
> Kurt
>
>
>
--
Vaibhav Singh
BE(Hons.) Electronics And Instrumentation
BITS-Pilani
9. EE341.01: MATLAB M-FILE FOR PLOTTING TRUNCATED FOURIER SERIES AND ITS SPECTRA
MATLAB M-File example6.m:
%
% Filename: example6.m
%
% Description: This M-file plots the truncated Fourier Series
% representation of a square wave as well as its
% amplitude and phase spectrum.
clear; % clear all variables
clf; % clear all figures
N = 11; % summation limit (use N odd)
wo = pi; % fundamental frequency (rad/s)
c0 = 0; % dc bias
t = -3:0.01:3; % declare time values
figure(1) % put first two plots on figure 1
% Compute yce, the Fourier Series in complex exponential form
yce = c0*ones(size(t)); % initialize yce to c0
for n = -N:2:N, % loop over series index n (odd)
cn = 2/(j*n*wo); % Fourier Series Coefficient
yce = yce + real(cn*exp(j*n*wo*t)); % Fourier Series computation
end
subplot(2,1,1)
plot([-3 -2 -2 -1 -1 0 0 1 1 2 2 3],... % plot original y(t)
[-1 -1 1 1 -1 -1 1 1 -1 -1 1 1], ':');
hold;
plot(t,yce); % plot truncated exponential FS
xlabel('t (seconds)'); ylabel('y(t)');
ttle = ['EE341.01: Truncated Exponential Fourier Series with N = ',...
num2str(N)];
title(ttle);
hold;
% Compute yt, the Fourier Series in trigonometric form
yt = c0*ones(size(t)); % initialize yt to c0
for n = 1:2:N, % loop over series index n (odd)
cn = 2/(j*n*wo); % Fourier Series Coefficient
yt = yt + 2*abs(cn)*cos(n*wo*t+angle(cn)); % Fourier Series computation
end
subplot(2,1,2)
plot([-3 -2 -2 -1 -1 0 0 1 1 2 2 3],... % plot original y(t)
[-1 -1 1 1 -1 -1 1 1 -1 -1 1 1], ':');
hold; % plot truncated trigonometric FS
plot(t,yt);
xlabel('t (seconds)'); ylabel('y(t)');
ttle = ['EE341.01: Truncated Trigonometric Fourier Series with N = ',...
num2str(N)];
title(ttle);
hold;
% Draw the amplitude spectrum from exponential Fourier Series
10. figure(2) % put next plots on figure 2
subplot(2,1,1)
stem(0,c0); % plot c0 at nwo = 0
hold;
for n = -N:2:N, % loop over series index n
cn = 2/(j*n*wo); % Fourier Series Coefficient
stem(n*wo,abs(cn)) % plot |cn| vs nwo
end
for n = -N+1:2:N-1, % loop over even series index n
cn = 0; % Fourier Series Coefficient
stem(n*wo,abs(cn)); % plot |cn| vs nwo
end
xlabel('w (rad/s)')
ylabel('|cn|')
ttle = ['EE341.01: Amplitude Spectrum with N = ',num2str(N)];
title(ttle);
grid;
hold;
% Draw the phase spectrum from exponential Fourier Series
subplot(2,1,2)
stem(0,angle(c0)*180/pi); % plot angle of c0 at nwo = 0
hold;
for n = -N:2:N, % loop over odd series index n
cn = 2/(j*n*wo); % Fourier Series Coefficient
stem(n*wo,angle(cn)*180/pi); % plot |cn| vs nwo
end
for n = -N+1:2:N-1, % loop over even series index n
cn = 0; % Fourier Series Coefficient
stem(n*wo,angle(cn)*180/pi); % plot |cn| vs nwo
end
xlabel('w (rad/s)')
ylabel('angle(cn) (degrees)')
ttle = ['EE341.01: Phase Spectrum with N = ',num2str(N)];
title(ttle);
grid;
hold;
MATLAB Plots Generated:
11.
12. Hi,
I am trying to write a function to generate Fourier series Coefficients of a given discrete time signal. For instance:
x = [1 2 3 4]
n = [0 1 2 3]
where x holds the values of the signal, and n holds the corresponding time indices.
My code for the function is:
function a = dtfs(x,n)
period = length(x);
for k = 1:period
a = (1/period)*x(k)*exp(((-j*2*pi)/period)*n(k));
a
end
i am just not getting the correct values for the fourier series coefficients. Am I setting up the formula wrong?
As you can probably tell, i am very very new to MATLAB and I'd also appreciate if someone may guide me in setting up my "for-
loop" with a vector to "catch" and store values of "a", so each time the for-loop repeats, the previous value a does not get over-
written, instead they are all stored in a vector.
Thanks in advance :)
Regards
Subject: Fourier Series Coefficients
From: Andrew
Date: 24 Oct, 2008 04:43:01
Message: 2 of 4
Reply to this message
Add author to My Watch List
View original format
Flag as spam
I'm guessing the formula, but hopefully the structure of it will help...
function a = dtfs(x,n)
period = length(x);
a = zeros(1, length(x))
for k = 1:period
for z = 1:period
a(k) = a(k) + x(z) * exp((-j*2*pi)/period * (k-1) * n(z));
end
a(k) = a(k) / period;
num2str(a(k), '%1.18f');
end
13. Cheers,
Andrew
> a = (1/period)*x(k)*exp(((-j*2*pi)/period)*n(k));
>a
> end
"Raz H" <dilster08@gmail.com> wrote in message <gdrclp$t9b$1@fred.mathworks.com>...
> Hi,
>
> I am trying to write a function to generate Fourier series Coefficients of a given discrete time signal. For instance:
>
> x = [1 2 3 4]
> n = [0 1 2 3]
>
> where x holds the values of the signal, and n holds the corresponding time indices.
>
> My code for the function is:
>
> function a = dtfs(x,n)
> period = length(x);
> for k = 1:period
> a = (1/period)*x(k)*exp(((-j*2*pi)/period)*n(k));
>a
> end
>
> i am just not getting the correct values for the fourier series coefficients. Am I setting up the formula wrong?
>
> As you can probably tell, i am very very new to MATLAB and I'd also appreciate if someone may guide me in setting up my
"for-loop" with a vector to "catch" and store values of "a", so each time the for-loop repeats, the previous value a does not get
over-written, instead they are all stored in a vector.
>
> Thanks in advance :)
>
> Regards
Subject: Fourier Series Coefficients
From: Paul
Date: 24 Oct, 2008 06:35:05
Message: 3 of 4
Reply to this message
Add author to My Watch List
View original format
Flag as spam
14. "Andrew" <awbsmith@itee.uq.edu.au> wrote in message <gdrjol$so$1@fred.mathworks.com>...
> I'm guessing the formula, but hopefully the structure of it will help...
>
> function a = dtfs(x,n)
> period = length(x);
> a = zeros(1, length(x))
> for k = 1:period
> for z = 1:period
> a(k) = a(k) + x(z) * exp((-j*2*pi)/period * (k-1) * n(z));
> end
> a(k) = a(k) / period;
> num2str(a(k), '%1.18f');
> end
>
> Cheers,
> Andrew
>
>
> > a = (1/period)*x(k)*exp(((-j*2*pi)/period)*n(k));
>>a
> > end
>
>
>
>
> "Raz H" <dilster08@gmail.com> wrote in message <gdrclp$t9b$1@fred.mathworks.com>...
> > Hi,
>>
> > I am trying to write a function to generate Fourier series Coefficients of a given discrete time signal. For instance:
>>
> > x = [1 2 3 4]
> > n = [0 1 2 3]
>>
> > where x holds the values of the signal, and n holds the corresponding time indices.
>>
> > My code for the function is:
>>
> > function a = dtfs(x,n)
> > period = length(x);
> > for k = 1:period
> > a = (1/period)*x(k)*exp(((-j*2*pi)/period)*n(k));
>>a
> > end
>>
> > i am just not getting the correct values for the fourier series coefficients. Am I setting up the formula wrong?
>>
> > As you can probably tell, i am very very new to MATLAB and I'd also appreciate if someone may guide me in setting up my
"for-loop" with a vector to "catch" and store values of "a", so each time the for-loop repeats, the previous value a does not get
over-written, instead they are all stored in a vector.
>>
> > Thanks in advance :)
>>
> > Regards
15. Was this a HW problem? It looks like one to me!
Subject: Fourier Series Coefficients
From: Raz H
Date: 24 Oct, 2008 06:54:02
Message: 4 of 4
Reply to this message
Add author to My Watch List
View original format
Flag as spam
"Paul" <par@ceri.memphis.edu> wrote in message <gdrqap$sl5$1@fred.mathworks.com>...
> "Andrew" <awbsmith@itee.uq.edu.au> wrote in message <gdrjol$so$1@fred.mathworks.com>...
> > I'm guessing the formula, but hopefully the structure of it will help...
>>
> > function a = dtfs(x,n)
> > period = length(x);
> > a = zeros(1, length(x))
> > for k = 1:period
> > for z = 1:period
> > a(k) = a(k) + x(z) * exp((-j*2*pi)/period * (k-1) * n(z));
> > end
> > a(k) = a(k) / period;
> > num2str(a(k), '%1.18f');
> > end
>>
> > Cheers,
> > Andrew
>>
>>
> > > a = (1/period)*x(k)*exp(((-j*2*pi)/period)*n(k));
>>>a
> > > end
>>
>>
>>
>>
> > "Raz H" <dilster08@gmail.com> wrote in message <gdrclp$t9b$1@fred.mathworks.com>...
> > > Hi,
>>>
> > > I am trying to write a function to generate Fourier series Coefficients of a given discrete time signal. For instance:
>>>
> > > x = [1 2 3 4]
> > > n = [0 1 2 3]
>>>
> > > where x holds the values of the signal, and n holds the corresponding time indices.
>>>
> > > My code for the function is:
16. >>>
> > > function a = dtfs(x,n)
> > > period = length(x);
> > > for k = 1:period
> > > a = (1/period)*x(k)*exp(((-j*2*pi)/period)*n(k));
>>>a
> > > end
>>>
> > > i am just not getting the correct values for the fourier series coefficients. Am I setting up the formula wrong?
>>>
> > > As you can probably tell, i am very very new to MATLAB and I'd also appreciate if someone may guide me in setting up
my "for-loop" with a vector to "catch" and store values of "a", so each time the for-loop repeats, the previous value a does not
get over-written, instead they are all stored in a vector.
>>>
> > > Thanks in advance :)
>>>
> > > Regards
>
> Was this a HW problem? It looks like one to me!
@Andrew
Thank you very much! I guess my loop was not set up correctly, plus I was not signifying the time indices correctly.
@Paul
This was not a homework problem, though I'll be taking Signals soon, so I am trying to become familiar with MATLAB.
Thanks to all who replied! :)
EE341.01: MATLAB M-FILE FOR PLOTTING TRUNCATED FOURIER SERIES
This example shows a MATLAB M-file for plotting a truncated Fourier Series. Various
numbers of terms are used.
MATLAB M-File example5.m:
%
% Filename: example5.m
%
% Description: Example to show how the truncated Fourier series in
% complex exponential form approximates the real
% signal. More and more terms are taken showing a
% better and better representation of the original signal.
%
clear; % clear all variables
clf; % clear all figures
17. % Define parameters to plot original sawtooth
tr = [-1 0 0 1 1 2 2];
yr = [0 1 0 1 0 1 0];
% Plot Truncated Fourier Series Approximation (N = 1)
N = 1; % define number of terms to use (n = -N..N)
c0 = 0.5; % define dc bias coefficient
t = -1:0.001:2; % define time values for y(t)
y = c0 * ones(size(t)); % let initial y = c0 (dc bias) for all times
for n = -N:-1, % compute y for negative n
cn = exp(j*pi/2)/(2*pi*n);
y = y + real(cn * exp(j*n*2*pi*t));
end;
% compute y for positive n and add to y
for n = 1:N, % found using negative n
cn = exp(j*pi/2)/(2*pi*n);
y = y + real(cn * exp(j*n*2*pi*t));
end;
subplot(2,2,1); % plot approximation
plot(t,y);
hold;
plot(tr,yr,':');
hold;
xlabel('time (seconds)');
ylabel('y(t) approximation');
title('EE341.01: Truncated FS, -1<=n<=1');
% Plot Truncated Fourier Series Approximation (N = 2)
clear; % clear all variables
N = 2; % define number of terms to use (n = -N..N)
c0 = 0.5; % define dc bias coefficient
t = -1:0.001:2; % define time values for y(t)
y = c0 * ones(size(t)); % let initial y = c0 (dc bias) for all times
for n = -N:-1, % compute y for negative n
cn = exp(j*pi/2)/(2*pi*n);
y = y + real(cn * exp(j*n*2*pi*t));
end;
% compute y for positive n and add to y
for n = 1:N, % found using negative n
cn = exp(j*pi/2)/(2*pi*n);
y = y + real(cn * exp(j*n*2*pi*t));
end;
subplot(2,2,2); % plot approximation
plot(t,y);
hold;
plot(tr,yr,':');
hold;
xlabel('time (seconds)');
ylabel('y(t) approximation');
title('EE341.01: Truncated FS, -2<=n<=2');
% Plot Truncated Fourier Series Approximation (N = 3)
clear; % clear all variables
18. N = 3; % define number of terms to use (n = -N..N)
c0 = 0.5; % define dc bias coefficient
t = -1:0.001:2; % define time values for y(t)
y = c0 * ones(size(t)); % let initial y = c0 (dc bias) for all times
for n = -N:-1, % compute y for negative n
cn = exp(j*pi/2)/(2*pi*n);
y = y + real(cn * exp(j*n*2*pi*t));
end;
% compute y for positive n and add to y
for n = 1:N, % found using negative n
cn = exp(j*pi/2)/(2*pi*n);
y = y + real(cn * exp(j*n*2*pi*t));
end;
subplot(2,2,3); % plot approximation
plot(t,y);
hold;
plot(tr,yr,':');
hold;
xlabel('time (seconds)');
ylabel('y(t) approximation');
title('EE341.01: Truncated FS, -3<=n<=3');
% Plot Truncated Fourier Series Approximation (N = 10)
clear; % clear all variables
N = 10; % define number of terms to use (n = -N..N)
c0 = 0.5; % define dc bias coefficient
t = -1:0.001:2; % define time values for y(t)
y = c0 * ones(size(t)); % let initial y = c0 (dc bias) for all times
for n = -N:-1, % compute y for negative n
cn = exp(j*pi/2)/(2*pi*n);
y = y + real(cn * exp(j*n*2*pi*t));
end;
% compute y for positive n and add to y
for n = 1:N, % found using negative n
cn = exp(j*pi/2)/(2*pi*n);
y = y + real(cn * exp(j*n*2*pi*t));
end;
subplot(2,2,4); % plot approximation
plot(t,y);
hold;
plot(tr,yr,':');
hold;
xlabel('time (seconds)');
ylabel('y(t) approximation');
title('EE341.01: Truncated FS, -10<=n<=10');
MATLAB Plot Generated: