What is FFT? FFT学习笔记

这篇具有很好参考价值的文章主要介绍了What is FFT? FFT学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在时间序列、数字信号的数据处理中经常会看到使用FFT作为一段数据中提取频率的手段,但是往往文中没有花大笔墨去解释,仿佛所有人都了解这个概念。

FFT(Fast Fourier Transform) 为快速傅里叶变换,是一种高效计算DFT(Discrete Fourier Transform),离散傅里叶变换的方法。在了解FFT之前需要先了解DFT的作用。

DFT

离散傅里叶变换(Discrete Fourier Transform,简称DFT)是一种数学算法,用于将一个序列或信号从时域转换到频域,广泛应用于信号处理、图像处理、音频分析、通信系统等领域。时域是指信号随时间的变化,而频域则描述了信号中不同频率成分的分布。人话说,就是由一段x=时间; y=幅度的信号数据转换成为x=频率; y=幅度的数据,可以参考以下这个图:

What is FFT? FFT学习笔记

原信号(上图)中存在两种不同的频率(f=25f=100),通过DFT提取可以看到下图中,它们在频域上显示了两个峰出来。在频域中,信号被表示为一系列频率成分,每个成分由一个幅度(amplitude)和相位(phase)组成。

DFT是傅里叶分析在离散信号处理领域的核心工具,主要目的是将离散信号(时域信号)转换成其对应的频。与连续信号不同,离散信号在时间上是分隔的,例如数字音频或图像数据。

数学表达

DFT将一个长度为\(n\)的复数或实数序列 \( [x_0, x_1, ..., x_{n-1}]\) 转换成另一个长度为 \(n\) 的复数序列 \([X_0, X_1, ..., X_{n-1}]\) 转换的公式为

\[X(k) = \sum_{j=0}^{n-1} \mathbf{x}_n \cdot e^{-i \frac{2\pi}{n}kj} \tag{1} \label{eq1} \]

其中,\(i\) 是虚数单位,\(k\)是当前频率的索引。

由于因为它涉及对每个输出频率 \(X_k\) 进行 \(n\) 次复数乘法和加法操作,直接计算的复杂度为 \(O(n^2)\),因此往往都会使用FFT来进行高效计算。FFT并不改变DFT的结果,只是提供了一种更快的计算方式。

FFT

FFT主要采用了一些技巧来简化流程。

复数单位根

首先将以上公式\(\eqref{eq1}\)中的指数部分写为以下格式:

\[e^{-i\frac{2\pi}{n} kj}=\omega_n^{kj}, \text{where }\omega_n =e^{-i\frac{2\pi}{n}} \]

证明:

Definition: 如果一个复数\(\omega ^n=1\), 我们将\(\{\omega_n^k\}, k=1,...n\) 定义为n次单位根。n次单位根有三个性质,后面会用到:

\[\text{1. }\omega^k_n = \omega^{2k}_{2n} \quad \text{2. }\omega^k_n = -\omega^{k+\frac{n}{2}}_{n}\quad \text{3. }\omega^0_n = \omega^{n}_{n}=1 \tag{2}\label{eq2} \]

由于欧拉公式 \(e^{\pi i}=-1\),我们可以得出 \(\omega_n :=e^{-i\frac{2\pi}{n}}\) 是一个n次单位根。再做一些简单的幂运算就可以得出上面的公式

多项式变换

首先确定几个notation,我们要处理的信号数据是 \(\mathbf{x} \in \mathbb{R}^T\)(暂时假设是一维),是一个长度为\(T\)的数组。\(\mathbf{x}_n\) 代表了在n时间点上信号数据的值。

我们使用\(f(x)\)来指代需要进行的FFT计算,注意这里 \(x\)\(\mathbf{x}\) 不同。将公式\(\eqref{eq1}\)的多项式可以展开为一个多项式t

