首页 > 其他分享 >FFT(快速傅里叶变换)

FFT(快速傅里叶变换)

时间:2023-05-07 21:12:21浏览次数:45  
标签:变换 多项式 FFT 表示法 点值 傅里叶

FFT(快速傅里叶变换)

目录

前言

又要补之前的知识,艹。

快速傅里叶变换 (fast Fourier transform), 即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。

也就是说 :FFT用来加速两个多项式的乘法。

建议学习一下有关复数的知识,这里 我水了一篇博客。

多项式的系数表示法和点值表示法

系数表示法

一个\(n - 1\) 次的 \(n\) 项多项式 \(f(x)\) 可以表示为 \(f(x) = \sum_{i= 0}^{n- 1} a_ix^i\)

即:

\[f(x) = a_0 + a_1x^1 + a_2x^2+a_3x^3+\cdots+a_{n - 1}x^{n - 1} \]

这就是我们平常最常用的 系数表示法

点值表示法

现在有一个多项式 \(f(x)\) 我们可以把它在坐标系上表示出来

  • 把多项式放到平面直角坐标系里面,看成一个函数

  • 把 \(n\) 个不同的 \(x\) 代入,会得出 \(x\) 个不同的 \(y\),在坐标系内就是 \(n\) 个不同的点

  • 那么这 \(n\) 个点 唯一确定 该多项式,也就是 有且仅有 一个多项式满足 $∀k, f(x_k) = y_k $ (这个其实跟插值差不多,大家可以看看这个拉格朗日插值法

所以 \(f(x)\) 就可以表示成 \(f(x) = {(x_0 , f(x_0)),(x_1 , f(x_1))(x_2 , f(x_2) \cdots (x_n - 1 , f(x_n - 1)))}\)

这就是 点值表示法

高精度乘法下两种多项式表示法的区别

对于两个用系数表示的多项式,我们把它们相乘时。

很明显这个时间复杂度是 \(O(n)\) 的

但是点值表示法就不太一样了,只需要 \(O(n)\) 的时间。

假设两个点值多项式分别为

\[f(x) = {(x_0 , f(x_0)),(x_1 , f(x_1))(x_2 , f(x_2) \cdots (x_n - 1 , f(x_n - 1)))} \newline g(x) = {(x_0 , g(x_0)),(x_1 , g(x_1))(x_2 , g(x_2) \cdots (x_n - 1 , g(x_n - 1)))} \]

设他们的乘积是 \(h(x)\) 则

\[h(x) = {(x_0 , f(x_0)\cdot g(x_0)),(x_1 , f(x_1)\cdot g(x_1)),(x_2 , f(x_2)\cdot g(x_2)), \cdots (x_n - 1 , f(x_{n - 1})\cdot g(x_{n - 1}))} \]

所以就只用枚举 \(O(n)\) 就够了

好像我们只用把系数表示法转换成点值表示法就可以 \(O(n)\) 解决多项式乘法了

但是我们朴素的系数转点值要 \(O(n^2)\) ,所以我们要引入FFT

标签:变换,多项式,FFT,表示法,点值,傅里叶
From: https://www.cnblogs.com/2020fengziyang/p/17380158.html

相关文章

  • FFT 精度误差分析
    可能写的有错的,也可能没有,大家看着当个乐子就好。FFT是oi中常用的一种算法,但是我们没有关心过它的精度,所以我们现在来关心一下。我们知道对于一个长度为\(n\)的向量\(\alpha\),我们对它做DFT,相当于左乘了一个正交矩阵\(T\)(我们知道常规的DFT中做的不是标准的正交变换,但......
  • FFT学习笔记
    快速傅里叶变换多项式定义不严谨定义:形如\(f(x)=\sum\limits_{i=0}^{n}a_ix^i\)的式子为多项式。定义(fromOIWiki):对于求和式\(\suma_nx^n\),如果是有限项相加,称为多项式,记作\(f(x)=\sum\limits_{n=0}^ma_nx^n\)。次数:对于多项式\(F(x)=\sum\limits_{i=0}^{n......
  • FFT&NTT学习笔记
    概念多项式乘法时,我们发现暴力乘十分缓慢,但是点值乘十分快速。考虑求\(A\)和\(B\)的卷积。一个\(n\)次多项式可以被\(n+1\)个点确定。设多项式\(A(x)\)的系数为\((a_0,a_1,\cdots,a_n)\)对其奇偶分类得\(A(x)=\sum\limitsa_{2i}*x^{2i}+\suma_{2i+1}*x^{2i+1}\)......
  • Matplotlib 中文用户指南 3.7 变换教程
    变换教程原文:TransformationsTutorial译者:飞龙协议:CCBY-NC-SA4.0像任何图形包一样,matplotlib建立在变换框架之上,以便在坐标系,用户数据坐标系,轴域坐标系,图形坐标系和显示坐标系之间轻易变换。在95%的绘图中,你不需要考虑这一点,因为它发生在背后,但随着你接近自定义图形生成的极......
  • 快速傅里叶变换FFT学习笔记
    点值表示法我们正常表示一个多项式的方式,形如\(A(x)=a_0+a_1x+a_2x^2+...+a_nx^n\),这是正常人容易看懂的,但是,我们还有一种表示法。我们知道,\(n+1\)个点可以表示出一个\(n\)次的多项式。于是,我们任意地取\(n+1\)个不同的值,表示\(x\),求出的值与\(x\)对应,形成\(n+1\)个......
  • cesium-4-属性变换和事件操作
    1、属性变换使用Cesium.CallbackProperty类,构造函数中需要两个参数一个为调用函数,一个为boolean,判断前面这个函数是否需要不断的调用(false即属性不固定),还是只是只调用一次(true即属性固定)代码:...这个extrudedHeight是创建entity中的一个属性extrudedHeight:newCesium.Callb......
  • 示波器数据导入MATLAB进行FFT分析的方法
      http://blog.sina.com.cn/s/blog_710421fa0101crm1.htmlpower_fftscope;示波器保存为.csv格式文件,然后用matlab导入新建.mdl模型文件,示波器里面变量保存为uuuu.time=seconduu.signals.values=Volt在工作台运行上面两条指令,直到FFT分析几面里面出现波形,就可以分析了!1......
  • 坐标变换
    坐标变换最通俗易懂的解释(推导+图解)_肥肥胖胖是太阳的博客-CSDN博客绕一个轴的旋转这里写的旋转角与标准的旋转角互为相反数,标准旋转角的定义为面向旋转轴的方向观察,顺时针为正,逆时针为负,ChatGpt给出的结果:[Chat](#Chat)两个直角坐标系间的变换有6个自由度,分别是\(X、Y、Z......
  • 霍夫变换
    OpenCV:HoughLineTransformGitHub上的一个项目原理与代码二维直线检测一条直线可以表示为:\[\rho=x\cos\theta+y\sin\theta\]在(x,y)空间中的一个点(x0,y0),在\((\theta,\rho)\)空间中表示为一条曲线。在\((\theta,\rho)\)空间中的一个点\((\theta_0,\rho_0)\),在(x,y)......
  • halcon 仿射变换
    一、两点计算:刚体仿射变换1、vector_to_rigid:1)根据两个以上点对计算计算刚性仿射变换矩阵,支持旋转和平移2、vector_angle_to_rigid1)根据点和角度计算刚性仿射变换矩阵,支持旋转和平移 ......