永发信息网

matlab画的bode图能看看频率从-20dB/dec变为-40dB/dec的交接频率吗?怎么看

答案:2  悬赏:70  手机版
解决时间 2021-12-23 11:50
matlab画的bode图能看看频率从-20dB/dec变为-40dB/dec的交接频率吗?怎么看?急,在线等,先谢过各位大神
最佳答案
MATLAB画的bode图是精确的对数频率特性曲线,不是控制理论里面讲的近似折线图,所以,不能直接从图中看出交接频率。
 
有些情况下,可以从两端较为平直的部分按照直线延伸得到交点,但如果模型中各转折频率相距比较近的话,幅相曲线会很难看出平直的部分,这种情况下上述方法不适用。
 
可以通过求零极点的方法直接确定各典型环节的转折频率,并按照大小排序,进而得到各转折频率及对应的斜率变化。这里提供一个我多年前编写的画折线图的函数,供参考。
 
效果图:



 
参考代码:
function corner( sys )
% Corner plot
if ~nargin, sys = zpk([-2 -5], [-1+i -1-i 0 -3], 1); end
KeyFun = [ ...
      'AsciiVal= abs(get(gcf,''CurrentCharacter''));' ...
      'if ~isempty(AsciiVal),' ...
      '  if AsciiVal==27,' ...
      '    close(gcf);' ...
      '  end,' ...
      'end' ];
if 0,
bode(sys)
ax=findobj(gcf,'type','axes');lines=findobj(gcf,'type','line');set(lines,'linewidth',1.5)
set(ax,'units','points');set(gcf,'units','points');set(gcf,'pos',get(gcf,'pos')-[0 0 0 30])
set(gcf, 'KeyPressFcn', KeyFun )
hold on;
end
sys
[mag, phase, w] = bode(sys);
[p, z] = pzmap( sys );
[z, p, K] = zpkdata( sys );
z = z{1};
 p = p{1};
K = K * prod( -z(z~=0) ) / prod( -p(p~=0) );

v = sum( p == 0 ) - sum( z == 0 );
p = p( p ~= 0 );
z = z( z ~= 0 );
wp = ones(0,2);
for i = 1 : length(p),
    if imag(p(i)) == 0,
        % for non-zero real poles
        wp = [wp; abs(p(i)) -20];
    elseif imag(p(i)) > 0,
        % for complex conjugate poles, only consider those have positive imaginary parts
        wp = [wp; abs(p(i)) -40];
    end
end
wz = ones(0,2);
for i = 1 : length(z),
    wz = [wz; abs(z(i)) 20];
end
wmin = w(1);
wmax = w(end);
wmin = min([wp(:,1); wz(:,1)]);
wmax = max([wp(:,1); wz(:,1)]);
if wmax == wmin, fac = 10; else, fac = 3; end
wmin = wmin / fac; wmax = wmax * fac;
ww = [wp; wz; wmin -20*v; wmax 0];
[mag, phase, w] = bode(sys, {wmin wmax});
[temp, idx] = sort( ww(:, 1) );
ww = ww(idx, :);
ww(:, 2) = cumsum( ww(:, 2) );
h(1) = 20 * log10(K) - 20 * v * log10(ww(1,1));
for i = 2 : size(ww, 1)
    h(i) = h(i-1) + ww(i-1, 2) * log10( ww(i,1) / ww(i-1,1) );
end
fprintf('  v = %i, K = %.3g, 20lgK = %.3g\n', v, K, 20 * log10(K) );
fprintf('  %i', ww(1, 2) );
for i = 2 : size(ww, 1) - 1,
    fprintf(' --(%.3g)--> %i', ww(i, 1), ww(i, 2) );
