Matlab FFT,但具有线性波长标度
当在Matlab中对时间u的函数执行FFT时,将返回复频谱uf。为了根据其频率内容绘制频谱振幅abs(uf),可以制作一个频率网格来容纳uf。我可以将波长网格和频率网格关联起来,并绘制uf图。频率阵列中每个元素之间的间距是恒定的,但由于波长~1/频率,波长阵列中每个点之间的间距随阵列索引而变化。我很好奇,是否有一种方法可以对时间函数进行FFT,从而得到具有恒定间距的波长光谱。以下是我在Matlab中的代码:Matlab FFT,但具有线性波长标度,matlab,fft,Matlab,Fft,当在Matlab中对时间u的函数执行FFT时,将返回复频谱uf。为了根据其频率内容绘制频谱振幅abs(uf),可以制作一个频率网格来容纳uf。我可以将波长网格和频率网格关联起来,并绘制uf图。频率阵列中每个元素之间的间距是恒定的,但由于波长~1/频率,波长阵列中每个点之间的间距随阵列索引而变化。我很好奇,是否有一种方法可以对时间函数进行FFT,从而得到具有恒定间距的波长光谱。以下是我在Matlab中的代码: clc; close all; clear all; lam = 800e-9; %
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值。您能更简洁地说明您的问题吗?为什么您的波长间隔需要一个恒定的间隔?FFT总是以固定的频率间隔计算,这会导致非恒定的波长间隔(
wav=c./ff
)。如果需要,你可以插值。我需要一个恒定的波长间隔,因为我生成的光谱振幅将作为另一个需要恒定波长间隔的程序的输入。谢谢你,我的布朗王子:)。