【发布时间】:2012-08-12 19:37:59
【问题描述】:
我正在使用 Matlab 中的 FFT 函数来分析行波激光模型的输出。
模型的时域形式为(实部、虚部),其思想是将FFT应用于复数输出,以获得频域中的相位和幅度信息:
%load time_domain field data
data = load('fft_data.asc');
% Calc total energy in the time domain
N = size(data,1);
dt = data(2,1) - data (1,1);
field_td = complex (data(:,4), data(:,5));
wavelength = 1550e-9;
df = 1/N/dt;
frequency = (1:N)*df;
dl = wavelength^2/3e8/N/dt;
lambda = -(1:N)*dl +wavelength + N*dl/2;
%Calc FFT
FT = fft(field_td);
FT = fftshift(FT);
counter=1;
phase=angle(FT);
amptry=abs(FT);
unwraptry=unwrap(phase);
展开之后,对感兴趣区域中的相位应用最佳拟合,然后从相位本身中减去,以尝试消除感兴趣区域中相位的波长依赖性。
for i=1:N % correct phase and produce new IFFT input
bestfit(i)=1.679*(10^10)*lambda(i)-26160;
correctedphase(i)=unwraptry(i)-bestfit(i);
ReverseFFTinput(i)= complex(amptry(i)*cos(correctedphase(i)),amptry(i)*sin(correctedphase(i)));
end
手动执行最佳拟合后,我现在有了如上所示的逆 FFT 输入。
pleasework=ifft(ReverseFFTinput);
我现在可以从中提取时域中的相位和幅度信息:
newphasetime=angle(pleasework);
newamplitude=abs(pleasework);
然而,虽然相位的输出与时域的输入相比有很大的不同
校正后数据的幅度似乎变化不大(如果有的话!),
尽管相位缩放。从物理上讲,这似乎不正确,因为我的理解是消除相位的波长依赖性应该“压缩”脉冲输入,即缩短脉冲宽度但提高峰值。
我的主要问题是我是否未能正确使用逆 FFT 或正 FFT 或两者兼而有之,还是这类似于窗口化或归一化问题?
很抱歉这个冗长的问题!并提前致谢。
【问题讨论】:
-
我建议您还绘制频域中的幅度和相位以及它们在操作后如何变化(ReverseFFTInput)。
-
ReverseFFTInput 是执行相位修改后傅里叶逆变换的复数输入。它已经在频域,'ifft()'函数显示了ReverseFFTinput在时域中的分量
-
我想表达的是你只在时域中绘图。您还应该在 fft() 之后和 ifft() 之前在频域中绘图,以查看您对频域中的信号施加的变化。就像他们在这里为 2D 信号所做的一样:cs.unm.edu/~brayer/vision/fourier.html
-
您能否分享一个指向“fft_data.asc”文件的链接,以便重现您的结果?
-
docs.google.com/open?id=0B8N_x95j5pgaall2Vk1QMTlZTE0 @EitanT 当然我可以这里是链接。感谢您的宝贵时间!
标签: matlab transform fft inverse