没有 bode() 函数的波特图

计算科学 matlab 绘图 八度
2021-12-11 20:40:16

有什么方法可以在不使用 MATLAB/GNU Octave 函数的情况下制作波特图bode()

例如,这是我正在处理的一个函数:

H(s)=12s2+3s+4

1个回答

听起来您想省略使用 MATLAB 工具包/Octave 包。当然,您可以从头开始构建波特图:

% transfert function as anonymous function
h = @(s)(1)./(2*s.^2+3*s+4);
% frequency vector
w = 2*pi*logspace(-2,2,1000);
% magnitude & phase estimation
mag = abs(h(1j*w));
magDB = 20*log10(mag);
phaseDeg = rad2deg(angle(h(1j*w)));

% plotting
clf;
subplot(211);
  semilogx(w/2/pi,magDB);
  xlabel('frequency [Hz]');
  ylabel('magniude [dB]');
  title('Bode diagram');
  grid on;
subplot(212);
  semilogx(w/2/pi,phaseDeg);
  xlabel('frequency [Hz]');
  ylabel('phase angle [°]');
  title('Phase diagram');
  grid on;

使用的等效代码bode()是:

try
    pkg load control % required by octave
end

s = tf('s');
h = 1/(2*s^2+3*s+4);
bode(h);