【发布时间】:2017-08-02 17:38:02
【问题描述】:
在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')
【问题讨论】:
-
您能更简洁地陈述您的问题吗?
-
为什么需要恒定的波长间隔? FFT 始终以固定频率间隔计算,这会导致波长间隔不恒定 (
wav = c./ff)。如果需要,您可以进行插值。 -
我需要一个恒定的波长间隔,因为我生成的光谱幅度将作为另一个需要恒定波长间隔的程序的输入。