Plotting fourier series partial sums

Hi. I am struggling to get my plot for my partial sums correct. I have an
A0 = 0.9
An even and odd = 0
Bn even and odd = -3./(pi*n).*(cos(pi*n*1.5./2.5))-1
I didn't expect my partial sums to look like it does (below).
Any ideas why it is coming out the way it is.
This is my code:
A = 3; % Amplitude (Dataset 5)
L = 5; % Period (Dataset 5)
dutycycle = 30;
sampling = 0.01;
t = 0 : sampling : (L-sampling); % Define time vector
y(t<L*(dutycycle/100)) = A;
y(t>L*(dutycycle/100) & (t<L)) = 0;
x = 0:0.01:2*pi;
n = 25;
Fn = fourier(n,x);
plot(x,Fn)
title ('Partial Sums')
grid on
xlabel('X');
ylabel('Fn');
function Fn = fourier(n,x)
x = x(:);
a0 = 0.9;
a = zeros(1,n);
b = zeros(1,n);
for i = 1:2:n
b(i) = -3/(pi*i)*(cos(pi*i*1.5/2.5))-1;
end
Fn = a0/2 + sum(a.*cos((1:n).*x)+b.*sin((1:n).*x),2);
end

9 commentaires

Paul
Paul le 4 Jan 2024
Double check the derivations of A0, A(n), and B(n). Fourier Series (eqn 5)
Why is the plot from 0 to 2*pi when L = 5?
Double check the expression for Fn. Here's one source: Fourier Series (eqn 2)
AB29
AB29 le 4 Jan 2024
Pretty confident with my figures.
A0 = 0.9
An even and odd = 0
Bn even and odd = -3./(pi*n).*(cos(pi*n*1.5./2.5))-1
Think 0 to 2*pi was a mistake when carrying over from some previous work.
Very inexperienced on Matlab so i'm struggling to get to grips with this. any help is much appreicated
Paul
Paul le 4 Jan 2024
I got different answers than you for A0, A(n), and B(n). Did you compute those by hand or using Matlab? If the latter, you're likely to get more help if you post the code.
The expression for Fn is not the same as in the Wikipedia link I provide.
Torsten
Torsten le 4 Jan 2024
Modifié(e) : Torsten le 4 Jan 2024
If your function has period L, the fourier series and its coefficients are computed differently.
((eq.2) and (eq.5) with P = L).
By the way:
b(i) = -3/(pi*i)*(cos(pi*i*1.5/2.5))-1;
cannot be the sin Fourier coefficients of a function - they must converge to 0 as i -> Inf. Yours converge to -1.
Paul
Paul le 4 Jan 2024
The L in @Torsten's link is not the same as the L in this question (based on the comment in the code regarding what L is).
Torsten
Torsten le 4 Jan 2024
Modifié(e) : Torsten le 4 Jan 2024
Sorry, I changed the link. In the Wikipedia link, I guess the P therein should be the OP's L now, shouldn't it ?
AB29
AB29 le 4 Jan 2024
Hi Paul.
My figures were calculated by hand. I'm relatively new to fourier as a whole so very possible i made a mistake. This was my function:
Torsten
Torsten le 4 Jan 2024
Modifié(e) : Torsten le 5 Jan 2024
I get
syms n x
A_0 = 1/5 * int(3,x,0,1.5)
A_0 = 
A_n = 2/5 * int(3*cos(2*pi/5*n*x),x,0,1.5)
A_n = 
B_n = 2/5 * int(3*sin(2*pi/5*n*x),x,0,1.5)
B_n = 
x = -7:0.01:7;
n = 25;
Fn = fourier(n,x);
plot(x,Fn)
title ('Partial Sums')
grid on
xlabel('X');
ylabel('Fn');
function Fn = fourier(n,x)
x = x(:);
a0 = 0.9;
a = 3./(pi*(1:n)).*sin(3*pi*(1:n)/5);
b = 6./(pi*(1:n)).*(sin(3*pi*(1:n)/10)).^2;
Fn = a0 + sum(a.*cos(2*pi/5*(1:n).*x)+b.*sin(2*pi/5*(1:n).*x),2);
end
Paul
Paul le 4 Jan 2024
@Torsten, yes, P in the wikipedia link, which is the same page that I linked to, is L in this problem.

Connectez-vous pour commenter.

Réponses (1)

Hassaan
Hassaan le 4 Jan 2024
Modifié(e) : Hassaan le 4 Jan 2024
To compute and plot the partial sums of a Fourier series based on the coefficients you've provided (A0 = 0.9, An = 0, and Bn given by a specific formula), Calculates these coefficients and then uses them to compute the Fourier series up to the nth term.
% Define the given parameters
A0 = 0.9; % DC offset
L = 5; % Period
dutycycle = 30; % Duty cycle in percent
sampling = 0.01; % Sampling rate
n = 25; % Number of terms in the partial sum
% Define the time vector
t = 0 : sampling : (L - sampling);
% Initialize the output signal
y = zeros(size(t));
% Define the signal based on the duty cycle
y(t < L * (dutycycle / 100)) = 3; % Amplitude is 3 for the duty cycle
% Define the x values for plotting the Fourier series
x = 0 : 0.01 : 2 * pi;
% Calculate the Fourier series up to the n-th term
Fn = fourierSeries(A0, n, x);
% Plot the result
plot(x, Fn)
title('Partial Sums of Fourier Series')
grid on
function Fn = fourierSeries(n, x, A0)
Fn = A0 / 2; % Start with A0 term
for k = 1:n
An = 0; % Given An = 0
Bn = -3 / (pi * k) * (cos(pi * k * 1.5 / 2.5)) - 1; % Calculate Bn based on the formula
Fn = Fn + An * cos(k * x) + Bn * sin(k * x); % Sum up the series
end
end
Note
Adjust the function as needed based on your actual series formula and make sure that the fourierSeries function is consistent with the series you want to compute.
------------------------------------------------------------------------------------------------------------------------------------------------
If you find the solution helpful and it resolves your issue, it would be greatly appreciated if you could accept the answer. Also, leaving an upvote and a comment are also wonderful ways to provide feedback.
Professional Interests
  • Technical Services and Consulting
  • Embedded Systems
  • Electrical and Electronics Engineering

Produits

Version

R2023b

Question posée :

le 4 Jan 2024

Modifié(e) :

le 5 Jan 2024

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by