快速傅里叶变换python_简洁透彻讲解傅立叶变换及其在AI中的应用

傅里叶变换的作用是将我们从时域移到频域。

607ab91f9cf048fe8397177fdac98d29

介绍

傅里叶变换是有史以来最深刻的数学见解之一,但不幸的是,其含义深深地埋在了一些荒谬的方程式中。

傅立叶变换是一种将某些东西分解为一堆正弦波的方法。像往常一样,这个名字来自一个很久以前的数学家,叫做傅里叶。

用数学术语来说,傅立叶变换是一种将信号转换为其组成成分和频率的技术。

傅里叶变换不仅广泛用于信号(无线电,声音等)处理,而且还广泛用于图像分析(例如,傅里叶变换)。边缘检测,图像过滤,图像重建和图像压缩。一个例子:透射电子显微镜图像的傅立叶变换有助于检查样品的周期性。周期性-表示模式。数据的傅立叶变换可以扩展有关分析样品的可访问信息。为了更好地理解它,请考虑信号x(t):

732ba8444a6841a695c1603f28e2d552

如果我们对另一个信号执行相同操作,并选择相同的时间点,我们将测量其幅度。

考虑另一个信号y(t):

6715127fab0b48b885276c60ebc70567

当我们同时发出这两个信号或将它们加在一起时会发生什么?

当我们在同一时间发射这两个信号时,我们得到一个新信号,它是这两个信号的振幅之和。之所以如此,是因为这两个信号被加在一起。

将两个信号相加:z(t)= x(t)+ y(t)

b2d09f39b2004648ab7b3de4a2fb0d49

如果只给出一个信号(x(t)和y(t)之和),我们能否恢复原始信号x(t)和y(t)?

是。这就是傅立叶变换的作用。它吸收信号并将其分解为组成它的频率。

在我们的示例中,傅立叶变换会将信号z(t)分解成其组成频率,如信号x(t)和y(t)。

傅里叶变换的作用是将我们

从时域移到频域。

3406f0e5621c4184b07be5f4165e4167

如果有人怀疑,我们是否要从频域回到时域呢?

我们可以使用傅立叶逆变换(IFT)来实现。

" 时域中的任何连续信号都可以由无穷多个正弦波来唯一唯一地表示。"

这是什么意思?

这意味着,如果我们有某个函数生成的信号,则x(t)可以提出另一个函数,f(t)例如:

d3b9e8e8996f483591dc1c2fb85912a9

因此,无论信号有多强,我们都可以找到一个函数f(t),该函数是无限多个正弦曲线之和,

实际上可以完美地代表信号。

现在的问题是,如何在上式中找到系数,因为这些值将决定输出的形状,从而决定信号的形状。

8aab714e7ea54acc949d19306c8bf7a1

因此,为了获得这些系数,我们使用傅立叶变换,并且傅立叶变换的结果是一组系数。因此,我们X(w)用来表示傅立叶系数,它是频率的函数,是通过求解以下积分得到的:

傅立叶变换表示为不定积分:

X(w):傅立叶变换x(t):傅立叶逆变换

49bcfed58552457eb382f024c0e0e7d2

ea40d447f6c0499bbb8acf0a9833dad6

8019361c495c4032afe79c98b258f48a

傅立叶变换和傅立叶逆变换

同样,当我们实际求解上述积分时,我们会在以下位置得到这些复数a并b对应于我们所要求的系数。

连续傅立叶变换将无限持续时间的时域信号转换成由无限数量的正弦波组成的连续频谱。实际上,我们处理的是离散采样的信号,通常以固定间隔,有限的持续时间或周期性地进行。为此,经典傅里叶变换算法可以表示为离散傅里叶变换(DFT),该函数将函数的等距样本的有限序列转换为离散时间的等距样本的等长序列傅里叶变换:

3c9e9850ac1e42ebb01c63dc0027c4cd

因此,这本质上是离散傅立叶变换。我们可以进行此计算,并且将产生一个复数,形式是我们在傅里叶级数中有两个系数a + ib

现在,我们知道了如何对信号进行采样以及如何应用离散傅立叶变换。我们希望做的最后一件事是,我们想摆脱复数的i,因为它不支持的mllib或者systemML使用一些被称为欧拉公式的规定:

8c9d53ab10834bd59c48123cec5c7492

因此,如果将欧拉公式代入傅立叶变换方程并求解,它将产生实部和虚部。

c3a31f7eb7ec4a6c8b308d0e07e4b528

