为什么从'trapz'出来的矢量作为NAN?

时间:2012-12-08 16:17:32

标签: matlab

我正在尝试计算向量XRECW的逆傅里叶变换。出于某种原因,我得到了一个N​​ANs的矢量。 请帮助!!

t = -2:1/100:2;    
x = ((2/5)*sin(5*pi*t))./((1/25)-t.^2);    
w = -20*pi:0.01*pi:20*pi;    
Hw = (exp(j*pi.*(w./(10*pi)))./(sinc(w./(10*pi)))).*(heaviside(w+5*pi)-heaviside(w-5*pi));%low  pass filter     
xzohw = 0;    
for q=1:20:400
    xzohw = xzohw + x(q).*(2./w).*sin(0.1.*w).*exp(-j.*w*0.2*((q-1)/20)+0.5);%calculating fourier transform of xzoh    
end    
xzohw = abs(xzohw);     
xrecw = abs(xzohw.*Hw);%filtering the fourier transform  high frequencies    

xrect=0;
for q=1:401

    xrect(q) = (1/(2*pi)).*trapz(xrecw.*exp(j*w*t(q))); %inverse fourier transform
end
xrect = abs(xrect);
plot(t,xrect)

1 个答案:

答案 0 :(得分:2)

以下是对“为什么”存在问题的直接回答。如果运行代码,则Nan在第7行中除以0来计算xzohw。请注意w包含零:

>> find(w==0)
ans =
   2001

您可以在第7行中看到,您将w的元素除以(2./w)因子。

快速修复(尽管不保证您的代码可以执行您想要的操作)是通过使用避免零的步骤来避免在w中包含0。因为pi肯定不能被100整除,所以你可以尝试以.01为增量的步骤:

w = -20*pi:0.01:20*pi;

使用此代码,您的代码会生成一个可能与您正在寻找的类似的图。为了做得更好,我们可能需要更多关于您正在尝试做什么的细节,或者这些变量代表什么。

希望这有帮助!