我有一个匹配滤波器,我想在Matlab中绘制它的频率响应。
我试图用它绘图:
%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');
我不知道他们之间有什么区别。为什么在第一个上不需要'元素操作',而在第二个中则有?
感谢。
答案 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)
的数据的向量。