\[f(x) = \mathbf{x}_0 + \mathbf{x}_1x + \mathbf{x}_2x^2+\mathbf{x}_3x^3+...+\mathbf{x}_{n-1}x^{n-1} \]

让我们不失一般性地,假设\(n=2^s\),因为我们可以将一个多项式延展到更高次的多项式,将系数设为0。让我们根据\(\mathbf{x}_n\)下标的奇偶性将\(f(x)\)分为两个部分:

\[\begin{aligned} f(x) & = (\mathbf{x}_0 + \mathbf{x}_2x^2+\mathbf{x}_4x^4+...+\mathbf{x}_{n-2}x^{n}) + (\mathbf{x}_1x+\mathbf{x}_3x^3+\mathbf{x}_5x^5+...+\mathbf{x}_{n-1}x^{n-1}) \\ & = (\mathbf{x}_0 + \mathbf{x}_2x^2+\mathbf{x}_4x^4+...+\mathbf{x}_{n-2}x^{n})+x \cdot (\mathbf{x}_1 + \mathbf{x}_3x^2+\mathbf{x}_5x^4+...+\mathbf{x}_{n-1}x^{n-1}) \\ & = f_1(x^2)+xf_2(x^2)\\ \text{where:}&\\ f_1(x) & = \mathbf{x}_0 + \mathbf{x}_2x^2+\mathbf{x}_4x^4+...+\mathbf{x}_{n-2}x^{n}\\ f_2(x) & = \mathbf{x}_1x+\mathbf{x}_3x+\mathbf{x}_5x^4+...+\mathbf{x}_{n-1}x^{n-1} \end{aligned} \]

将公式 \(\eqref{eq1}\) 中的 \(\omega_n^k =e^{-i\frac{2\pi}{n}k}\) 作为 \(x\) 带入,根据单位根性质 \(\eqref{eq2}\) 中的 \(\omega^k_n = \omega^{2k}_{2n}\) 可得:

\[\begin{aligned} f(\omega_n^k) &= f_1(\omega_n^{2k})+\omega_n^{k}\cdot f_2(\omega_n^{2k}) \\ \omega^k_n = \omega^{2k}_{2n} &\Rightarrow \\ &= f_1(\omega_{\frac{n}{2}}^k) + \omega_n^{k}\cdot f_2(\omega_{\frac{n}{2}}^k) \\ \end{aligned} \]

\(x=\omega_n^{k+\frac{n}{2}}\) 带入,再根据单位根性质可得

\[\begin{aligned} f(\omega_n^{k+\frac{n}{2}}) &= f_1(\omega_n^{2k+n})+\omega_n^{k+\frac{n}{2}} \cdot f_2(\omega_n^{2k+n})\\ \omega^k_n = -\omega^{k+\frac{n}{2}}_{n}, \omega^0_n = \omega^{n}_{n}=1 &\Rightarrow \\ &= f_1(\omega_n^{2k}) - \omega_n^k f_2(\omega_n^{2k}) \\ &= f_1(\omega_\frac{n}{2}^{k}) - \omega_n^k f_2(\omega_\frac{n}{2}^{k}) \end{aligned} \]

因此,通过计算 \(f_1(\omega_\frac{n}{2}^{k}), \omega_n^k f_2(\omega_\frac{n}{2}^{k})\) 可以通过 \(\text{O(logn)}\) 复杂度计算得到 \(f(\omega_n^k), f(\omega_n^{k+\frac{n}{2}})\) ,再通过 \(\text{O(nlogn)}\) 计算得到多项式所有的项。文章来源地址https://www.toymoban.com/news/detail-821396.html

