程序是这样的:
T=10e-6;
K=B/T;
B=50e6;
Fs=4*B;
N=T*Fs;
t=linspace(-T/2,T,1+3*N/2);
for m=1:3001
if m
xt(m)=exp(1i*pi*K*(t(m).^2));
end
if (m>=N/2+1) && (m<=N+1) /*这行判断出错*/ (*)
xt(m)=exp(1i*pi*K*(t(m).^2))+exp(1i*pi*K*((t(m)-T/2).^2)); (**)
end
if (m>N+1) && (m<=3*N/2+1)
xt(m)=exp(1i*pi*K*((t(m)-T/2).^2));
end
end
如上,计算可得N=2000.0,由判断条件可知m=1001=N/2+1时,应该采用(**)式,计算结果xt(1001)=0。
但是上述程序运行结果xt(1001)= 1.0000 + 0.0000i
要想得到正确结果,程序必须改成这样:
for m=1:3001
if m<1001
xt(m)=exp(1i*pi*K*(t(m).^2));
end
if (m>=N/2+1) && (m<=N+1) /*这行判断出错*/ (*)
xt(m)=exp(1i*pi*K*(t(m).^2))+exp(1i*pi*K*((t(m)-T/2).^2)); (**)
end
if (m>N+1) && (m<=3*N/2+1)
xt(m)=exp(1i*pi*K*((t(m)-T/2).^2));
end
end
或者
for m=1:3001
if m
xt(m)=exp(1i*pi*K*(t(m).^2));
end
if (m>=1001) && (m<=N+1) /*这行判断出错*/ (*)
xt(m)=exp(1i*pi*K*(t(m).^2))+exp(1i*pi*K*((t(m)-T/2).^2)); (**)
end
if (m>N+1) && (m<=3*N/2+1)
xt(m)=exp(1i*pi*K*((t(m)-T/2).^2));
end
end
也就是程序中出现的两个”N/2+1“至少有一个必须改为1001,请问这是为什么?实在是不解啊。
O(∩_∩)O谢谢!
:)