From ControlTheoryPro.com

Contents
1 Introduction to Bode Plots
For SISO systems the Bode plot is the single most useful tool. The most intuitive graphical method for controller design is loop shaping which is a fancy way of saying that you add poles and zeros and the right system gain to achieve the desired closed loop response (Bode plot).
The Bode plot is a plot of system reponse as a function of frequency. The xaxis is the frequency of the input signal. The yaxis is the system reponse magnitude (in dB) for the magnitude portion and phase (in degrees) for the phase portion. The plotted magnitude is:
>> db = @(x) 20*log10(x);
So for a system with a magnitude of 20 dB at 1 Hz, an input of 3 at 1 Hz will result in an output with a magnitude of 30.
On a Bode plot this relationship for all frequencies of interest is easily recognized. The Bode plot is obvious enough to be useful to those without much training yet contains enough information that for years a control engineer will still be learning and discovering new ways to use the information present.
2 Elements of the Bode Plot
The Bode plot boils down to the following:
Component  Change  Plot 

DC Gain 
Determines magnitude at 0 Hz 

Pole 
Each pole changes the slope of the magnitude by 20 dB/decade^{+} 

Zero 
Each zero changes the slope of the magnitude by +20 dB/decade^{+} 
The phase change is dependent on the sign of the current root. Below is an equation for the phase change
where
 is the change in phase,
 is the current zero or pole being plotted, and
 are the number of zeros and poles respectively.
3 Bode Plot Examples
3.1 Bode Plots for Simple First Order Systems
Below are examples of bode plots for first order systems.
Examples:
 Single Pole (1 rad/sec), No Zeros, DC Gain = 1
>> a = tf([1], [1 1]); >> approxBode(a)
 Single Pole (1 rad/sec), Single Zero (10 rad/sec), DC Gain = 1
>> a = tf([1 10], [1 1]); >> approxBode(a)
 Single Pole (100 rad/sec), Single Zero (10 rad/sec), DC Gain = 1
>> a = tf([1 10], [1 100]); >> approxBode(a)
 Single Pole (1 rad/sec), Single Zero (10 rad/sec), DC Gain = 100
>> a = 100 * tf([1 10], [1 1]); >> approxBode(a)
3.2 Bode Plots for Simple Second Order Systems
Below are examples of bode plots for second order systems.
Examples:
 Single Pole (1 rad/sec), No Zeros, DC Gain = 1
>> a = tf([1], [1 2 3]); >> approxBode(a)
 Single Pole (100 rad/sec), Single Zero (10 rad/sec), DC Gain = 1
>> a = tf([1 10], [1 100 100]); >> approxBode(a)
 Single Pole (1 rad/sec), Single Zero (10 rad/sec), DC Gain = 100
>> a = 100 * tf([10^2], [1 2*10 10^2]); >> approxBode(a)
3.3 More Complex Bode Plot Examples
For more complex example I invite you to download my function and use it in your own version of MATLAB. Beware that it fails when num(end) == 0 or den(end) == 0 where num and den are defined as:
>> [num, den] = tfdata(lti_sys, 'v');
4 MATLAB
 See bode