Matlab元件级电源-can';我不明白它是怎么工作的

Matlab元件级电源-can';我不明白它是怎么工作的,matlab,plot,elementwise-operations,Matlab,Plot,Elementwise Operations,我有一个匹配滤波器,我想在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)') 这不起作用,给了我“矩阵尺寸必须一致”的错误种类。 然后,我阅读了“元素级电源”,它

我有一个匹配滤波器,我想在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)')
这不起作用,给了我“矩阵尺寸必须一致”的错误种类。 然后,我阅读了“元素级电源”,它似乎完全符合我的需要,并将
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);
为什么“元素智慧力量”对我不起作用

更重要的是,常规操作和“元素操作”之间到底有什么区别?因为,例如,在这里:,有这样一个图:

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');
我看不出他们之间有什么区别。为什么在第一种情况下不需要“元素操作”,而在第二种情况下则需要“元素操作”

谢谢。

原因是
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)

的向量。简单的经验法则:当您想要执行元素操作时:在每个
/
*
^
之前插入一个点。这有点过头了,也就是说,
2.*pi
除了
2*pi
之外什么都不做,因为两者都已经是标量了,但至少可以避免调试这些难以发现的错误。我支持Adrian的评论。你不需要它将一个标量乘以一个矩阵,但是如果你有两个矩阵(
x,y
)中间有一个标量(
k
),你可能会遇到调试问题:
x*k
k*y
都可以工作,但是
x*k*y
会导致错误。只需将它放在两个位置:
x.*k.*y
,而不是找出点/点的位置。