为什么单个正弦波周期的傅里叶变换不是单个条形?

电器工程 信号 控制 信号处理 傅立叶
2022-01-28 08:23:09

我已经在单个正弦波上尝试了不同的傅里叶变换代码,当理论上它们应该显示单个条时,它们都会在信号频率处产生具有共振的分布频谱。

采样频率几乎没有影响(此处为 10kHz),但周期数有:

一个周期:

在此处输入图像描述

100 次循环:

在此处输入图像描述

100000 次循环:

在此处输入图像描述

看起来傅里叶变换只收敛无限多个周期,这是为什么呢?恰好一个周期的时间窗口不应该带来与N个周期相同的结果吗?

应用:这既是出于好奇,也是因为我想知道一阶系统的阶跃响应会在多大程度上激发机械组件的共振。因此,我需要对响应进行准确的傅立叶变换......我不再相信它了。那么,基于“正弦波”的情况,我能做些什么来提高准确性呢?

在此处输入图像描述

PS:这些特定的屏幕截图基于此处的代码。

1个回答

这是一个窗口工件。

链接代码用零填充 10,000 个样本信号,因此长度是 2 的幂。

%% Author :- Embedded Laboratory

%%This Project shows how to apply FFT on a signal and its physical 
% significance.

fSampling = 10000;          %Sampling Frequency
tSampling = 1/fSampling;    %Sampling Time
L = 10000;                  %Length of Signal
t = (0:L-1)*tSampling;      %Time Vector
F = 100;                    %Frequency of Signal

%% Signal Without Noise
xsig = sin(2*pi*F*t);
...

%%Frequency Transform of above Signal
subplot(2,1,2)
NFFT = 2^nextpow2(L);
Xsig = fft(xsig,NFFT)/L;
...

请注意,在上面的代码中,FFT 采用 FFT 大小NFFT,它是信号长度(在本例中为 16,384)的 2 次幂。来自Mathworksfft()文档

Y = fft(X,n)返回 n 点 DFT。fft(X)相当于第一个非单一维度中fft(X, n)n大小。X如果 的长度X小于nX用尾随零填充到 length n如果 的长度X大于n,则序列X被截断。X是一个矩阵时,列的长度以相同的方式调整。

这意味着您实际上并没有对“纯正弦波”进行 FFT - 您正在对正弦波进行 FFT,其后是平坦信号。

这相当于将正弦波乘以方窗函数的 FFT。FFT 频谱是正弦波频谱(脉冲函数)与方波频谱(sinc(f))的卷积。

如果您进行更改L = 16,384以使信号没有零填充,您将观察到perfectFFT。

进一步搜索关键词:“光谱泄漏”、“窗函数”、“汉明窗”。


编辑:我清理了一些我在大学时写的关于这个主题的材料,这些材料更详细。我已经在我的博客上发布了