EE212 Matlab Example: System Frequency Response
Matlab m-file:
% File Name: example2.m
%
% Description: Matlab m-file for plotting a frequency response of class example III.B.14. using
% a) standard plotting and complex number capabilities,
% b) standard plotting and complex number capabilities for generating Bode plots, and
% c) built in Bode plot function.
% Transfer function:
2500(10 + jw)
%
H(jw) = ----------------------------------
%
jw(2 + jw)(2500 + jw30 + (jw)^2)
% clear matlab memory and close all open figures
clear all; close all;
%=======================================================================================
% a) plotting of frequency response using standard complex number and plotting functions
%=======================================================================================
% open figure 1 for first frequency response plots
figure(1);
% create vector of 200 equally spaced frequencies from 0.1rad/sec to 100rad/sec
% note 0rad/sec is not used because it causes a divide by zero (jw=0 is a pole)
w = linspace(0.1,100,200);
% define transfer function
H = 2500*(10+j*w)./(j*w.*(2+j*w).*(2500+j*w*30+(j*w).^2));
% divide figure window into two rows, one column, and plot magnitude response in top graph,
% phase response in bottom graph
subplot(2,1,1);
plot(w,abs(H));
grid; ylabel('|H(j\omega)|'); title('Magnitude Response');
subplot(2,1,2);
plot(w,unwrap(angle(H))*180/pi);
grid; xlabel('\omega (rad/sec)'); ylabel('\angleH(j\omega) (\circ)'); title('Phase Response');
%=======================================================================================
% b) plotting of frequency response as a Bode plot using standard complex number
% and plotting functions
%=======================================================================================
% open figure 2 for second frequency response plots
figure(2);
% create vector of 200 logarithmically spaced (i.e., same number of points per decade)
% frequencies from 10^-1 = 0.1rad/sec to 10^3 = 1000rad/sec
w = logspace(-1,3,200);
% define transfer function
H = 2500*(10+j*w)./(j*w.*(2+j*w).*(2500+j*w*30+(j*w).^2));
% divide figure window into two rows, one column, and plot magnitude response in top graph,
% phase response in bottom graph
subplot(2,1,1);
semilogx(w,20*log10(abs(H)));
grid; ylabel('|H(j\omega)|'); title('Bode Plot: Magnitude Response');
subplot(2,1,2);
semilogx(w,unwrap(angle(H))*180/pi);
grid; xlabel('\omega (rad/sec)'); ylabel('\angleH(j\omega) (\circ)'); title('Bode Plot: Phase Response');
%=======================================================================================
% c) plotting of frequency response using Bode function
%=======================================================================================
% open figure 3 for third frequency response plots
figure(3);
% create vector of 200 logarithmically spaced (i.e., same number of points per decade)
% frequencies from 10^-1 = 0.1rad/sec to 10^3 = 1000rad/sec
w = logspace(-1,3,200);
% define transfer function using coefficients of jw in numerator and denominator
% starting with highest power of jw and working down - note conv() is used to
% multiply terms in denominator
numH = 2500*[1 10];
denH = conv([1 0], conv([1 2], [1 30 2500]));
% call bode() to plot frequency response as bode diagrams, then add grids
bode(numH,denH,w);
Procedure for running m-file: change working directory to where m-file is stored and then enter m-file name at command prompt.
>> pwd
ans =
C:\matlabR12\work
>> cd ../../temp/ee212/ >> dir
. example1.html example1fig1.gif example1fig3.gif example2.m .. example1.m example1fig2.gif example2.html
>> example2 >>
Plots generated: