1

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

这不起作用,给了我“矩阵尺寸必须同意”的错误。然后我读到了“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);

为什么“元素方面的力量”对我不起作用?

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

我无法分辨它们之间的任何区别。为什么第一个不需要“元素操作”,而第二个需要?

谢谢。

4

1 回答 1

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)

于 2016-05-25T06:20:06.063 回答