【发布时间】:2016-05-25 14:31:32
【问题描述】:
我有一个匹配滤波器,我想在 Matlab 中绘制它的频率响应。
我试图用以下方式绘制它:
%Freqency_Response_of_wiener_filter
f = linspace(-1e3,1e3,1e5);
H = ((2*pi*f)^2+10^6)/(11*(2*pi*f)^2+10^6+10^4);
plot(f,H);
xlabel('f')
ylabel('H(f)')
这不起作用,给我“矩阵尺寸必须一致”的错误。
然后我读到了“element-wise power”,它似乎完全符合我的需要,并将H 更改为:
H = ((2*pi*f).^2+10^6)/(11*(2*pi*f).^2+10^6+10^4);
这确实是在策划一些事情,只是不是我想要的 :) 我也试过了
H = ((2*pi)^2*f.^2+10^6)/(11*(2*pi)^2*f.^2+10^6+10^4);
没有运气。 我让它工作的唯一方法是:
%Freqency_Response_of_wiener_filter
f = linspace(-1e3,1e3,1e5);
for i=1:length(f)
H(i) = ((2*pi*f(i))^2+10^6)/(11*(2*pi*f(i))^2+10^6+10^4);
end
plot(f,H);
为什么 'element-wise power' 对我不起作用?
不仅如此 - 常规操作与“元素操作”之间究竟有什么区别?因为,例如,在这里:An Introduction to Matlab,有这样的情节:
a = 0:.01:5;
b = cos(2*pi*a);
plot(a,b)
然后是这个:
x = 2:.1:4;
y = 1./x;
plot(x,y)
xlabel('x');
ylabel('y');
我无法分辨它们之间的任何区别。为什么第一个不需要“逐元素操作”,而第二个却有?
谢谢。
【问题讨论】:
-
简单的经验法则:当您想要进行元素操作时:在每个
/、*和^之前插入一个点。这有点矫枉过正,即2.*pi除了2*pi之外没有做任何其他事情,因为两者都已经是标量,但至少它可以让您免于调试这些难以发现的错误。 -
我赞同 Adriaan 的评论。您不需要将标量乘以矩阵,但如果您有两个矩阵 (
x,y) 和标量 (k) 之间,您可能会遇到调试问题:x*k和k*y两者工作,但x*k*y会导致错误。无需弄清楚将点/点放在哪里,只需将其放在两个位置:x.*k.*y.
标签: matlab plot elementwise-operations