数据分析中用到傅里叶变换,只好把大学里学的云山雾绕的课本拿出来重修了一遍。傅里叶级数还好理解,傅里叶变换就有点摸不着头脑了。特别是里面的虚数部分,到底是什么意思?它到底是怎么跑出来的。为什么一个好好的实函数就变成虚函数了?还能不能一起玩耍了?
钻进了牛角尖,不搞清这个问题吃饭都不香了。网上傅里叶级数的资料很多,又是群理论,又是希尔伯特空间的,搞得俺这个工科生更是头大。忽然灵机一动,找到了原因所在(自认为),写出来与诸君共享,理解不对的地方大神指正。

一、傅里叶级数

这是比较好理解的,就是一个周期函数,可以分解成很多个简谐函数的叠加,其中有余弦分量和正弦分量,代表着简谐函数的相位。
这是傅里叶变换的公式:
f(x)=a0+∑k=1∞[akcos⁡(kx)+bksin⁡(kx)]f(x) = a_{0} + \sum_{k=1}^\infty \Bigl[ a_{k} \cos(kx) + b_{k}\sin(kx)\Bigr] f(x)=a0​+k=1∑∞​[ak​cos(kx)+bk​sin(kx)]

然后用欧拉公式:
eit=cos⁡(t)+isin⁡(t)e^{it} = \cos(t) +i\sin(t) eit=cos(t)+isin(t)
e−it=cos⁡(t)−isin⁡(t)e^{-it} = \cos(t) -i\sin(t) e−it=cos(t)−isin(t)
则:
cos⁡(t)=eit+e−it2\cos(t) = \frac{e^{it}+e^{-it}}{2} cos(t)=2eit+e−it​
sin⁡(t)=eit−e−it2i\sin(t) = \frac{e^{it}-e^{-it}}{2i} sin(t)=2ieit−e−it​
代入得:
f(x)=a0+∑k=1∞[akeikx+e−ikx2+bkeikx−e−ikx2i]f(x) = a_{0} + \sum_{k=1}^\infty \Bigl[ a_{k} \frac{e^{ikx}+e^{-ikx}}{2} + b_{k} \frac{e^{ikx}-e^{-ikx}}{2i}\Bigr] f(x)=a0​+k=1∑∞​[ak​2eikx+e−ikx​+bk​2ieikx−e−ikx​]
化简,注意1i=−i\frac{1}{i} = -ii1​=−i ,得:
f(x)=a0+∑k=1∞[ak−ibk2eikx+ak+ibk2e−ikx]f(x) = a_{0} + \sum_{k=1}^\infty \Bigl[ \frac{a_{k}-ib_{k}}{2} e^{ikx} +\frac{a_{k}+ib_{k}}{2}e^{-ikx}\Bigr] f(x)=a0​+k=1∑∞​[2ak​−ibk​​eikx+2ak​+ibk​​e−ikx]
关键的地方来了。1到∞\infty∞的-k是等于−∞-\infty−∞到-1的k的。注意上式中累加部分的第二部分可以改写为:
f(x)=a0+∑k=1∞ak−ibk2eikx+∑k=−∞−1ak+ibk2eikxf(x) = a0 + \sum_{k=1}^\infty \frac{a_{k}-ib_{k}}{2}e^{ikx} + \sum_{k=-\infty}^{-1} \frac{a_{k}+ib_{k}}{2}e^{ikx}f(x)=a0+k=1∑∞​2ak​−ibk​​eikx+k=−∞∑−1​2ak​+ibk​​eikx
设一个分段序列cnc{n}cn:
ck={ak+ibk2−∞<k<=−1,a0k=0,ak−ibk21<=k<∞(1)c_{k}=\left\{ \begin{aligned} &\frac{a_{k}+ib_{k}}{2}\qquad& \text{$-\infty<k<=-1,$ } \\ &a{0}\qquad &\text{$k=0,$ } \\ &\frac{a_{k}-ib_{k}}{2}\qquad&\text{$1<=k<\infty$ } \end{aligned} \right. \tag{1} ck​=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​​2ak​+ibk​​a02ak​−ibk​​​−∞<k<=−1, k=0, 1<=k<∞ ​(1)
则:
f(x)=∑k=−∞∞ckeikxf(x) = \sum_{k=-\infty}^{\infty}c_{k}e^{ikx} f(x)=k=−∞∑∞​ck​eikx
就这样一个好好的实函数被转换成了复函数。这个证明的过程并不规范,但意思是大概齐的。那么,从这个证明过程中我们能获得哪些信息呢?

  1. ckc_{k}ck​是复数,这也是为什么fft的结果是复数。
  2. ckc_{k}ck​以y轴为对称点,两侧的实部是相同的,虚部是相反的,即相互共轭。这带来的结果有两点,1)当画出ckc_{k}ck​的振幅图的时候,图像是对称的,但实际上它并不是偶函数。2)可以证明ckeikxc_{k}e^{ikx}ck​eikx和c−kei(−k)xc_{-k}e^{i(-k)x}c−k​ei(−k)x也是共轭的,所以两者相加的时候,实部乘2,虚部抵消,所以傅里叶变换和其逆变换的结果仍然是实函数。
  3. 由于ckc_{k}ck​和c−kc_{-k}c−k​是共轭的,所以只看半边的ckc_{k}ck​就可以获得所有的信息,包括频率的振幅和相位信息。

