版本:MATLAB 2018b
问题描述:MATLAB/Simulink的Linear Analysis Tool 功能很强大,可以用其做小信号分析,获得的bode图的数据很难获取,在此总结了如何获取bode图数据的方法。
第一步:插入扰动输入与输出,软件扫频获得bode图,下图,为SS补偿WPT无线电能传输系统的一种控制方法的传递函数。
第二步:将上述bode导出为print to figure,并保存。
下图为导出的figure形式。
第三步:从figure中获取数据。由于bode图有相位图和幅值图,我们一下的命令一次只能获得一个图的信息,因此要进行两次操作,全程请保持figure图开启。
① 获取幅值图
鼠标点击幅值图,保证我们运行的命令是针对幅值图的。
需要用到命令。提示:figure 不要关闭。
lh=findall(gca,'type','line'); % 从当前图(gca)中取出曲线的handle,
xc=get(lh,'xdata'); % 取出x轴数据,注意,这个x和y是以cell的数据结构保存的
yc=get(lh,'ydata'); % 取出y轴数据x=xc{1};从cell转换成矩阵,可以这样写y=yc{1};
运行结束后,或发现xc,yc分别为cell形式的数据
xc{3,1}与yc{3,1}存储了我们所需要的数据。我们可以直接通过一下命令来获取频率信息和幅值。然后通过下边的命令保存我们的频率和幅值信息。
frequency = xc{3};
mag = yc{3}
② 获取相位图信息
鼠标点击相位图,确保我们的命令是针对相位图的。重复上述获取数据的命令,在进行转换。我们就完成了数据的获取。
以上的数据全部存储在数组当中,我们可以通过命令编辑上述数据,进行我们想要的操作了。
附送大家一段代码,将两个bode数据绘制到同一个图中。
figure;
color1=[1,0,0]; %[0.64706 0.16471 0.16471];
color2=[0,0.45,0.74];%[0 0 1];
subplot(2,1,1);
semilogx(Fre_Hz,20*log10(Amp1),'-','Color',color1,'LineWidth',1.2);
hold on;
% semilogx(VarName1,20*log10(VarName3/2/2/pi),'o','Color','g','LineWidth',1.2);
semilogx(VarName1,VarName3,'o','Color','g','LineWidth',1.2);
hold on;
grid on
subplot(2,1,2);
semilogx(Fre_Hz,Pha-720,'-','Color',color1,'LineWidth',1.2);
hold on;
semilogx(VarName1,VarName2,'o','Color','g','LineWidth',1.2);
hold on;
grid on;
效果就是这一个样子。