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)
.
的向量
我有一个匹配滤波器,我想在 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)
.