Is this a MATLAB bode phase plot error?

I sent in a function $$T = -0.1 \frac{s+400}{(s+20)*(s+2000)}$$

> T = -0.1*(s+400)/((s+20)*(s+2000));
> bode(T)
> grid on


I was expecting the phase to start at -180 deg, but instead the MATLAB is showing +180 deg.

Is this an inconsistency or a conceptual thing?

• Why do you expect it to start at -180? Commented Apr 12, 2015 at 4:03

You can add or subtract 360 deg (2*pi rad) as many times as needed in Bode phase graph. Right click in your graph, Properties > Options > Phase Response > Adjust phase offsets [on] > Keep phase close to [-pi] (in your case), At frequency [0.000]. Done in MATLAB R2015a.

Edit: still works in MATLAB R2020b.

• you mean 2pi rad Commented Jan 14, 2016 at 14:26

The phase plot should start at -180. You need to write the numerator block as (-0.1s -40)

• Chu so what might be causing matlab to plot it at +180 deg? Commented Apr 12, 2015 at 16:18
• I suspect that it's interpretted the -0.1, on the negative real axis, as +180 instead of -180, then, at say 1 rad/s, the overall phase angle would be 180 + atan(1/400) - atan(1/20) - atan(1/2000)= 180+0.14-2.86-0.03 = 177.25. And so on at other frequencies.
– Chu
Commented Apr 12, 2015 at 18:15
• ... consider w=20 rad/s, where the Matlab phase is just greater than +135 from your graph. Using +180 for the -0.1 term instead of -180 will give: 180+atan(20/400)-atan(20/20)-atan(20/2000) = 180+2.86-45-0.57 = 138. True phase angle is -222
– Chu
Commented Apr 12, 2015 at 18:27
• +180 degrees and -180 degrees are the same angle. Your answer is not correct Commented Jan 14, 2016 at 14:25
• @Scott Seidman, At $\omega=0$ the vector is along the -ve real axis. As $\omega$ increases, the first term to have an effect is the $(s+20)$ lag which adds phase lag and hence rotates the vector clockwise into the 2nd quadrant. This represents a total phase lag which is greater than 180deg
– Chu
Commented Jan 14, 2016 at 17:22

When you doubt your tools goto 1st principals or use other tools

http://www.wolframalpha.com/input/?i=Bode+plot+of+-0.1*%28s%2B400%29%2F%28%28s%2B20%29*%28s%2B2000%29%29+sampling+period+.02

at $\omega=0$

$T = -0.1 \frac{s+400}{(s+20)*(s+2000)}$ reduces to -0.001

With negative gain the phaseshift is +180degrees (or -180 ;) )

• To check a Matlab answer, Excel is probably better than a package that uses a more 'sophisticated' algorithm like Wolfram, where you don't really know what it's doing. In Excel you can use ATAN2 which resolves the phase angle issue. If you're plotting on a logarithmic frequency scale, w=0 or 'DC' does not exist, so the low frequency phase angle rounds to -180, not to +180
– Chu
Commented Apr 12, 2015 at 9:59
• I don't disagree, Excel is great. I guess it comes downto exactly what he is trying todo
– user16222
Commented Apr 12, 2015 at 10:06
• The true phase angle is always lagging, it is never positive. eg, at 100rad/s, the true phase angle is (-166-79-3)=-248. Wolfram is giving something quite different.
– Chu
Commented Apr 12, 2015 at 10:23
• @Chu, you can do EXACTLY the same thing in Matlab. Just because there are high level functions available, it doesn't mean that you have to use them. Commented Jan 14, 2016 at 21:31
• It's all about readability. It's like using different scales on the axes of a root locus - strictly correct, but does not lend itself to design.
– Chu
Commented Jan 15, 2016 at 0:48

Just FYI for your normal phase plot. You can add some options to the bode plot:

opts = bodeoptions('cstprefs');

opts.PhaseWrapping = 'on';

opts.PhaseWrappingBranch = -180;

bode(***your_transfer_function***, opts);