信号分析——从傅里叶变化到FFT
我们眼中的世界就像皮影戏的大幕布,幕布的后面有无数的齿轮,大齿轮带动小齿轮,小齿轮再带动更小的。
在最外面的小齿轮上有一个小人——那就是我们自己。
我们只看到这个小人毫无规律的在幕布前表演,却无法预测他下一步会去哪。
而幕布后面的齿轮却永远一直那样不停的旋转,永不停歇。
——这就是对傅里叶世界观的描述。
你眼中看似落叶纷飞变化无常的世界,实际只是躺在上帝怀中一份早已谱好的乐章。
下面进入正式环节↓↓↓↓↓↓
这就是鼎鼎大名的傅里叶公式!
简单的理解:
每一个信号,在某个特定的配方下,都可以由简单的正弦曲线组成。傅里叶男爵猜测任意周期函数都可以写成三角函数之和。具体需要多少呢?无数个!【嘿, 上帝才不会让你这么简单的就发现他】
(插入题外话:为什么是男爵呢?傅里叶大佬曾经跟着拿破仑混过)
傅里叶原理表明:任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加。
而根据该原理创立的傅立叶变换算法利用直接测量到的原始信号,以累加方式来计算该信号中不同正弦波信号的频率、振幅和相位。
为什么信号分析采用傅里叶变换?
时域信号在经过傅立叶变换的分解之后,变为了不同正弦波信号的叠加,我们再去分析这些正弦波的频率,可以将一个信号变换到频域。
有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。【时域频域下面就讲到了啦

动图在这里!:https://en.wikipedia.org/wiki/File:Fourier_series_square_wave_circles_animation.gif
所以时域、频域到底是啥?
时域
信号时域分析就是分析信号随时间的变化,比如24 小时体温监测图即体温随时间变化。
时域分析反映在图象上最明显的特征就是横轴以时间为变量,纵轴因描述的变量不同而不同。
记住横轴是时间就好啦!
频域
频率就是指单位时间内发生的次数,一般用 F 来表示。
日常生活中我们经常接触到一些频率的描述,比如听收音机时,要调频选台,其中调频,就是要调至某一频率;我们家用的电器上也经常标着 220V ,50Hz,而50Hz就是指频率为50赫兹。
频域分析反映在图象上自变量是频率,即横轴是频率,纵轴是该频率信号的幅度。
实际上频域和时域只是人们对信号分析的不同方法。 好啦, 脑子里记住两个坐标吧。

总的来说这就是他们的面貌啦, 下面继续深入。
时域转化为频域
首先的问题是为什么要转?
如图, 将时域信号经过一种非常有用的数学变换一傅里叶变换(1),就可转化到频域,得到信号的频谱 ,这就是频谱分析;
反过来 ,我们也可将频域信号通过逆傅里叶变换(2)转换成时域信号。
由时域变换到频域,我们也可以分析信号中包含的各种频率分量的幅值、功率、能量和相位关系,也就是分析信号的频谱特性。
既然通过信号的频域分析,可以知道信号含各个频率的成分多少,我们就可以设计滤波器的频率来抑制某些信号而放大另一些我们感兴趣的信号。
例如:噪音属于高频区域,将时域转换成频域, 在频域中去掉噪音所属的高频区, 再转换回来, 就可以去掉噪音了。

下面这张图立马看懂啦!!!


动图在这里!:https://en.wikipedia.org/wiki/File:Fourier_series_and_transform.gif
好啦, 下面可以讲FFT啦。
FFT是何方神圣?
FFT是离散傅立叶变换(DFT)的快速算法,可以将一个信号变换到频域。
首先介绍DFT(离散傅里叶变化):
【一大波公式即将来袭~~~不要怕, 挺好理解的, 看不懂也不怎么影响理解。】
对于点序列
,它的离散傅里叶变换(DFT)为
其中是自然对数的底数,
是虚数单位。
理解成矩阵变化吧。
这个式子很显然复杂度是O(N*N)
为啥要FFT?因为fast呀!
FFT(快速傅里叶变换)
FFT推导如下:
单位根:
在复平面上,以原点为圆心, 1为半径作圆,所得的圆叫做单位圆。
以原点为起点,单位圆的 n 等分点为终点,作 n 个向量。设所得的幅角为正且最小的向量对应的复数为 ωn ,称为 n 次单位根。
ωn为单位根
对每一个ωn:

单位根的性质

证明:

- 它们表示的点(或向量)表示的复数是相同的

证明:

- 它们表示的点关于原点对称,所表示的复数实部相反,所表示的向量等大反向

都等于1
最常用的 FFT 算法 —— Cooley-Tukey 算法。
设一个多项式A(x)