二、傅里叶变换

傅里叶变换是在傅里叶级数上的拓展。我们在讨论傅里叶级数的时候有一个前提,就是f(x)f(x)f(x)是在(−π,π)(-\pi,\pi)(−π,π)上的周期函数。把周期的边界扩展为(−∞,∞)(-\infty,\infty)(−∞,∞),同时把k由自然数扩展到整个实数坐标轴上,傅里叶级数就变成了傅里叶变换。
f(x)=12π∫−∞∞f^(λ)eiλxdλf(x) = \frac{1}{\sqrt{2\pi}}\int_{-\infty}^{\infty}\hat{f}(\lambda)e^{i\lambda x}d\lambda f(x)=2π​1​∫−∞∞​f^​(λ)eiλxdλ
傅里叶变换和傅里叶级数非常相似,很多性质也是近似的,也可以用类似的方法予以证明。比方说,在λ\lambdaλ和−λ-\lambda−λ两个点上,f^(λ)\hat{f}(\lambda)f^​(λ)和f^(−λ)\hat{f}(-\lambda)f^​(−λ)也是共轭的,也有着和傅里叶级数一样的性质。
所以f^(λ)\hat{f}(\lambda)f^​(λ)虽然是一个复函数,但如果把y轴两侧对应起来,即把(−∞,0)(-\infty,0)(−∞,0)折到(0,∞)(0,\infty)(0,∞)上,仍然可以获得一个实函数。
本身,我们知道,λ\lambdaλ对应的物理意义是频率,而负频率是没有意义的。因此对应到一个函数的频谱强度,这应该还是一个实函数,只是用复函数的形式来表达了。
这样做的意义在于eite^{it}eit这个函数有许多有用的计算性质,可以极大地简化许多推导过程。

三、总结

好了,说了这么多,其实就是回答了这样一个问题:为什么fft()的结果是复数?
我会说我写这些是为了学习LaTex语言吗?

