小编最近在学习快速傅里叶变换(FFT),看到有篇文章的一句话,小编觉得真的太适合概括FFT的功能,既通俗易懂又包含深意。

“FFT的作用就是:通过计算,把信号的配方罗列出来。”

                                                                       ----- 沃兹基.硕德

莎士比亚说过:“有一千个读者就有一千个哈姆雷特”,对于FFT,每个人的理解,小编相信都是不一样的,但是不得不说书上关于FFT的说明,小编真的看不明白,理解较为困难。以下是小编自己的一些想法,FFT真正有自己的理解有点难,这里建议大家可以多看看他人关于FFT的分析与解释,总有一种是适合你的理解。

下列表格是关于苹果的营养成分表:

营养成分表

项目

每100g

NRV%

能量

218KJ

3%

蛋白质

0.3g

1%

脂肪

0.2g

<1%

碳水化合物

14g

5%

纤维

2.4g

10%

10g

-

维生素C

4.6mg

5%

一整个苹果就相当于我们所给的原始信号,而FFT的作用就是将苹果的营养成分表列出来,让我们知道苹果是由哪些营养成分组成的。如此一理解,是不是很通俗易懂。

转回头来说一下快速傅里叶变换(FFT)

在时域范围内,我们经常可以看到信号波形,就如下图所示,这是我用matlab随意生成了的一个随机信号波形图:

上图随机信号的波形并不是我们传统意义上的正弦信号波形图,但是这样的波形图可以拆分为不同频率、幅度等的正弦信号波叠加的组成。

再如,我们给定信号x(t)=sin(50Πt)+sin(100Πt)+cos(50Πt),其波形图如下,经过FFT也如下图所示:

FFT

从上图两个表中可以看出,我们给定的信号主要是频率为25Hz、50Hz的正弦波。

这里也从而再次验证了一开始我们所说的营养成分,我们经过FFT可以知道了我们原始信号是由哪些配方所构成的,即由哪些频率段的正弦波构成。

(这里说一下关于经过FFT后得到的图,当它频率为0时得到的是指直流分量)

最后附上对信号进行快速傅里叶变换(FFT)的matlab代码:

% 定义参数
Fs = 1000;                  % 采样频率 (Hz)
T = 1/Fs;                   % 采样周期 (s)
L = 1000;                   % 信号长度
t = (0:L-1) * T;            % 时间向量

% 生成信号 x(t)
x = sin(50*pi*t) + sin(100*pi*t) + cos(50*pi*t);

% 绘制时间域信号波形图
figure;
plot(t, x)
title('Signal x(t) in Time Domain')
xlabel('Time (seconds)')
ylabel('Amplitude')

% 进行FFT
X = fft(x);

% 计算频率范围
P2 = abs(X/L);              % 双边频谱
P1 = P2(1:L/2+1);           % 单边频谱
P1(2:end-1) = 2*P1(2:end-1);

f = Fs*(0:(L/2))/L;         % 频率向量

% 绘制频域信号幅度图
figure;
plot(f, P1)
title('Single-Sided Amplitude Spectrum of x(t)')
xlabel('Frequency (Hz)')
ylabel('Amplitude')

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