到了这里,关于What is FFT? FFT学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于机器学习/深度学习的时间序列分析相关论文

    Robust Time Series Analysis and Applications: An Industrial Perspective, in  KDD  2022. Time Series in Healthcare: Challenges and Solutions, in  AAAI  2022. [[Link]](https://www.vanderschaar-lab.com/time-series-in-healthcare/) Time Series Anomaly Detection: Tools, Techniques and Tricks, in  DASFAA  2022. [[Link]](https://www.dasfaa2022.org//tutorials/T

    2024年02月13日
    浏览(35)
  • 时间序列中的无监督表示学习

    自监督学习中,有一个常用的方法是对比学习; Time-series representation learning via temporal and contextual contrasting(IJCAI’21) 本文采用对比学习的方式进行时间序列表示学习。首先对于同一个时间序列,使用strong和weak两种数据增强方法生成原始序列的两个view。 Strong Augmentation指的是将

    2024年02月10日
    浏览(26)
  • 深度学习时间序列预测项目案例数据集介绍

    💥项目专栏:【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍) 🌈 本专栏使用的数据集为 风速预测的时间序列数据 ,该数据集包含一个气象站内嵌入的5个天气变量传感器阵列的 6574 个每日平均样本。该设备位于油

    2023年04月15日
    浏览(33)
  • 机器学习-使用 XGBoost 时间序列预测能源消耗

    简而言之,时间序列预测是根据以前的历史数据预测未来值的过程。目前使用时间序列预测的最热门领域之一是加密货币市场,人们希望预测比特币或以太坊等流行加密货币的价格在未来几天甚至更长时间内将如何波动。另一个现实世界的案例是能源消耗预测。尤其是在能源

    2024年02月11日
    浏览(33)
  • 机器学习多步时间序列预测解决方案

    近年来,随着机器学习与深度学习的发展机器学习平台的成熟,数据科学家们不再需要关心底层的基础设施及构建复杂的训练与推理环境,从而可以把主要的时间与精力放在数据与算法本身。在机器学习变得更容易的今天,越来越多的传统行业已经开始使用机器学习算法来解

    2024年02月10日
    浏览(38)
  • 【时间序列综述】Transformer in Time Series:A Survey 论文笔记

    文章全名:Transformers in Time Series: A Survey 文章链接:[论文地址]([2202.07125v2] Transformers in Time Series: A Survey (arxiv.org)) 来源:IJCAI 2023 完成单位:阿里巴巴达摩院、上海交通大学 Transformer在自然语言处理和计算机视觉领域都取得了诸多成果,Transformer的捕获长距离依赖和交互的能力

    2024年04月26日
    浏览(32)
  • tableau基础学习2:时间序列数据预处理与绘图

    这一部分,我们记录一些分析时序趋势的分析步骤 原始数据是excel表格,其中包含三个Sheet页, 这里我们选择两家公司的股票,作为时序数据进行对比:恩捷股份与科大讯飞 首先打开下面的【已使用数据解释器清理】,这里可以自动剔除一部分无用行,以保留需要分析的数据

    2024年02月10日
    浏览(30)
  • 【关于时间序列的ML】项目 5 :用机器学习预测天气

      🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】 ​​  🖍foreword

    2023年04月21日
    浏览(27)
  • 时间序列预测模型实战案例(四)(Xgboost)(Python)(机器学习)图解机制原理实现时间序列预测和分类(附一键运行代码资源下载和代码讲解)

    目录图解机制原理 简介 Xgboost预测精度 实验一(回归) 实验二(分类) Xgboost的数学机制原理 图解Xgboost运行机制原理  决策树 决策树结构图 Xgboost Xgboost的机制原理 贪心算法 Xgboost总结 数据格式需求 Xgboost运行代码 Xgboost时间序列预测及代码 Xgboost分类任务及代码 Xgboost运行资源下

    2024年02月03日
    浏览(50)
  • 深度学习和机器学习中针对非时间序列的回归任务,有哪些改进角度?

    在非时间序列的回归任务中,深度学习和机器学习都是常用的方法。为了进一步提升模型的性能,可以通过改进数据处理、数据增强、特征选择、模型选择、模型正则化与泛化、优化器、学习率、超参数调优等方面,来提升模型的性能和可解释性。 提高数据质量和进行恰当的

    2024年01月19日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包