详解傅立叶变换,看这一文足矣!

news2025/1/12 9:04:25

从听到傅立叶变换这个名词后到现在已经四年了,这次终于对傅立叶变换有了一个基本的初步了解。记录一下,这个傅立叶变换也同时记录了我本科到研究生的四年,一路以来跌跌撞撞,没想到最后还是入了图像的坑

数字图像处理——傅立叶变换

欧拉公式

对于一个复平面(对于欧几里得平面而言,把实数作为x轴,虚数作为y轴)

images

若在复平面上存在一个单位圆,所以在单位圆上的点可以表示为 cos ⁡ θ + sin ⁡ θ ⋅ i \cos\theta+\sin\theta\cdot i cosθ+sinθi

对于泰勒公式:
e x = 1 + x + 1 2 x 2 + 1 6 x 3 + ⋯ + 1 n ! x n = ∑ i = 0 n 1 i ! x i sin ⁡ x = x − 1 6 x 3 + 1 120 x 5 + ⋯ + ( − 1 ) 2 k − 1 ( 2 k − 1 ) ! x 2 k − 1 = ∑ i = 1 n ( − 1 ) i − 1 ( 2 i − 1 ) ! x 2 i − 1 cos ⁡ x = 1 − 1 2 x 2 + 1 24 x 4 + ⋯ + ( − 1 ) k ( 2 k ) ! x 2 k = ∑ i = 0 n ( − 1 ) i ( 2 i ) ! x 2 i \begin{aligned} e^x&=1+x+\frac{1}{2}x^2+\frac{1}{6}x^3+\dots+\frac{1}{n!}x^n=\sum_{i=0}^n\frac{1}{i!}x^i\\ \sin x&=x-\frac{1}{6}x^3+\frac{1}{120}x^5+\dots+\frac{(-1)^{2k-1}}{(2k-1)!}x^{2k-1}=\sum_{i=1}^n\frac{(-1)^{i-1}}{(2i-1)!}x^{2i-1}\\ \cos x&=1-\frac{1}{2}x^2+\frac{1}{24}x^4+\cdots+\frac{(-1)^k}{(2k)!}x^{2k}=\sum_{i=0}^n\frac{(-1)^i}{(2i)!}x^{2i} \end{aligned} exsinxcosx=1+x+21x2+61x3++n!1xn=i=0ni!1xi=x61x3+1201x5++(2k1)!(1)2k1x2k1=i=1n(2i1)!(1)i1x2i1=121x2+241x4++(2k)!(1)kx2k=i=0n(2i)!(1)ix2i
x = θ i x=\theta i x=θi,则可得 e θ i = cos ⁡ θ + sin ⁡ θ ⋅ i e^{\theta i}=\cos \theta+\sin \theta \cdot i eθi=cosθ+sinθi

则单位圆存在如下表示:

images (1)

傅立叶级数

