我正在尝试使用subplot
绘制以下内容,我该怎么做?谢谢
[n,wc]= buttord(Wp,Ws,Rp,Rs);
[z,p,k]=butter(n,wc);
sos = zp2sos(z,p,k);
freqz(sos) ;
grpdelay(sos) ;
请注意,这是非平凡的,因为freqz
已经产生了一个子图。
答案 0 :(得分:4)
如果您使用的函数分别绘制了一个数字,则以下将起作用:在每个产生图形输出的函数之前调用subplot
。它是manual的简单直接,subplot(m,n,p)
将图形分割为m×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)
答案 1 :(得分: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);