使用 MATLAB 简单 fft 到高斯脉冲

信息处理 matlab fft 高斯
2022-02-21 07:17:44

尝试简单地在 MATLAB 中创建飞秒脉冲,就像在所附图像中一样,

在此处输入图像描述

载波频率在374THz左右,我的采样频率是载波的10倍。fft 的结果没有任何可以理解的结果......试图改变一些变量,fs,t-around 零,fftshift......但无法断定代码有什么问题。

我的代码遵循 matlab fft 示例:

clear all ; close all ; clc
f=374.7e12;%Thz
fs=f*10; %sampling frequency
T=1/fs;
L=1000;
sigma=5e-15;
t=(0:L-1)*T; %time base



x=(exp(-(t-50e-15).^2/(2*sigma)^2)).*exp(-1i*2*pi*f*t);
subplot(2,1,1)
plot(t,real(x),'b');
title(['Gaussian Pulse \sigma=', num2str(sigma),'s']);
xlabel('Time(s)');
ylabel('Amplitude');
ylim([-1 1]) 
xlim([10e-15 90e-15])

NFFT = 2^nextpow2(L);
X = fft(x,NFFT)/L;
Pxx=X.*conj(X)/(NFFT*NFFT); %computing power with proper scaling
f = fs/2*linspace(0,1,NFFT/2+1); %Frequency Vector

subplot(2,1,2)
plot(f,2*abs(X(1:NFFT/2+1)))
title('Magnitude of FFT');
xlabel('Frequency (Hz)')
ylabel('Magnitude |X(f)|');

结果是:

在此处输入图像描述

1个回答

你根本不绘制你想看到的东西。请注意,您的时域信号是复数值的,并且您通过频率进行调制。所以事情发生的频率范围是负频率(或 - 通过周期性 - 范围内的频率[fs/2,fs]),但那些你不情节。如果您更改频率矢量的定义和相应的绘图命令,您将看到您期望看到的内容(即频域中的高斯分布在fsf=3.37e15赫兹):

f = fs*linspace(0,1,NFFT); % (full range) Frequency Vector
...
plot(f,2*abs(X)) 

在此处输入图像描述

或者,只需将负调制频率更改为正调制频率

x=(exp(-(t-50e-15).^2/(2*sigma)^2)).*exp(1i*2*pi*f*t);

并保持其他一切不变。那么频域中的高斯集中在f=374.7太赫兹。这可能是您最初期望看到的。

在此处输入图像描述