fourier transform shifted graphic

조회 수: 3(최근 30일)
yok
yok 2021년 12월 9일
댓글: David Goodmanson 2021년 12월 10일
clear all; close all; clc;
x1=-37:0.1:-31.5;
eq1 = 0*x1+3.3;
x2=-31.5:0.1:-29.5;
eq2 = 3.3*(-29.5-x2)/(2);
x3=-29.5:0.1:-24;
eq3 = 3.3*(-29.5-x3)/(5.5);
x4=-24:0.1:-18.5;
eq4=0*x4-3.3;
x5=-18.5;
eq5 =3.3;
x6=-18.5:0.1:-13;
eq6 = 0*x6+3.3;
x7=-13:0.1:-11;
eq7 = 3.3*(-11-x7)/(2);
x8=-11:0.1:-5.5;
eq8 = 3.3*(-11-x8)/(5.5);
x9=-5.5:0.1:0;
eq9 = 0*x9-3.3;
x10=0;
eq10=3.3;
x11=0:0.1:5.5;
eq11 = (0*x11)+3.3;
x12=5.5:0.1:7.5;
eq12 = 3.3*(7.5-x12)/2;
x13=7.5:0.1:13;
eq13=3.3*(7.5-x13)/5.5;
x14=13:0.1:18.5;
eq14=(0*x14)-3.3;
x15=18.5;
eq15 = 3.3;
x = [x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 ];
y = [eq1 eq2 eq3 eq4 eq5 eq6 eq7 eq8 eq9 eq10 eq11 eq12 eq13 eq14 eq15 ];
plot(x, y, 'r')
grid on; hold on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
syms t
A=3.3;
t1=(5+6)/2;
t2=t1+2;
t3=t1+t2;
t4=t1+t3;
w=(2*pi)/t4;
sum=0;
a0=(2/t4)*(int(t*0+A,0,t1)+int(A*(7.5-t)/(2),t1,t2)+int(A*(7.5-t)/(5.5),t2,t3)+int(t*0-A,t3,t4))
for n=1:20
an=(2/t4)*(int((t*0+A)*cos((n*w)*t),0,t1)+int(A*(7.5-t)/(2)*cos((n*w)*t),t1,t2)+int(A*(7.5-t)/(5.5)*cos((n*w)*t),t2,t3)+int((t*0-A)*cos((n*w)*t),t3,t4))
bn=(2/t4)*(int((t*0+A)*sin((n*w)*t),0,t1)+int(A*(7.5-t)/(2)*sin((n*w)*t),t1,t2)+int(A*(7.5-t)/(5.5)*sin((n*w)*t),t2,t3)+int((t*0-A)*sin((n*w)*t),t3,t4))
sum=sum+((an*cos((n*w)*t)+bn*sin((n*w)*t)+(a0/2)))
end
grid on;hold on;
ezplot(t,(sum),[-2*t4,t4]);
I haven't been able to find out for hours why this graph is shifted. Maybe someone can help and see the error? Thanks.

채택된 답변

David Goodmanson
David Goodmanson 2021년 12월 10일
편집: David Goodmanson 2021년 12월 10일
Hello MK
First of all it is not a good idea to have a variable called 'sum' because that's the name of a basic Matlab function. Matlab is case sensitive so when I ran the code I changed the variable to 'Sum' (easy because when you change the name of a variable in the editor, Matlab offers up an optional autochange of every other instance of the variable).
The problem happens because you have a0/2 inside the for loop, so that a0/2 gets added in 20 times. If you remove a0/2 from the loop and add Sum = Sum + a0/2 past the end of the loop, it works.
  댓글 수: 2
David Goodmanson
David Goodmanson 2021년 12월 10일
Hi yok,
We have all been there, staring at the same set of expressions for hours and hours, having some sort of mental block. Then someone else comes along and says, what about <whatever> and then we say, aak! how could I have been such an idiot? It happens. One of the useful things about this site is having several sets of eyes take a look..

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

추가 답변(0개)

태그

Community Treasure Hunt

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

Start Hunting!

Translated by