复杂FFT和反FFT MATLAB

4
我正在使用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操作后的变化。 - ypnos
ReverseFFTInput是相位修改后的逆傅里叶变换的复杂输入。它已经处于频域,'ifft()'函数显示了ReverseFFTinput在时域中的组成部分。 - KRS-fun
我想表达的是,你只在时间域绘图。你应该在fft()之后、ifft()之前在频率域绘图,以查看你对信号在频率域所做的改变。就像他们在这里为2D信号所做的那样:http://www.cs.unm.edu/~brayer/vision/fourier.html - ypnos
1
你能分享一下“fft_data.asc”文件的链接,以便可以重现你的结果吗? - Eitan T
@EitanT 当然可以,这是链接。 感谢您的时间! - KRS-fun
1个回答

4
您实际上看到了两种效应。
首先,您说的是“消除相位的波长依赖性”。如果您确切地这样做——完全将相位归零—— 您实际上会得到一个略微压缩的峰值。 您实际上所做的是向相位添加一个线性函数。这不会压缩任何东西;这是一种众所周知的转换,等效于在时间域中移动峰值。这只是傅立叶变换的教科书属性。
然后出现了意外效应。您使用fftshift来转换fft获得的光谱以获得更好的显示效果。因此,在使用ifft将其转换回来之前,您需要首先应用ifftshift。但由于您没有这样做,光谱在频率域中实际上被移位了。这导致您的时间域相位增加了一个时间的线性函数,因此相邻点之间原本接近零的差异现在大约为pi。

这是否意味着将最佳拟合应用于展开的相位,并从实际相位中减去该值不是尝试压缩脉冲的有效方法? - KRS-fun
我曾认为将相位的波长依赖性转化为一个常数(或尽可能接近)在光谱范围内的脉冲边界内,可以减少啁啾并压缩峰值? - KRS-fun
1
通常情况下,是的,会有所改善。然而,您正在拟合一个线性函数,但是线性项不会改变峰值形状。如果您需要压缩它,则需要使用非线性函数进行逼近。线性函数在此任务中无用。 - Tanriol
如果啁啾信号中的相位随着波长呈线性变化会怎样? - KRS-fun
1
如果相位相对于波长是线性的,那么你的峰值已经处于可能的最压缩状态。 - Tanriol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接