end
fprintf('\n\n  ');
fig_h = 400;
fig_v = 300;
ax_l = 60;
ax_r = 20;
ax_b = 40;
ax_off = 15;
ax_t = 15;
ax_h = fig_h - ax_l - ax_r;
ax_v = ( fig_v - ax_b - ax_t - ax_off ) / 2;
figure('Name', 'Corner plot', 'KeyPressFcn', KeyFun, 'Units', 'Points', 'Pos', [100 100 fig_h fig_v], 'Color', 'w', 'Number', 'off' );
%subplot(2, 1, 1);
axes( 'Units', 'Points', 'Pos', [ax_l fig_v-ax_v-ax_t ax_h ax_v] );
plot([ww(1,1) ww(end,1)], [0 0], 'Color', ones(1,3)*.8);
hold on
plot(ww(:,1), h(:), 'LineWidth', 2, 'color', 'k');
plot(w, 20*log10(permute(mag, [3 1 2])), ':', 'color', 'k');
for i = 2 : length(h) - 1,
    plot([ww(i,1) ww(i,1)], [h(i) 0], ':');
    if h(i) >= 0,
        valign = 'top';
        halign = 'right';
    else
        valign = 'bottom';
        halign = 'left';
    end
    text(ww(i,1), 0, num2str(ww(i,1), '%.3g'), 'VerticalAlignment', valign, 'HorizontalAlignment', halign);
end
set(gca, 'XScale', 'log', 'XtickLabel', '', 'Xlim', [wmin wmax], 'Box', 'on');
% convert 'Points' to 'Data'
p2d_v = ax_v / diff(get(gca, 'ylim'));
p2d_h = ax_h / diff(log10(get(gca, 'xlim')));
for i = 1 : length(h) - 1,
    x = sqrt(ww(i,1)*ww(i+1,1));
    y = (h(i)+h(i+1))/2;
    ang = atan2( (h(i+1) - h(i)) * p2d_v, log10( ww(i+1,1)/ww(i,1) ) * p2d_h ) * 180 / pi;
    if y >= 0,
        valign = 'bottom';
        y = y + 2 / p2d_v;
    else
        valign = 'top';
        y = y - 1 / p2d_v;
    end
    text(x, y, sprintf('[%.3g]', ww(i,2)), 'VerticalAlignment', valign, 'HorizontalAlignment', 'center', 'Rotation', ang);
end
ylabel('Magnitude (dB)');
%subplot(2, 1, 2);
axes( 'Units', 'Points', 'Pos', [ax_l ax_b ax_h ax_v] );
%plot([ww(1,1) ww(end,1)], [-180 -180], 'Color', ones(1,3)*.8);
hold on
plot(w, permute(phase, [3 1 2]), 'LineWidth', 2, 'color', 'k');
set(gca, 'XScale', 'log', 'Xlim', [wmin wmax], 'Box', 'on');
ylabel('Phase (deg)');
xlabel('Frequency (rad/sec)');
set( findobj(gcf, 'type', 'axes'), 'Units', 'normal' )
print -dmeta
全部回答
不急
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
陈若轩老婆是曹曦月吗 陈若轩老婆是谁
求把一句话翻译成云南话
昆明到哈尔滨多少公里
人的皮肤干燥时,双手之间的电阻约为几千欧至
战舰世界和坦克世界哪个技术需求,难度高些?
公安网有违法嫌疑人记录怎么办?
北里社区居委会地址在什么地方?想过去办事
我感觉d7500,升级一个4k拍摄,没什么用
中国最早的书是谁发明的
阅读下面的文字,根据要求作文。(60分)成长
西安装修公司哪个好
襄州城关一中择校费
那汉子口里唱着,走上冈子来,松林里头歇下担
单选题设NA代表阿伏加德罗常数的值,下列有关
怎么投诉苏宁易购呢!!求高手支招 15分
推荐资讯
我家是一楼新买的房子,刚住一年的时候两个卧
西班牙马德里到荷兰阿姆斯特丹自己开车需要多
为什么手热手痒肉里面有白泡
无人喝彩阅读答案
从北京到甘肃平凉的汽车票价是多少?
荣谋村委会地址有知道的么?有点事想过去!
依次填人下面一段文字横线处的语句,衔接最恰
学健美操和学舞蹈哪个出路更广?急急急、、
单选题把比例尺为十万分之一的地图放大1倍,
在腾讯QQ与朋友聊天时,打回家两个字就出现卡
地域上的东方指的是哪几个国家
换苹果手机怎么导短信
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?