FFT,但具有线性波长标度

FFT, but with a linear wavelength scale

在Matlab中对时间函数u进行FFT时,返回的是复谱uf。要根据其频率内容绘制频谱幅度 abs(uf),可以制作一个频率网格以容纳 uf。我可以将波长网格与频率网格相关联,并针对它绘制 uf。频率阵列中每个元素之间的间距是恒定的,但由于波长 ~ 1/频率,波长阵列中每个点之间的间距随阵列索引而变化。我很好奇是否有一种方法可以采用时间函数的 FFT 来产生具有恒定间距的波长光谱。这是我在 Matlab 中的代码:

clc;
close all;
clear all;

lam = 800e-9; % Wavelength (m)
c = 3e8; % Light speed (m/s)

nt = 8192; % Temporal grid resolution
T = 400*1e-15; % Temporal grid size (s)
dt = T/nt; % Temporal pixel spacing

df = 1/(nt*dt); % Frequency pixel spacing
ff = [(0:nt/2-1) (-nt/2:-1)]*df; % Frequency grid 
ff = fftshift(ff); 

wav = c./ff; % Wavelength array (spacing is not constant between each element)

for k = 1:nt
    tt(k) = (-nt/2+k-1)*dt; % Time array
    u(k) = cos(2*pi*c/lam*tt(k)); % Function of time
end

%Now I can take FFT:

uf = fftshift(fft(u)); % The spectrum of my function. The FFT has yielded a spectrum associated with a frequency array of linearly spaced elements (ff).

光谱振幅与波长和频率的关系图都产生了良好的结果。

figure(1)
plot(ff,abs(uf)) 
title('Spectral amplitude vs frequency')
xlabel('Frequency (Hz)')
ylabel('Spectral amplitude')

figure(2)
plot(wav,abs(uf))
title('Spectral amplitude vs wavelength')
xlabel('Wavelength (m)')
ylabel('Spectral amplitude');

但是我的波长阵列没有固定间距:

figure(3)
plot(ff)
title('Frequency array')
ylabel('Frequency (Hz)')
xlabel('Index')

figure(4)
plot(wav)
xlim([(nt/2 +1) (nt/2 + 100)])
title('Wavelength array')
ylabel('Wavelength (m)')
xlabel('Index')

您应该制作一个线性间隔的波长阵列并插值您的数据以找到线性间隔的 y 值。