Matlab元件级电源-can';我不明白它是怎么工作的
我有一个匹配滤波器,我想在Matlab中绘制它的频率响应 滤波器响应为:H(f)= 我试图用以下方式来描绘它: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)') 这不起作用,给了我“矩阵尺寸必须一致”的错误种类。 然后,我阅读了“元素级电源”,它
%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
,而不是找出点/点的位置。