Filter löschen
Filter löschen

Fourier transformation of a function solved by ODEs?

2 Ansichten (letzte 30 Tage)
Yuhong Jin
Yuhong Jin am 26 Nov. 2019
Kommentiert: Yuhong Jin am 28 Nov. 2019
Hi,
I was trying to fourier transform a function solved by ode15s using the code below:
function main2()
% need function since in a script, one cannot define function vdp1
[t,X]=ode15s(@rate,[0:0.01:10],[1.86;3.2;0.4]);
N = size(X(:,3));
T = 0.01;
P = abs(fft(X(:,3)))./(N/2);
P = P(2:N/2-1).^2;
F = [2:N/2-1]'/T;
loglog(F,P)
end
function dXdt=rate(t,X)
if t>0 && t<0.0225
c=0.1.*t;
elseif t>0.0225 && t<0.045
c=-0.1.*t+0.0045;
else
c=0;
end
F = 10.*(1-0.5.*X(1)+log((1+c./0.02)./(1+c./0.5)));
A = 1./(1+exp(F));
dmdt= 0.1.*(1-A)-0.2.*A;
dYdt= 0.182*17.9.*A.*(9.7-X(2))-2.2.*X(2);
dPdt=(0.75+0.1.*(X(2)-3.2)).*(1-X(3))-(1.13-10.*(X(2)-3.2)).*X(3);
dXdt=[dmdt;dYdt;dPdt];
end
Here the second function is not important as I run and plotted the ode solved function and this worked successfully.
Could anyone please helped to whether the fourier transform part below the ode solver in the main2 function is correct (shown above and pasted below)?
N = size(X(:,3));
T = 0.01;
P = abs(fft(X(:,3)))./(N/2);
P = P(2:N/2-1).^2;
F = [2:N/2-1]'/T;
loglog(F,P)
What I am doing here is to fourier transform the third function calculated in the [t , X] matrix and plot a log-log graph.
I also omitted the first wave number, which just corresponds to the sum of all the time-course data.
I am not sure if the T value I used here, equal to the time step for ode solver is correct?
I got this graph below but it does not look right
I would be really grateful if anyone could help me.
Thanks in advance

Antworten (1)

Ridwan Alam
Ridwan Alam am 26 Nov. 2019
Bearbeitet: Ridwan Alam am 26 Nov. 2019
Not sure why you squared the fft, but the frequency range needs to be as follows:
N = length(X(:,3));
T = 0.01;
Fs = 1/T;
P1 = abs(fft(X(:,3)))/N;
P = P1(1:N/2+1);
P(2:end-1) = 2*P(2:end-1);
F = Fs*(0:N/2)/N;
loglog(F,P)
Hope this helps!
  3 Kommentare
Ridwan Alam
Ridwan Alam am 28 Nov. 2019
Bearbeitet: Ridwan Alam am 28 Nov. 2019
The reason I multiply the P(2:end-1) by 2: FFT generates a two sided (symmetric around f=0) spectrum (here P1) including negative frequencies. P is the one-sided part, where P(1) refers to f=0. Since P is halved in spectrum, the components for f>0 needs to be doubled to reflect the symmetric components in the negative spectrum.
The power spectrum part was not in your question, so I got confused.
I am also not sure what you mean by wave number in an FFT. Please explain and I will try to help.
Yuhong Jin
Yuhong Jin am 28 Nov. 2019
</matlabcentral/answers/uploaded_files/251072/B27786C0-289E-41E7-A641-728387941404.jpeg> This is the full question I want to solve, and the wavenumber here means frequency (I suppose), so I started from the second one.

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by