paddle深度学习框架中的FFT

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了paddle深度学习框架中的FFT相关的知识,希望对你有一定的参考价值。

简 介: 介绍了在深度学习框架Paddle下的FFT相关函数。

关键词 FFTpaddle

FFT
文章目录
背景
DFT定义
实数傅里叶变换和
厄米特傅里叶变换
自动微分
FFT函数
FFT,IFFT
总 结

 

§01 FFT


1.1 背景

  FFT 是离散傅里叶变换(DFT)的快速算法。具有很好的计算效率,是数值计算的重要支柱。

1.2 DFT定义

1.2.1 DFT定义

  对于序列 x j , j = 0 , 1 , ⋯   , n − 1 x_j ,j = 0,1, \\cdots ,n - 1 xj,j=0,1,,n1,对应的一维DFT定义如下:

X k = ∑ j = 0 n − 1 x j e δ ⋅ j ⋅ 2 π j k n X_k = \\sum\\limits_j = 0^n - 1 x_j e^\\delta \\cdot j \\cdot 2\\pi jk \\over n Xk=j=0n1xjeδj2πnjk

  对应频率为 j j j的频率分量为: x j = e i ⋅ 2 π f ⋅ j ⋅ Δ t x_j = e^i \\cdot 2\\pi f \\cdot j \\cdot \\Delta t xj=ei2πfjΔt。其中 Δ t \\Delta t Δt为采样时间间隔。

  • n n n为序列长度,也是傅里叶变换后结果的长度。
  • δ \\delta δ是与变换方向有关系:正变换中,取值为-1, 逆变换时曲志伟1。
  • σ \\sigma σ为缩放系数,和变换的方向以及缩放有关系。在paddle.fft中,缩放方案有三种形式:
    • backward: 正向和逆向FFT的缩放系数分别为 1, 1/n;
    • forward:正向和逆向FFT的缩放系数分别为:1/n, 1;
    • ortho:正向和逆向FFT的缩放系数都是:1/sqrt(n);

1.2.2 输出结果

  输出的结果遵循“标准”排布:

  如果 X = fft(x, n), 那么 X[0] 包含 0 频率项(亦即直流分量),对于实数输入来说, 这一项总是实数。X[1: n//2] 包含正频率项,频率以递增顺序排列。X[n//2 + 1:] 包含负 频率项,频率以绝对值从大到小排列。对于傅里叶变换点数为偶数的情况,X[n//2] 同时包含了正和 负的奈奎斯特(Nyquist)频率项,对于实数输入来说,这一项也总是实数。X[(n-1)//2] 为频率最 大的正频率项,X[(n+1)//2]为频率绝对值最大的负频率项。

  paddle.fft.fftfreq(n) 可以返回频谱中每一项对应的频率值。paddle.fft.fftshift(X) 可以对频谱进行偏移,将零频率移动到中心位置,paddle.fft.fftshift(X) 则是这个变换的逆变 换。

1.2.3 多维离散傅里叶变换

  多维离散傅里叶变换的定义如下:

X k 1 , k 2 , ⋯   , k d = σ ∑ j d = 0 n d − 1 ⋯ ∑ j 2 = 0 n 2 − 1 ∑ j 1 = 0 n l − 1 x j 1 , j 2 , ⋯   , j d e δ i ⋅ i ⋅ 2 π ⋅ ∑ l = 1 d j l ⋅ k l n ⋅ l X_k_1 ,k_2 , \\cdots ,k_d = \\sigma \\sum\\limits_j_d = 0^n_d - 1 \\cdots \\sum\\limits_j_2 = 0^n_2 - 1 \\sum\\limits_j_1 = 0^n_l - 1 x_j_1 ,j_2 , \\cdots ,j_d e^\\delta _i \\cdot i \\cdot 2\\pi \\cdot \\sum\\limits_l = 1^d j_l \\cdot k_l \\over n \\cdot l Xk1,k2,,kd=σjd=0nd1j2=0n21j1=0nl1xj1,j2,,jdeδii2πl=1dnljlkl

d d d是傅里叶变换的维数, n 1 ,

以上是关于paddle深度学习框架中的FFT的主要内容,如果未能解决你的问题,请参考以下文章

Paddle-Mobile 百度嵌入式深度学习框架

百度嵌入式深度学习框架Paddle-Mobile介绍

Paddle初探

干货Paddle:百度拥抱世界,开源其深度学习软件平台

Paddle 网络中的Tensor 数据结构

运行在浏览器中的深度学习框架,开源了