对于傅立叶级数表示如果存在周期为 T T T的函数,那它一定可以由一组正弦和余弦函数表示,即:
f ( x ) = a 0 + ∑ n = 1 ∞ ( a n sin ⁡ 2 π n T x + b n cos ⁡ 2 π n T x ) f(x)=a_0+\sum_{n=1}^\infty(a_n\sin\frac{2\pi n}{T}x+b_n\cos\frac{2\pi n}{T}x) f(x)=a0+n=1(ansinT2πnx+bncosT2πnx)
同时因为欧拉公式 e θ i = cos ⁡ θ + sin ⁡ θ ⋅ i e^{\theta i}=\cos \theta+\sin \theta \cdot i eθi=cosθ+sinθi,所以
{ e θ i = cos ⁡ θ + sin ⁡ θ ⋅ i e − θ i = cos ⁡ θ − sin ⁡ θ ⋅ i ⇒ { cos ⁡ θ = e θ i + e − θ i 2 sin ⁡ θ = e θ i − e − θ i 2 i \begin{cases} e^{\theta i}=\cos \theta+\sin \theta \cdot i\\ e^{-\theta i}=\cos \theta-\sin \theta \cdot i \end{cases} \Rightarrow \begin{cases} \cos\theta=\frac{e^{\theta i}+e^{-\theta i}}{2}\\ \sin\theta=\frac{e^{\theta i}-e^{-\theta i}}{2i} \end{cases} {eθi=cosθ+sinθieθi=cosθsinθi{cosθ=2eθi+eθisinθ=2ieθieθi
带入傅立叶级数可得:
f ( x ) = a 0 + ∑ n = 1 ∞ ( a n e 2 π n T x ⋅ i + e − 2 π n T x ⋅ i 2 + b n e 2 π n T x ⋅ i − e − 2 π n T x ⋅ i 2 i ) = a 0 + ∑ n = 1 ∞ ( a n e 2 π n T x ⋅ i + e − 2 π n T x ⋅ i 2 − b n e 2 π n T x ⋅ i − e − 2 π n T x ⋅ i 2 ⋅ i ) = a 0 + ∑ n = 0 ∞ ( a n − b n ⋅ i 2 e 2 π n T x ⋅ i + a n + b n ⋅ i 2 e − 2 π n T x ⋅ i ) \begin{aligned} f(x)&=a_0+\sum_{n=1}^\infty(a_n\frac{e^{\frac{2\pi n}{T}x\cdot i}+e^{-\frac{2\pi n}{T}x\cdot i}}{2}+b_n\frac{e^{\frac{2\pi n}{T}x\cdot i}-e^{-\frac{2\pi n}{T}x\cdot i}}{2i})\\ &=a_0+\sum_{n=1}^\infty(a_n\frac{e^{\frac{2\pi n}{T}x\cdot i}+e^{-\frac{2\pi n}{T}x\cdot i}}{2}- b_n\frac{e^{\frac{2\pi n}{T}x\cdot i}-e^{-\frac{2\pi n}{T}x\cdot i}}{2}\cdot i)\\ &=a_0+\sum_{n=0}^\infty(\frac{a_n-b_n\cdot i}{2}e^{\frac{2\pi n}{T}x\cdot i}+\frac{a_n+b_n\cdot i}{2}e^{-\frac{2\pi n}{T}x\cdot i})\\ \end{aligned} f(x)=a0+n=1(an2eT2πnxi+eT2πnxi+bn2ieT2πnxieT2πnxi)=a0+n=1(an2eT2πnxi+eT2πnxibn2eT2πnxieT2πnxii)=a0+n=0(2anbnieT2πnxi+2an+bnieT2πnxi)
c 0 = a 0 , c n = a n − b n ⋅ i 2 , c − n = a n + b n ⋅ i 2 c_0=a_0,c_n=\frac{a_n-b_n\cdot i}{2},c_{-n}=\frac{a_n+b_n\cdot i}{2} c0=a0,cn=2anbni,cn=2an+bni,则
f ( x ) = ∑ n = − ∞ c n e 2 π n T x ⋅ i f(x)=\sum_{n=-\infty}c_ne^{\frac{2\pi n}{T}x\cdot i} f(x)=n=cneT2πnxi
其中 c n c_n cn为傅立叶级数的系数,它代表原始函数 f ( x ) f(x) f(x)在特定频率 n n n处的强度

对于 f ( x ) f(x) f(x),此时等号左右两侧同时乘上 e − 2 π n T x ⋅ i e^{-\frac{2\pi n}{T}x\cdot i} eT2πnxi,则
e − 2 π n T x ⋅ i × f ( x ) = e − 2 π n T x ⋅ i × ∑ n = − ∞ c n e 2 π n T x ⋅ i e^{-\frac{2\pi n}{T}x\cdot i}\times f(x)=e^{-\frac{2\pi n}{T}x\cdot i}\times\sum_{n=-\infty}c_ne^{\frac{2\pi n}{T}x\cdot i} eT2πnxi×f(x)=eT2πnxi×n=cneT2πnxi
在一个周期 T T T内进行积分:
∫ 0 T f ( x ) e − 2 π n T x ⋅ i d x = ∫ 0 T e − 2 π n T x ⋅ i × ∑ n = − ∞ c n e 2 π n T x ⋅ i d x = ∫ 0 T ∑ n = − ∞ c n e 2 π n ′ T x ⋅ i d x \begin{aligned} \int_0^T f(x)e^{-\frac{2\pi n}{T}x\cdot i}dx&=\int_0^Te^{-\frac{2\pi n}{T}x\cdot i}\times\sum_{n=-\infty}c_ne^{\frac{2\pi n}{T}x\cdot i}dx\\ &=\int_0^T\sum_{n=-\infty}c_ne^{\frac{2\pi n'}{T}x\cdot i}dx \end{aligned} 0Tf(x)eT2πnxidx=0TeT2πnxi×n=cneT2πnxidx=0Tn=cneT2πnxidx
对于 e 2 π n ′ T x ⋅ i e^{\frac{2\pi n'}{T}x\cdot i} eT2πnxi在一个周期内积分,即考虑 e 2 π ( n − m ) T x ⋅ i e^{\frac{2\pi (n-m)}{T}x\cdot i} eT2π(nm)xi在一个周期上积分

n = m n=m n=m时, e 2 π ( n − m ) T x ⋅ i = e 0 = 1 e^{\frac{2\pi (n-m)}{T}x\cdot i}=e^0=1 eT2π(nm)xi=e0=1,此时
∫ 0 T e 2 π n ′ T x ⋅ i d x = T \int_0^Te^{\frac{2\pi n'}{T}x\cdot i}dx=T 0TeT2πnxidx=T
n ≠ m n\not=m n=m时, e 2 π n ′ T x ⋅ i = cos ⁡ 2 π n ′ T x + sin ⁡   2 π n ′ T x ⋅ i e^{\frac{2\pi n'}{T}x\cdot i}=\cos \frac{2\pi n'}{T}x+\sin\ \frac{2\pi n'}{T}x\cdot i eT2πnxi=cosT2πnx+sin T2πnxi,此时
∫ 0 T e 2 π n ′ T x ⋅ i d x = ∫ 0 T ( cos ⁡ 2 π n ′ T x + sin ⁡   2 π n ′ T x ⋅ i ) d x = ∫ 0 T cos ⁡ 2 π n ′ T x d x + i ∫ 0 T sin ⁡   2 π n ′ T x d x = 0 \begin{aligned} \int _0^Te^{\frac{2\pi n'}{T}x\cdot i}dx &=\int_0^T(\cos \frac{2\pi n'}{T}x+\sin\ \frac{2\pi n'}{T}x\cdot i)dx\\ &=\int_0^T\cos \frac{2\pi n'}{T}xdx+i\int_0^T\sin\ \frac{2\pi n'}{T}xdx\\ &=0 \end{aligned} 0TeT2πnxidx=0T(cosT2πnx+sin T2πnxi)dx=0TcosT2πnxdx+i0Tsin T2πnxdx=0
所以:
∫ 0 T f ( x ) e − 2 π n T x ⋅ i d x = ∫ 0 T e − 2 π n T x ⋅ i × ∑ n = − ∞ c n e 2 π n T x ⋅ i d x = ∫ 0 T ∑ n = − ∞ c n e 2 π n ′ T x ⋅ i d x = c n T , n = n ′ \begin{aligned} \int_0^T f(x)e^{-\frac{2\pi n}{T}x\cdot i}dx&=\int_0^Te^{-\frac{2\pi n}{T}x\cdot i}\times\sum_{n=-\infty}c_ne^{\frac{2\pi n}{T}x\cdot i}dx\\ &=\int_0^T\sum_{n=-\infty}c_ne^{\frac{2\pi n'}{T}x\cdot i}dx\\ &=c_nT \quad,n=n' \end{aligned} 0Tf(x)eT2πnxidx=0TeT2πnxi×n=cneT2πnxidx=0Tn=cneT2πnxidx=cnT,n=n
可得
c n = 1 T ∫ 0 T f ( x ) e − 2 π n T x ⋅ i d x c_n=\frac{1}{T}\int_0^T f(x)e^{-\frac{2\pi n}{T}x\cdot i}dx cn=T10Tf(x)eT2πnxidx
对于三角函数 A sin ⁡ ( ω x + φ ) A\sin(\omega x+\varphi) Asin(ωx+φ)中周期为 T = 2 π ω T=\frac{2\pi}{\omega} T=ω2π,相位为 φ \varphi φ,振幅为 A A A,频率为 Δ f = 1 T \Delta f=\frac{1}{T} Δf=T1

在复平面中
c n × e 2 π n T x ⋅ i = c n × ( cos ⁡ 2 π n T x + sin ⁡ 2 π n T x ⋅ i ) c_n\times e^{\frac{2\pi n}{T}x\cdot i}=c_n\times (\cos\frac{2\pi n}{T}x+\sin\frac{2\pi n}{T}x\cdot i) cn×eT2πnxi=cn×(cosT2πnx+sinT2πnxi)
所以频率为 Δ f = T 2 π n \Delta f= \frac{T}{2\pi n} Δf=2πnT,振幅为 c n c_n cn

傅立叶变换

连续型

当周期 T T T趋向于无穷大时,函数不再是周期的,而是在整个实数轴上定义。此时频率 Δ f = 1 T → 0 \Delta f= \frac{1}{T}\rightarrow0 Δf=T10,这意味着频率变得连续,而不再是离散的。当 T → ∞ T\rightarrow\infty T时, ω = 2 π n T \omega=\frac{2\pi n}{T} ω=T2πn,则可以将 n Δ f n\Delta f nΔf替换为一个连续的频率。于是,我们从傅立叶级数系数 c n c_n cn 得到傅立叶变换:
{ c n = 1 T ∫ 0 T f ( x ) e − 2 π n T x ⋅ i d x T = ∞ ⇒ F ( ω ) = 1 2 π ∫ − ∞ + ∞ f ( x ) e − ω x ⋅ i d x , ω = 2 π n T \begin{cases} c_n=\frac{1}{T}\int_0^T f(x)e^{-\frac{2\pi n}{T}x\cdot i}dx\\ T=\infty \end{cases} \Rightarrow F(\omega)=\frac{1}{2\pi}\int_{-\infty}^{+\infty}f(x)e^{-\omega x\cdot i}dx\quad,\omega=\frac{2\pi n}{T} {cn=T10Tf(x)eT2πnxidxT=F(ω)=2π1+f(x)eωxidx,ω=T2πn

离散型

已知连续型的傅立叶变换为 F ( ω ) = 1 2 π ∫ − ∞ + ∞ f ( x ) e − ω x ⋅ i d x F(\omega)=\frac{1}{2\pi}\int_{-\infty}^{+\infty}f(x)e^{-\omega x\cdot i}dx F(ω)=2π1+f(x)eωxidx

当我们考虑离散的信号时,而不是连续的信号,我们需要使用离散傅立叶变换(Discrete Fourier Transform, DFT)。给定一个离散信号序列 x [ n ] x[n] x[n],其DFT为 X [ k ] X[k] X[k],定义如下:

X [ k ] = ∑ n = 0 N − 1 x [ n ] ⋅ e − j 2 π k n N X[k] = \sum_{n=0}^{N-1} x[n] \cdot e^{-j \frac{2\pi kn}{N}} X[k]=n=0N1x[n]ejN2πkn
其中:

  • x [ n ] x[n] x[n] 是在时域中的离散信号。
  • X [ k ] X[k] X[k] 是在频域中的离散频率响应。
  • N N N 是信号的总长度或总样本数。
  • k k k 是离散频率的索引,范围从 0 0 0 N − 1 N-1 N1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1137441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

freeRTOS内部机制——创建任务的内部细节

创建任务的两个核心:栈和任务结构体 函数运行过程中的局部变量保存在哪里?他自己的栈中 任务被切换过后,在切换的瞬间,哪些寄存器的值保存在哪里?保存在任务结构体中 在任务创建函数中,会malloc动态分配…

【Javascript】函数隐藏参数ar

function test(a,b,c){console.log(abc);}test(1,2,3);这里的形参有三个分别是a,b,c分别对应实参1,2,3 假如在调用函数的时候多传入几个实参会怎么样? function test(a,b,c){console.log(arguments);console.log(a…

吃瓜教程3|决策树

ID3算法 假定当前样本集合D中第k类样本所占比例为pk,则样本集合D的信息熵定义为 信息增益 C4.5算法 ID3算法存在一个问题,就是偏向于取值数目较多的属性,因此C4.5算法使用了“增益率”(gain ratio)来选择划分属性 CA…

第四章 文件管理 六、文件的基本操作

目录 一、创建文件(create系统调用) 1、进行Create系统调用时,需要提供的几个主要参数: 2、操作系统在处理Create系统调用时,主要做了两件事: 二、删除文件(delete系统调用) 1、进行Delete系统调用时,需要提供的几个主要参数: 2、操作系…

【20年VIO梳理】

19-20年VIO 梳理 1. 开源代码介绍: DSM2. FMD Stereo SLAM:融合MVG和直接方法,实现准确,快速的双目SLAM3. 基于VINS-Mono开发的SPVIS4. 改进:一种基于光流的动态环境移动机器人定位方案5. PVIO:基于先验平面约束的高效…

第四章 文件管理 五、文件存储空间管理

目录 一、逻辑结构和物理结构的比较 二、空闲表法 1、磁盘中的空闲块表 2、例子 3、如何回收空闲区间 ①回收区的前后都没有相邻空闲区; ②回收区的前后都是空闲区; ③回收区前面是空闲区; ④回收区后面是空闲区; 三、空闲链表法 1、分类 2、空闲盘块链 &#xff…

【顺序栈的表示和实现,顺序栈的初始化,是否为空,清空顺序栈,销毁顺序栈,】

文章目录 一、栈和队列的定义和特点1.1顺序栈的表示和实现1.2顺序栈的基本操作1.2.1顺序栈的初始化1.2.2判断顺序栈是否为空1.2.3清空顺序栈1.2.4销毁顺序栈1.2.5顺序栈的入栈 一、栈和队列的定义和特点 栈和队列是限定插入和删除只能在表的“端点”进行的线性表。 栈是先进后…

【Linux】安装与配置虚拟机及虚拟机服务器坏境配置与连接---超详细教学

一,操作系统介绍 1.1.什么是操作系统 操作系统(Operating System,简称OS)是一种系统软件,它是计算机硬件和应用软件之间的桥梁。它管理计算机的硬件和软件资源,为应用程序提供接口和服务,并协…

VS搭建32位和64位汇编开发环境

VS搭建32位和64位汇编开发环境 1 VS2017软件安装2 创建汇编工程3 配置X86汇编环境(32位)4 配置X64汇编环境(64位)5 调试技巧 本文属于《 X86架构指令基础系列教程》之一,欢迎查看其它文章。 1 VS2017软件安装 安装过…

根据键名解析特定属性的值相关API

mycdev.c #include <linux/init.h> #include <linux/module.h> #include <linux/of.h>struct device_node *node; //解析得到的设备树节点对象指针 struct property *pr; //属性结构体指针 int len; u32 a; u32 b[2]; const char *str; u8 c[6]; static i…

MFI芯片I2C地址转换(写读转7位传入API接口)

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)&#xff1f;可加我微信hezkz17, 本群提供音频技术答疑服务 MFI芯片I2C地址转换(写读转7位传入API接口&#xff09; #define MFI_I2C_CHIP_ADDR 0x10// 芯片写/读 0x20/0x21(写/读) 七位地址 0x10 //zk 使用读地址…

jdbc 对事务的支持

MySQL中默认开启事务自动提交功能&#xff0c;即 每个SQL语句都会自动开启一个事务并提交&#xff0c;如果没有显式地使用COMMIT或者ROLLBACK语句&#xff0c;则所有的修改都将被保存到数据库中。这种情况下&#xff0c;如果某个操作出现错误&#xff0c;就无法回滚事务&#x…

使用Python实现文字的声音播放

winsound 是 Python 的一个内置模块&#xff0c;它提供了访问 Windows 操作系统的声音播放功能的接口。这个模块可以用来播放简单的声音&#xff0c;例如提示音或者短促的音效。 # Author : 小红牛 # 微信公众号&#xff1a;WdPython import win32com.client import winsound#…

【已解决】axios post请求body为字符串

文章目录 现在需要的参数格式正常post请求参数 解决方法代码示例axiosfetch![在这里插入图片描述](https://img-blog.csdnimg.cn/9372f6efae13432896368aa3e25194cf.png) 现在需要的参数格式 正常post请求参数 解决方法 修改 Content-Type 为 text/plain 参数直接给一个字符串…

RT-Thread 8. RT-Thread Studio arm-gcc使用10.2.1编译

1. gcc编译器下载 E:\RT-ThreadStudio\repo\Extract\ToolChain_Support_Packages\ARM\GNU_Tools_for_ARM_Embedded_Processors2. 把5.4.1 改为5.4.11 再“全部构建”&#xff0c;提示错误 3. 把工具链版本改为10.2.1&#xff0c;再“全部构建”

如何正确设置Kubernetes的request和limit

有效设置Kubernetes的request和limit对应用程序性能、稳定性和成本有重大影响。然而&#xff0c;在过去的一年里&#xff0c;与许多团队的合作向我们表明&#xff0c;很难确定这些参数的正确值。出于这个原因&#xff0c;我们创建了这个简短指南&#xff0c;以帮助团队更准确地…

leetcode动态规划学习

0-1背包问题 参考&#xff1a; 【动态规划/背包问题】那就从 0-1 背包问题开始讲起吧 ... 内容是学习 宫水三叶的刷题日记 公众号专题内容时的笔记&#xff0c;为了方便个人复习整理到这里。建议大家关注该公众号&#xff0c;写的很清楚&#xff0c;有更多内容。 经典0-1背…

Linux进程等待

Linux进程等待 一.什么是进程等待二.为什么要有进程等待三.怎么进行进程调用1.僵尸进程问题2.waitpid3.获取进程退出状态 一.什么是进程等待 通过系统调用wait和waitpid&#xff0c;来进行对子进程进行状态检测与回收功能。 二.为什么要有进程等待 1。之前讲过&#xff0c;子…

【第25例】IPD体系进阶:需求分析团队RAT

目录 简介 RAT CSDN学院相关内容推荐 作者简介 简介 RAT是英文Requirement Analysis Team英文首字母的简称,也即需求分析团队,每个产品线都需要设定对应的一个RAT的组织。 RAT主要负责产品领域内需求的分析活动,是RMT的支撑团队: 这个时候可以将RAT细化为PL-RAT团队,…

C语言--strcmp函数(介绍与自己实现)

strcmp函数&#xff1a;字符串比较函数。 用法&#xff1a;strcmp(str1,str2)。str1&#xff0c;str2可以是字符串常量或者字符串变量&#xff0c;返回值为整形。 str1小于str2,返回负值&#xff0c;str1等于str2,返回为0&#xff0c;str1大于str2,返回正值 那么两个字符串是…