# MATLAB Programming/Bode Plot

## IntroductionEdit

This article is on the topic of creating Bode plots in MATLAB. The quick answer is use the *bode* command. However, the bode command has several options and the plots generated by the *bode* command are not easily reformatted. The default formatting of most MATLAB plots is good for analysis but less than ideal for dropping into Word and PowerPoint documents or even this website. As a result this article presents an alternative that requires more lines of code but offers the full formatting flexibility of the generic *plot* command.

## MATLAB's Bode CommandEdit

The basic bode command is as follows

>> bode(LTI_SYS)

where

The bode command will automatically call *gcf* which will put the bode plot on the current figure. If no figure exists then one is created by *gcf*.

If you wish to specify the frequency points at which *LTI_SYS* is plotted then create a frequency vector using *logspace* or *linspace* as follows

>> freqVec = logspace(-1, 3, 5000); >> bode(LTI_SYS, freqVec * (2*pi))

where

- freqVec is a vector of 5000 frequencies, in Hz, spaced evenly on a log scale from 10
^{-1}to 10^{3} - pi is a MATLAB constant equal to the value of and in this case it is used to convert freqVec to rad/sec as it is passed to the
*bode*command

- freqVec is a vector of 5000 frequencies, in Hz, spaced evenly on a log scale from 10

In order to get the magnitude and phase at each frequency point the *bode* command must be called with output arguments such as

>> [mag, phase] = bode(LTI_SYS);

or

>> [mag, phase] = bode(LTI_SYS, freqVec * (2*pi));

where

- mag is the magnitude (
**not**in dB) at each point in freqVec - phase is the phase (in degrees) at each point in freqVec

- mag is the magnitude (

The mag and phase variables must come out as 3D arrays. Assuming LTI_SYS is SISO then the commands below will convert mag and phase into the vectors you would expect

>> mag = mag(:); >> phase = phase(:); >> mag = db(mag); % to get the magnitude in 20log dB

### Issues with the *bode* commandEdit

The main issue with the *bode* command is reformatting of the plot. The *bode* command appears to use a normal semilogx plot and then apply patches ro something similar to the figure. This can lead to odd behavior when attempting to create multi-line titles, reformat line widths or font sizes, etc. The normal relationship of axes to figure is just not quite present.