使用子图在同一图上绘制两个数字

时间:2014-12-09 08:34:54

标签: matlab signal-processing

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

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


freqz(sos) ;
grpdelay(sos) ; 

请注意,这是非平凡的,因为freqz已经产生了一个子图。

2 个答案:

答案 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);