绘制伯德图的三种方式

绘制伯德图的两种方式: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 轴范围
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱代码的小黄人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值