我是靠谱客的博主 完美哈密瓜,最近开发中收集的这篇文章主要介绍matlab画伯德图(带谐振点和-3dB带宽),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

画伯德图可以用simulink或者matlab自带的bode函数:

P=bodeoptions;
P.Grid='on';
P.XLim={[1e-2,100]};%设置横轴范围
P.FreqUnits='Hz';%将横坐标单位换位HZ
P.YLim={[-30,3],[-135,10]};%设置纵轴范围
num1=[30,369.8,1367];
den1=[2.152E-4,0.2704,29.99,358.9,1367];
Gx_validation=tf(num1,den1);
[mag,phase,wout]=bode(Gx_validation,P)
%bode(Gx_validation,P)
margin(Gx_validation)

但是其不能准确输出和在图中标出谐振点和-3dB的点(只能用figure下的游标数据来标),下面根据伯德图的定义,直接用传递函数G(iw),算出其幅值和幅角:

%this function is to calculate the bode diagram without using bode function
%directly.
figure(1);
%% -----限定坐标轴输出范围-----
axisxmin=1e-2;
axisxmax=1e2;
axisyminmag=-inf;
axisymaxmag=4;
axisyminpha=-inf;
axisymaxpha=45;
%% -----幅频图------
subplot(2,1,1);
f=logspace(-2,2,10000);
%频率采样,利用logspace在横坐标log之后均匀取点,防止线性取点后画图时的不均匀
w=f*2*pi;
wi=complex(0,w);
%使角频率和虚数单位结合
%输入系统传递函数
G=(30*(wi).^2+127.9*wi+163.6)./(1.244e-3*(wi).^4+0.7818*(wi).^3+29.99*(wi).^2+124.1*wi+163.6) ;
magnitude=20*log10(abs(G));
%幅度换算为dB单位
semilogx(f,magnitude);
title('G_{a_Z} Bode Diagram');
axis([axisxmin,axisxmax,axisyminmag,axisymaxmag]);
box on;
%xlabel('frequency (Hz)','Fontweight','bold','FontSize',20);
ylabel('Magnitude (dB)','Fontweight','bold','FontSize',20);
grid minor;
%加密网格
set(gca,'xticklabel',[])
%去掉横坐标数字
set(gca,'GridLineStyle','-','XGrid','on','YGrid','on');
%添加横坐标和纵坐标的网格
set(gca,'FontSize',10,'Fontweight','bold');
%调节坐标轴字体大小粗细
hold on;
%% -----相频图------
subplot(2,1,2);
phase=angle(G)*180/pi;
%取虚数幅角值,并转换弧度为角度
semilogx(f,phase);
axis([axisxmin,axisxmax,axisyminpha,axisymaxpha]);
box on;
xlabel('frequency (Hz)','Fontweight','bold','FontSize',10);
ylabel('Phase (deg)','Fontweight','bold','FontSize',10);
grid minor;
%加密网格
set(gca,'GridLineStyle','-','XGrid','on','YGrid','on');
%添加横坐标和纵坐标的网格
set(gca,'FontSize',10,'Fontweight','bold');
%调节坐标轴字体大小粗细
hold on;
%% -----添加谐振点-----
subplot(2,1,1);
[magmax,fmax] = max(magnitude);
%谐振点为幅频曲线的极值点
fmax = f(fmax);
plot(fmax,magmax,'o','LineWidth',2,'MarkerSize',5,'MarkerEdgeColor','k')
text(fmax,magmax-2,sprintf('Resonance point:n(%.3f Hz, %.3f dB)',fmax,magmax),...
'VerticalAlignment','top','HorizontalAlignment','right')
%'VerticalAlignment','bottom'
hold on;
%% -----添加-3dB带宽-----
B=abs(magnitude+3);
[x,index]=sort(B);
%为了得到最接近-3dB的值,先对绝对值进行排序,index为排序前的坐标值
mag_3db=magnitude(index(1));
f_3db=f(index(1));
plot(f_3db,mag_3db,'o','LineWidth',2,'MarkerSize',5,'MarkerEdgeColor','r')
text(f_3db,mag_3db,sprintf('Cut-off point:n(%.3f Hz, %.3f dB)',f_3db,mag_3db),...
'VerticalAlignment','bottom','HorizontalAlignment','left')
%在目标坐标点处添加文字

 

 

 

 

最后

以上就是完美哈密瓜为你收集整理的matlab画伯德图(带谐振点和-3dB带宽)的全部内容,希望文章能够帮你解决matlab画伯德图(带谐振点和-3dB带宽)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(101)

评论列表共有 0 条评论

立即
投稿
返回
顶部