对比两个式子
现在我们就可以递归分治来搞FFT了
每一次回溯时只扫当前前面一半的序列,即可得出后面一半序列的答案
私聊:hichens@qq.com
信号分析——从傅里叶变化到FFT的更多相关文章
- 机器学习进阶-直方图与傅里叶变换-傅里叶变换(高低通滤波) 1.cv2.dft(进行傅里叶变化) 2.np.fft.fftshift(将低频移动到图像的中心) 3.cv2.magnitude(计算矩阵的加和平方根) 4.np.fft.ifftshift(将低频和高频移动到原来位置) 5.cv2.idft(傅里叶逆变换)
1. cv2.dft(img, cv2.DFT_COMPLEX_OUTPUT) 进行傅里叶变化 参数说明: img表示输入的图片, cv2.DFT_COMPLEX_OUTPUT表示进行傅里叶变化的方法 ...
- HackRF实现无线门铃信号分析重放
文章特点:数据解码方面实在是没什么信心,存在分析错乱的可能性,所幸发出来共同探讨,恳请鞭策. 0x01 概述 这是一款工作在315Mhz频段的无线遥控门铃,根据查阅官方手册以及芯片信息,确定其采用了e ...
- 基于Qt的信号分析简单应用软件的设计
一.需求描述: 1.读取data.asc文件,分析其连续性: 2.绘制信号图像,并保存. 二.UI界面组成: 该应用的UI由以下几个控件组成: 3个PushButton:打开文件.图像保存.退出: 1 ...
- VTC Fsync_out信号分析
VTC Fsync_out信号分析 1.GUI配置 Vertical position的值289是根据Frame/Field 0 Vertical settings一栏中sync start来设置的. ...
- QPushButton 点击信号分析
QPushButton 点击信号分析 QPushButton有三个很重要的信号跟点击有关 pressed clicked toggled 表面上看,pressed和clicked都会在点击按钮时触发, ...
- 傅里叶:有关FFT,DFT与蝴蝶操作(转 重要!!!!重要!!!!真的很重要!!!!)
转载地址:http://blog.renren.com/share/408963653/15068964503(作者 : 徐可扬) 有没有!!! 其实我感觉这个学期算法最难最搞不懂的绝对不是动态规划 ...
- scipy 短时傅里叶变化
原文链接 https://www.cnblogs.com/hoojjack/p/9967298.html 计算短时傅里叶变换(STFT) scipy.signal.stft(x,fs = 1.0, ...
- 2.3 linux中的信号分析 阻塞、未达
信号的阻塞.未达: linux中进程1向进程2发送信号,要经过内核,内核会维护一个进程对某个信号的状态,如下图所示: 当进程1向进程2发送信号时,信号的传递过程在内核中是有状态的,内核首先要检查这个信 ...
- 2.2 linux中的信号分析
信号: 信号是UNIX系统响应某些状况而产生的事件,进程在接收到信号时会采取相应的行动. 信号是因为某些错误条件而产生的,比如内存段冲突.浮点处理器错误或者非法指令等. 信号是在软件层次上对中断的一种 ...
随机推荐
- [百度之星]资格赛:IP聚合
保持着也不知道什么情怀,觉得到现在才能发出来.这道题做完之后看了其他人的代码,然后再看我的,不得不说,真是幼稚的很,尤其是输入这一块,都什么跟什么啊. 但相较于之前来说,不像以前慌张了,学会先思考再去 ...
- mapper.xml实现oracle的分页语句
当我们用常规方法进行分页查询时,虽然在数据库可以分页查询出来数据, 如下语句 <!-- 分页查询所有 --> <select id="findAllPage" r ...
- 换根dp
感觉这类问题很少?算了,还是拿出来水一下吧qwq... 首先来看一道例题:POJ3585 一句话题意:树上任意源点多汇点最大流 你看这不就是个最大流的板子题吗?我先建个图,然后跑最大流,然后,,,然后 ...
- ACM-可乐兑换
题目描述:可乐兑换 小明的班级参加一个活动,每人要喝过一瓶可乐,恰逢可乐促销,3瓶可乐空瓶可以换一瓶可乐,小明想节约钱,所以想买尽可能少的可乐让每人至少喝过一瓶可乐,问买至少多少瓶可乐够n人至少每人喝 ...
- hdu 1671 Phone List 统计前缀次数
Phone List Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- UVA - 1213 Sum of Different Primes (不同素数之和)(dp)
题意:选择k个质数,使它们的和等于n,问有多少种方案. 分析:dp[i][j],选择j个质数,使它们的和等于i的方法数. #pragma comment(linker, "/STACK:10 ...
- 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图
读书笔记 - js高级程序设计 - 第十三章 事件 canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好 有时候即使浏览器支持,操作系统如果缺缺 ...
- 【LeetCode】两个数相加
[问题]给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. [实例] 输入: ...
- Android自定义View——简单实现边缘凹凸电子票效果
View继承LinearLayout,在View的上下边缘画出白色的圆形即可,这里只要计算出圆的个数和圆的循环规律即可,下面请看分析 我们取卡片的前2个凹凸来看,将其分为四部分,并且两部分为循 ...
- HashMap源码阅读笔记
HashMap源码阅读笔记 本文在此博客的内容上进行了部分修改,旨在加深笔者对HashMap的理解,暂不讨论红黑树相关逻辑 概述 HashMap作为经常使用到的类,大多时候都是只知道大概原理,比如 ...