gpt4 book ai didi

matlab - 复数 FFT 然后逆 FFT MATLAB

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:22 25 4
gpt4 key购买 nike

我在 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);

然而,尽管相位的输出与时域中的输入相比有很大不同

blue=output of phase in time domain after inverse FFT back

校正数据的振幅似乎变化很小(如果有的话!),

enter image description here enter image description here

尽管相位缩放。从物理上讲这似乎不正确,因为我的理解是消除相位的波长依赖性应该“压缩”脉冲输入,即缩短脉冲宽度但提高峰值。

我的主要问题是我是否未能正确使用逆 FFT 或正向 FFT 或两者,或者这是否类似于窗口化或归一化问题?

抱歉这个冗长的问题!提前致谢。

最佳答案

您实际上看到了两种效果。

首先是预期的。你在谈论“消除相位的波长依赖性”。如果你确实这样做了——将相位完全归零——你实际上会得到一个稍微压缩的峰值。您实际做的是向相位添加一个线性函数。这不会压缩任何东西;这是一个众所周知的变换,相当于在时域中移动峰值。只是傅里叶变换的教科书属性。

然后是意外的。您将使用 fft 获得的频谱转换为 fftshift 以获得更好的显示效果。因此,在使用 ifft 将其转换回来之前,您需要先应用 ifftshift。正如您不这样做的那样,频谱在频域中有效移动。这导致您的时域相位被添加为时间的线性函数,因此过去接近于零的相邻点之间的差异现在约为 pi。

关于matlab - 复数 FFT 然后逆 FFT MATLAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11925281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com