X由复数形式的a+ib或组成a-ib。因此,如果求解上述方程,将获得傅立叶系数

a和

b。

5b2bf145dbd64dc698dbadad9007d31f

198063f1998c4f0ba7347b23adbd268a

现在,如果只是将

a和

b的值放在等式中,f(t) 则可以根据信号的频率定义信号。

在一般实践中,我们使用快速傅里叶变换(FFT)算法,该算法将DFT递归地划分为较小的DFT,从而大大减少了所需的计算时间。DFT的时间复杂度为2N²,而FFT 的时间复杂度为2NlogN。

为什么表示信号时要使用余弦和正弦函数?

虽然正弦和余弦函数最初是基于直角三角形定义的,但在当前情况下,从那种角度来看并不是最好的事情。传统观点中正弦函数是"斜边对立的",但是现在是时候有一点不同的观点了。

考虑单位圆:

8a8f2fca2e7040b794f4c0f31cc58b13

在笛卡尔平面上。假设通过原点的直线与轴在逆时针方向上形成角度θ,则直线与圆的交点为(cos⁡θ,sin⁡θ)。

dd3ed571b01f4bb2b0e33e1b2c97f612

想一想。这种观点与较早的观点相关吗?这两个定义是相同的。

假设我们通过使θ线性增加开始旋转直线。你会得到这样的东西:

7eee2db8bf6e429a8c2e87dd4d38973b

正弦和余弦函数在某些情况下可以说是最重要的周期函数:

SHM振荡器中位移,速度和加速度如何随时间变化的周期性函数是正弦函数。

2.每个粒子都有波动的性质,反之亦然。这是

德布罗意的波粒对偶。波浪始终是某种物理量的正弦函数,例如EM波的电场和声波的压力。

声音本身就是压力扰动,它通过能够压缩和扩展的材料介质传播。与声波一起的一点处的压力随时间呈正弦变化。

傅立叶变换的收敛

如果一个点以恒定的速度绕圆运动,则其在地面上方的高度将跟踪正弦函数。点移动的速度对应于频率,圆的半径对应于振幅。

83281a8d738f41499e703427f711e31e

再增加1个圆圈,

再添加2个圆圈,

ff13a323bdb44db6b4c1fb8dddadc741

再添加9个圆圈:

0f485c6bac504a9caa933abb33aa7f94

几乎是离散的波形。

由于傅立叶定理,我们可以生成具有适当频率和半径的圆的任何信号。

人工智能中的傅立叶变换

傅立叶变换是线性函数,可引起非线性。使用卷积。

2个信号的乘积的傅立叶变换是2个信号的卷积。

令x(t)和y(t)是两个具有卷积X(t)* Y(t)的函数,而F表示傅立叶变换,则

F {x(t).y(t)} = X(t)* Y(t)

请记住,

时域中的卷积是频域中的乘法。这就是傅立叶变换主要用于机器学习,尤其是深度学习算法的方式。

我将以

卷积神经网络(CNN)为例;

CNN中

90%的计算是卷积,并且有许多方法可以降低这种计算的强度,其中之一是快速傅立叶变换(FFT)。

代替卷积,输入和滤波器矩阵通过FFT转换到频域,以进行乘法。然后,通过逆 FFT(IFFT)将输出转换回时域。

e585201d7f714f6fbbec5879848ba3d9

FFT的另一用途是可用于降维或特征提取。

当数据集中的每个样本都是信号(时间序列或图像等)时,它可能包含数千个样本。但是它们实际上可能只对应于傅立叶域中的几个点(特别是如果存在一定的周期性)。这大大简化了问题。

有时使用傅立叶域可能会提供平移不变性。也就是说,即使信号之间存在滞后,这种方差也不会影响它们在傅立叶域中的表示。

傅立叶变换的Python实现

可以使用numpy和scipy python库完成FFT的最简单实现。

%matplotlib inline

import numpy as np

import matplotlib.pyplot as plt

import scipy.fftpack

# Number of samplepoints

N = 600

# sample spacing

T = 1.0 / 800.0

x = np.linspace(0.0, N*T, N)

y = np.sin(50.0 * 2.0*np.pi*x) + 0.5*np.sin(80.0 * 2.0*np.pi*x)

yf = scipy.fftpack.fft(y)

xf = np.linspace(0.0, 1.0/(2.0*T), N/2)

fig, ax = plt.subplots()

ax.plot(xf, 2.0/N * np.abs(yf[:N//2]))

plt.show()

60e837ada7d64be3afb148f9578a19c0

FFT图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值