how to find bode plot,phase magnitude plot and template in control system?

6 views (last 30 days)
z=1:0.5:10; a=1:0.5:5; num=kron(z,ones(1,length(a))); i=1:length(a); deno=zeros(9,3); deno(i,1)=1; deno(i,2)=a(i); den=repmat(deno,length(z),1); n=numel(num); for m=1:n sys(m)=tf(num(m),den(m,:)); end
  1 Comment
Anita pawar
Anita pawar on 11 Jul 2017
In the above solution which u have given for phase magnitude plot is it for 171 transfer functions or for one transfer function?

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 10 Jul 2017
This works, although you will have to plot 171 figures to see each of them with any detail. (You would have to have a very large monitor to see them all as the bode function plots them, since it plots an array of (2x171) subplots in one figure.)
The Code
[mag,phs,wout] = bode(sys);
Magnitude = squeeze(mag);
Phase = squeeze(phs);
figure(1)
subplot(2,1,1)
plot(wout,20*log10(Magnitude(1,:)))
title('Magnitude (dB)')
grid
subplot(2,1,2)
plot(wout,Phase(1,:))
title('Phase (°)')
grid
The ‘template’ is a Simulink function you will have to do yourself, since you have to specify how you want it.
  1 Comment
Star Strider
Star Strider on 11 Jul 2017
‘In the above solution which u have given for phase magnitude plot is it for 171 transfer functions or for one transfer function?’
The code is for all of them. It plots only one, because letting the bode function plot them produces an unreadable collection of subplots. To get any useful information from the plots, you will have to plot them one-by-one. Plot as many as you like.
You can do that in a loop:
for k1 = 1:171
figure(k1)
subplot(2,1,1)
plot(wout,20*log10(Magnitude(k1,:)))
title('Magnitude (dB)')
grid
subplot(2,1,2)
plot(wout,Phase(k1,:))
title('Phase (°)')
grid
end

Sign in to comment.

More Answers (1)

nelson
nelson on 13 Jul 2017
while running this solution,i got this error "Error in dcmotor (line 18)
plot(w,20*log10(Magnitude(k1,:)))"
close all; clear all; clc tic; w=[.001 .0036 .0126 .0464 .1668 .5995 2.1544 7.7426 27.8256 100 200]; for k=1:0.5:10 for a=1:0.5:5 num=k; den=[1 a 0]; sys=tf(num,den); end end bode(sys,w); grid on for k1 = 1:171 figure(k1) subplot(2,1,1) plot(w,20*log10(Magnitude(k1,:))) title('Magnitude (dB)') grid subplot(2,1,2) plot(w,Phase(k1,:)) title('Phase (°)') grid end time=toc
  1 Comment
Star Strider
Star Strider on 13 Jul 2017
You have to call the bode function with outputs:
[mag,phs,wout] = bode(sys,w);
Magnitude = squeeze(mag);
Phase = squeeze(phs);
I have no idea what you are doing with your code.

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!