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

Paul
Paul 2024년 1월 4일
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 2024년 1월 4일
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 2024년 1월 4일
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 2024년 1월 4일
편집: Torsten 2024년 1월 4일
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 2024년 1월 4일
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 2024년 1월 4일
편집: Torsten 2024년 1월 4일
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 2024년 1월 4일
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 2024년 1월 4일
편집: Torsten 2024년 1월 5일
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 2024년 1월 4일
@Torsten, yes, P in the wikipedia link, which is the same page that I linked to, is L in this problem.

댓글을 달려면 로그인하십시오.

답변 (1개)

Hassaan
Hassaan 2024년 1월 4일
편집: Hassaan 2024년 1월 4일

0 개 추천

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

제품

릴리스

R2023b

질문:

2024년 1월 4일

편집:

2024년 1월 5일

Community Treasure Hunt

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

Start Hunting!

Translated by