PLOTTING STEP RESPONSE OF TRANSFER FUNCTION USING FOURIER TRANSFORM
이전 댓글 표시
i am not getting the desired output from this code! can anyone help me with it??
the transfer function is in fourier domain!!
clc;
clear all;
syms t;
G = tf([1], [1 0.9 5]);
[num,den] = tfdata(G);
syms s
G_sym = poly2sym(cell2mat(num),s)/poly2sym(cell2mat(den),s)
G_sym=subs(G_sym,s,0.1*1i)
Y_four_sym = G_sym/s; % U(s) = 1/s for the unit step
y_time_sym(t) = ilaplace(Y_four_sym,t);
t=0:0.001:10;
plot(t,y_time_sym(t)
답변 (1개)
Ameer Hamza
2020년 4월 5일
There are some issues in your code, compare it with the following code
G = tf(1, [1 0.9 5]);
[num,den] = tfdata(G);
syms s t
G_sym = poly2sym(num{:},s)/poly2sym(den{:},s);
Y_four_sym = G_sym/s; % U(s) = 1/s for the unit step
y_time_sym(t) = ilaplace(Y_four_sym,t);
T=0:0.001:10;
plot(T,y_time_sym(T))

댓글 수: 11
AAYUSH MARU
2020년 4월 5일
AAYUSH MARU
2020년 4월 5일
Ameer Hamza
2020년 4월 5일
Ok. This following code how to do it using the fourier domain
clear
G = tf(1, [1 0.9 5]);
[num,den] = tfdata(G);
syms s w t
G_sym = poly2sym(num{:},s)/poly2sym(den{:},s);
G_sym=subs(G_sym,s,1i*w); % s = 1i*w for fourier domain
Y_four_sym = G_sym*(1/(1i*w) + pi*dirac(w)); % U(jw) = 1/(1i*w) + pi*dirac(w) for the unit step
y_time_sym(t) = ifourier(Y_four_sym,t);
y_time_sym = matlabFunction(y_time_sym); % converted to function handle to speed up computation
T=0:0.001:10;
plot(T,y_time_sym(T))
AAYUSH MARU
2020년 4월 5일
AAYUSH MARU
2020년 4월 5일
AAYUSH MARU
2020년 4월 5일
Ameer Hamza
2020년 4월 5일
AAYUSH, the term (1/(1i*w) + pi*dirac(w)) is the Fourier transform of unit step function, pi*dirac(w) term is also included in its Fourier transform. Dirac function is also commonly known as impulse function. As you know that in Fourier domain, Y(iw) = G(iw)X(iw), so we multiply Fourier transform of transfer function with the Fourier transform of unit step.
If you want impulse response, then you should multiply G_sym with 1 since the Fourier transform of impulse signal is 1.
AAYUSH MARU
2020년 4월 5일
Ameer Hamza
2020년 4월 5일
AAYUSH, I tried the code with the third-order system. The problems happen because MATLAB's symbolic engine is not able to calculate the inverse Fourier transform of the output transfer function. The solution does exist: https://www.wolframalpha.com/input/?i=inverse+transform+of+%28pi*dirac%28w%29+-+1i%2Fw%29%2F%28-+w%5E3*1i+-+6*w%5E2+%2B+w*14i+%2B+24%29. You can consider it a limitation of MATLAB's symbolic engine.
AAYUSH MARU
2020년 4월 5일
Ameer Hamza
2020년 4월 5일
By "solving" if you mean that finding the response of the system, then there are other methods. But if you specifically want to solve it with Fourier transform, then it probably not be possible in MATLAB.
카테고리
도움말 센터 및 File Exchange에서 Symbolic Math Toolbox에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!