ldhorz
ldhorz
采纳率0%
2020-09-13 14:43

matlab进行傅里叶反变换?

由输出信号频域,进行傅里叶反变换得到时域,应与输入信号相同,但结果并不是如此。感觉错误出现在
phi=N*T.^2/(2*pi*m);
h=exp(0.5i*phi*w.^2);
y2=y1.*h;
x2 =ifftshift(ifft(y2));
这几行里,求大神指导。

代码如下

nt = 1024; Tmax = 32;%FFT点数和最大抽样间隔
t = (-nt/2:nt/2-1)*(2*Tmax)/nt;
w = (pi./Tmax).* [(0:nt/2-1) (-nt/2:-1)];
t0=0.6;T=6;%输入高斯信号的半宽度和周期
x1 = exp(-0.5*(t/t0).^2)+exp(-0.5*(t/t0-T/t0).^2)+exp(-0.5*(t/t0+T/t0).^2)+exp(-0.5*(t/t0-2*T/t0).^2)+exp(-0.5*(t/t0+2*T/t0).^2);
y1 = fftshift(fft(x1)).*(2*Tmax)/sqrt(2*pi);
figure; subplot(4,1,1);
plot (t, abs(x1).^2, 'r');

axis([-15 15 0 1.2]);
xlabel('时间(s)');
ylabel('平均功率(A.U.)');
title('输入信号时域');
subplot(4,1,2);
plot (fftshift(w)/(2*pi), abs(y1).^2, 'r');
axis([-1 1 0 inf]);
xlabel('频率(Hz)');
ylabel('平均功率(A.U.)');
title('输入信号频域');
N=3;m=1;%Talbot阶数和倍频因子
phi=N*T.^2/(2*pi*m);
h=exp(0.5i*phi*w.^2);
y2=y1.*h;
x2 =ifftshift(ifft(y2));
subplot(4,1,3);
plot (t, abs(x2).^2, 'r');
axis([-50 50 0 inf]);
xlabel('时间(s)');
ylabel('平均功率(A.U.)');
title('输出信号时域');
subplot(4,1,4);
plot(fftshift(w)./(2*pi), abs(y2).^2, 'r');
axis([-1 1 0 inf]);
xlabel('频率(Hz)');
ylabel('平均功率(A.U.)');
title('输出信号频域');

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

相关推荐