【问题标题】:Plot two figures on the same figure using subplot [duplicate]使用子图在同一图形上绘制两个图形[重复]
【发布时间】:2014-12-09 08:34:54
【问题描述】:

我正在尝试使用subplot 绘制以下内容,我该怎么做?谢谢

[n,wc]= buttord(Wp,Ws,Rp,Rs);  
[z,p,k]=butter(n,wc);
sos = zp2sos(z,p,k);   


freqz(sos) ;
grpdelay(sos) ; 

请注意,这很重要,因为 freqz 已经生成了一个子图。

【问题讨论】:

  • 您应该更详细地回答您的问题,而不是 this comment 澄清 freqz 创建子图这个问题似乎微不足道。
  • @TobiasKienzler - 我同意这不再是重复的。我将投票重新开放。 OP 应该明确指出 subplot 不能开箱即用。

标签: matlab signal-processing


【解决方案1】:

如果您使用的函数每个都绘制一个图形,则以下将起作用:在每个产生图形输出的函数之前调用subplot。从manual 来看,这很简单,subplot(m,n,p) 将图形拆分为 m x n 图形的网格并绘制第 p 个图形。但是,正如@hbaderts 所指出的,freqz 会生成一个自己的子图,因此您需要重新排列它以包括即将输出的grpdelay

这就是你可以做到的方式,根据this 线程中提出的解决方法(请参阅它以了解更多通用解决方案)。

freqz(sos);
h = get(gcf, 'children');
fig2=figure;
figure(fig2)
g=subplot(3,1,1)
set(h(1), 'pos', get(g, 'pos'))
figure(fig2)
g=subplot(3,1,2)
set(h(2), 'pos', get(g, 'pos'))
close
g=subplot(3,1,3)
grpdelay(sos)

【讨论】:

  • freqz 在子图中绘制幅度和相位,这不起作用。
  • @hbaderts,谢谢,我已经更新了答案。
【解决方案2】:

可能最简单的解决方案是使用freqz 计算频率响应并使用freqzplot 绘制它。这不是最佳解决方案,因为 freqzplot 已过时。更好的解决方案是手动创建绘图(例如20*log10(abs(h)))。

[h,w] = freqz(sos);
subplot(2,2,1);
freqzplot(h,w,'mag');
subplot(2,2,3);
freqzplot(h,w,'phase');
subplot(2,2,[2,4]);
grpdelay(sos);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2018-06-23
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多