Отображение графика Боде в Matlab

Я хотел бы отобразить график Боде повышающе-понижающего преобразователя с помощью Matlab, поэтому я получил рисунок, показанный ниже. Если мы посмотрим ближе на фазовый график, мы увидим, что он начинается с 360 °. Я хочу, чтобы график начинался с 0°, а не с 360°, чтобы мне было легче читать.

  • Что мне делать, чтобы фазовый график начинался с 0°?
  • Другой вопрос, как я могу отобразить усиление на желаемой частоте кроссовера на графике?

    введите описание изображения здесь

Какую модель динамической системы вы использовали? Используете ли вы Control System Toolbox, и если да, то какую команду (bode, bodeplot) вы использовали для построения диаграммы Боде?
Иногда я использую команду bode(sys,options), а иногда – margin(sys). В этом отображении я использовал команду margin(sys). Но в обоих случаях фазовый график начинается с 360°, а не с 0°.

Ответы (1)

Возможным решением было бы использовать бодеплот, а затем изменить свойство PhaseMatchingValue. В качестве примера я использую ЧАС ( с ) "=" с 4 + 1 с + 1 :

sys = tf([1 0 0 0 1],[1 1]);
h = bodeplot(sys);
p = getoptions(h);
p.PhaseMatching = 'on';
p.PhaseMatchingFreq = 1; 
p.PhaseMatchingValue = 0;
setoptions(h,p);

Это приводит к следующей диаграмме тела

Диаграмма Боде с PhaseMatchingValue = 0

Другое (не очень элегантное) решение с использованием команды bode

sys = tf([1 0 0 0 1],[1 1]);
wout = logspace(-2,2,201);
[mag,phase,wout] = bode(sys,wout);
wout = squeeze(wout);
mag = squeeze(mag);
phase = squeeze(phase);
%adjusting the phase
phase = phase - 360;
subplot(2,1,1);
% plot amplitude response
semilogx(wout,20*log10(mag));
hold on;
%mark a point at wout(101)
semilogx(wout(101),20*log10(mag(101)),'xr');
text(wout(101),20*log10(mag(101)),'\omega = 1')
%plot phase response
subplot(2,1,2);
semilogx(wout,phase);

Диаграмма Боде с использованием Боде