Matlab元素智能 - 无法理解它是如何工作的

时间:2016-05-25 05:30:27

标签: matlab plot elementwise-operations

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

过滤器响应为:H(f)= Frequency response of wiener filter

我试图用它绘图:

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

哪个不起作用,给我错误'矩阵尺寸必须同意'种类。 然后我读到了关于“元素智能”的内容,它似乎完全符合我的需要,并将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);

为什么'元素智慧'不适合我?

不仅如此 - 常规操作与“元素操作”之间的差异到底是什么?因为,例如,在这里: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');

我不知道他们之间有什么区别。为什么在第一个上不需要'元素操作',而在第二个中则有?

感谢。

1 个答案:

答案 0 :(得分:3)

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

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

在第二种情况下,您发布:

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

您需要.,以便Matlab了解1必须是长度为numel(x)的数据的向量。