傅里叶变换的虚数部分相关推荐

  1. C语言实现离散余弦变换(DCT)并用MATLAB和Python验证

    概念 离散余弦变换(Discrete Cosine Transform,DCT)是可分离的变换,其变换核为余弦函数.是与傅里叶变换相关的一种变换,它相当于把离散傅里叶变换的虚数部分丢掉,只使用实数.D ...

  2. 信号傅里叶变换后的实数和虚数部分理解

    傅里叶(FFT.DFT.傅立叶.Fourier)傅里叶变换的结果为什么含有复数? 为什么傅里叶变换的结果含有复数成份? 看了很多关于FFT的资料,现在看到一个资料说FFT转换的结果是实部+虚部,所以不 ...

  3. 傅里叶变换之看不懂就掐死我教程

    原文出处: 韩昊 1 2 3 4 5 6 7 8 9 10 作 者:韩 昊 知 乎:Heinrich 微 博:@花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师, ...

  4. 深入浅出的讲解傅里叶变换(完整)

    原文出处: 韩昊 我保证这篇文章和你以前看过的所有文章都不同,这是 2012 年还在果壳的时候写的,但是当时没有来得及写完就出国了--于是拖了两年,嗯,我是拖延症患者-- 这篇文章的核心思想就是: 要 ...

  5. 控制-频域操作-傅里叶级数和傅里叶变换

    傅里叶级数和傅里叶变换是什么关系? - 马同学的回答 - 知乎 1.任何一个函数都可以表达成傅里叶级数形式 2.上面的傅里叶级数表达形式 有正弦波,也有余弦波,画频域图也不方便,通过欧拉公式,可以修改 ...

  6. 基于python的快速傅里叶变换FFT(一)

    基于python的快速傅里叶变换FFT(一) FFT可以将一个信号变换到频域.有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了.这就是很多信号分析采用FFT变换的原因. ...

  7. Opencv 实现图像的离散傅里叶变换(DFT)、卷积运算(相关滤波)

    原文:http://blog.csdn.net/ikerpeng/article/details/41845545?utm_source=tuicool&utm_medium=referral ...

  8. Python实现快速傅里叶变换(FFT)

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Thu May 24 21:00:47 201 ...

  9. VTK修炼之道40:频域处理_快速傅里叶变换及其反变换1

    1.图像频域处理的意义 在图像处理和分析中,经常会将图像从图像空间转换到其他空间中,并利用这些空间的特点进行对转换后图像进行分析处理,然后再将处理后的图像转换到图像空间中,这称之为图像变换. 在一些图 ...

最新文章

  1. HDU1425简单排序题
  2. 黄仁勋入选《时代》杂志2021最具影响力100人,库克、马斯克也上榜
  3. python四十九:封装
  4. github的基础使用
  5. 面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?
  6. 2021牛客第一场 I. Increasing Subsequence-前缀和优化dp
  7. 企业级应用架构(三)三层架构之数据访问层的改进以及测试DOM的发布
  8. c语言查看cpu温度代码_很多程序员都不知道,C语言中还有“快类型”和“小类型”...
  9. python fsolve说明_python fsolve说明_Python fsolve()抱怨形状.为什么?
  10. Eclipse的下载Spring Tool Suite(sts)
  11. java digester map_Digester学习笔记
  12. Android APP完整基础教程(01)开发环境简介
  13. DNS的作用是什么?为什么一定要配置DNS才能上网
  14. CSS使用小操作(隐藏滚动,实现三角行等...)
  15. 敲击键盘后字符怎么出现在显示器
  16. 新版 playCover 键位映射教程(mac 玩 ios 原神键位映射示例)
  17. 国产银河麒麟系统源码安装Openvas
  18. C语言初学知识准备(Linux方面)
  19. spss入门——简单的数据预处理到时间序列分析系列(四)
  20. Mysql下更改数据库密码

热门文章

  1. 超赞!最全如何快速增加新浪微博粉丝数!如何迅速提高微博粉丝数量?
  2. HTTP状态码304与ETag详解
  3. 谷歌浏览器在怎么添加迅雷_如何在Google搜索结果中添加作者信息
  4. 各个时区对应的时差表 及 python中时区获取方式(支持夏令时)
  5. 界面设计的三大原则及细节分析
  6. 校招----字节跳动客户端一面
  7. A和G cup的差距究竟有多大?| 今日趣图
  8. 按键精灵调试三天,气到吐血!!快速开发脚本代码常见错误!绝对干货!
  9. WebOffice常用API接口使用说明
  10. java filewriter_Java IO: FileReader和FileWriter