Matlab element-wise power - 无法理解它是如何工作的

Matlab element-wise power - can't understand how it works

我有一个匹配滤波器,我想在 Matlab 中绘制它的频率响应。

滤波器响应为:H(f) =

我试着用它来绘制它:

%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)')

不起作用,给我 'Matrix dimensions must agree' 类的错误。 然后我阅读了 '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' 对我不起作用?

不仅如此 - 常规操作与 'element-wise operation' 之间究竟有什么区别?因为,例如,在这里: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');

我看不出它们有什么区别。为什么第一个不需要'element-wise operation',而第二个需要?

谢谢。

之所以H = ((2*pi)^2*f.^2+10^6)/(11*(2*pi)^2*f.^2+10^6+10^4);不行是因为你需要./:

H = ((2*pi)^2*f.^2+10^6)./(11*(2*pi)^2*f.^2+10^6+10^4);

第一种情况:

a = 0:.01:5;
b = cos(2*pi*a);
plot(a,b)

您不需要逐元素运算,因为只有一种方法可以计算向量或矩阵的余弦值。

另一方面,另一种情况:

x = 2:.1:4;
y = x.^2;
plot(x,y)
xlabel('x');
ylabel('y');

您需要指定要进行逐元素运算,而不是将矩阵乘以自身(仅适用于方矩阵)。

第二种情况你post:

x = 2:.1:4;
y = 1./x;
plot(x,y)
xlabel('x');
ylabel('y');

您需要 . 以便 Matlab 理解 1 必须是长度为 numel(x).

的向量