绘制伯德图的两种方式:bode图或者使用semilogx
第一种:使用bode函数绘制伯德图
利用s=tf('s');
构造传递函数,比如
R=0.3174;
L=0.05e-3;
w=2*pi*50;
Z1=tf([L,R],1);
Z2=tf(-w*L,1);
% s=tf('s');
% Z1=L*s+R;
之后利用bode函数绘制伯德图,有两种方式
第一种直接绘制伯德图
使用bode函数绘制
figure(1)
bode(Z1);
第二种:将bode函数的幅值和相位提取出来分别绘制
figure(2)
wout=logspace(log10(1),log10(10000),10000)*2*pi;
[mag,phase,wout]=bode(Z1,wout);
subplot(2,1,1);
semilogx(wout/(2*pi), 20*log10(squeeze(mag)), 'LineWidth', 1,'Color','r');
ylabel('Magnitude (dB)');
grid on;
subplot(2,1,2);
semilogx(wout/(2*pi), squeeze(phase), 'LineWidth', 1,'Color','r');
grid on;
xlabel('Frequency (Hz)');
ylabel('Phase (deg)');
这里有一个问题,使用bode函数和把bode函数的幅值和相位提取出来的绘制结果有时候相位会在180°有差异,bode函数绘制相位180°是在180°,提取出来相位之后画的相位为-180°。(目前不知道怎么统一)
第三种:使用for循环变量替换绘制伯德图
首先定义一个频率数组
fvec=logspace(0,4,100);
使用for循环将s变量替换为jw
for k=1:1:length(fvec)
fre1=fvec(k);
% test阻抗矩阵
R=0.3174;
L=0.05e-3;
w=2*pi*50;
s=1i*2*pi*fre1;%fp的频率变化
Z1(k)=s*L+R;
end
之后绘制幅值和相位
figure(3)
subplot(2,1,1)
hold on
semilogx(fvec,20*log10(abs(Z1)),'k','LineWidth',1);grid on
ylabel('Magnitude (dB)');
subplot(2,1,2)
hold on
semilogx(fvec,angle(Z1)*180/pi,'k','LineWidth',1);grid on
ylabel('Phase (deg)');
xlabel('Frequency (Hz)');
ylim([-200, 200]); % 设置 y 轴范围
伯德图对比:
R=0.3174;
L=0.05e-3;
w=2*pi*50;
Z1=tf([L,R],1);
Z2=tf(-w*L,1);
% s=tf('s');
% Z1=L*s+R;
figure(1)
bode(Z2);
ylim([-200, 200]); % 设置 y 轴范围
figure(2)
wout=logspace(log10(1),log10(10000),10000)*2*pi;
[mag,phase,wout]=bode(Z2,wout);
subplot(2,1,1);
semilogx(wout/(2*pi), 20*log10(squeeze(mag)), 'LineWidth', 1,'Color','r');
ylabel('Magnitude (dB)');
grid on;
subplot(2,1,2);
semilogx(wout/(2*pi), squeeze(phase), 'LineWidth', 1,'Color','r');
grid on;
xlabel('Frequency (Hz)');
ylabel('Phase (deg)');
ylim([-200, 200]); % 设置 y 轴范围
clear all
fvec=logspace(0,4,100);
for k=1:1:length(fvec)
fre1=fvec(k);
% test阻抗矩阵
R=0.3174;
L=0.05e-3;
w=2*pi*50;
s=1i*2*pi*fre1;%fp的频率变化
Z1(k)=s*L+R;
Z2(k)=-w*L;
end
figure(3)
subplot(2,1,1)
hold on
semilogx(fvec,20*log10(abs(Z2)),'k','LineWidth',1);grid on
ylabel('Magnitude (dB)');
subplot(2,1,2)
hold on
semilogx(fvec,angle(Z2)*180/pi,'k','LineWidth',1);grid on
ylabel('Phase (deg)');
xlabel('Frequency (Hz)');
ylim([-200, 200]); % 设置 y 轴范围