我们眼中的世界就像皮影戏的大幕布,幕布的后面有无数的齿轮,大齿轮带动小齿轮,小齿轮再带动更小的。

在最外面的小齿轮上有一个小人——那就是我们自己。

我们只看到这个小人毫无规律的在幕布前表演,却无法预测他下一步会去哪。

而幕布后面的齿轮却永远一直那样不停的旋转,永不停歇。

——这就是对傅里叶世界观的描述。

你眼中看似落叶纷飞变化无常的世界,实际只是躺在上帝怀中一份早已谱好的乐章。

下面进入正式环节↓↓↓↓↓↓


傅里叶公式:
其中:

这就是鼎鼎大名的傅里叶公式!

简单的理解:

每一个信号,在某个特定的配方下,都可以由简单的正弦曲线组成。傅里叶男爵猜测任意周期函数都可以写成三角函数之和。具体需要多少呢?无数个!【嘿, 上帝才不会让你这么简单的就发现他】

(插入题外话:为什么是男爵呢?傅里叶大佬曾经跟着拿破仑混过)

傅里叶原理表明:任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加。

而根据该原理创立的傅立叶变换算法利用直接测量到的原始信号,以累加方式来计算该信号中不同正弦波信号的频率、振幅和相位。

 深入理解看这里:https://www.matongxue.com/madocs/619.html
 

为什么信号分析采用傅里叶变换?

时域信号在经过傅立叶变换的分解之后,变为了不同正弦波信号的叠加,我们再去分析这些正弦波的频率,可以将一个信号变换到频域。

有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。【时域频域下面就讲到了啦


如果通过表示
根据欧拉公式【欧拉公式的意义就是旋转啦】,有:
         
一个可以观察到旋转的频率,所以称为频域(Frequency domain);一个可以看到流逝的时间,所以称为时域(time domain)

动图在这里!: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. 机器学习进阶-直方图与傅里叶变换-傅里叶变换(高低通滤波) 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表示进行傅里叶变化的方法 ...

  2. HackRF实现无线门铃信号分析重放

    文章特点:数据解码方面实在是没什么信心,存在分析错乱的可能性,所幸发出来共同探讨,恳请鞭策. 0x01 概述 这是一款工作在315Mhz频段的无线遥控门铃,根据查阅官方手册以及芯片信息,确定其采用了e ...

  3. 基于Qt的信号分析简单应用软件的设计

    一.需求描述: 1.读取data.asc文件,分析其连续性: 2.绘制信号图像,并保存. 二.UI界面组成: 该应用的UI由以下几个控件组成: 3个PushButton:打开文件.图像保存.退出: 1 ...

  4. VTC Fsync_out信号分析

    VTC Fsync_out信号分析 1.GUI配置 Vertical position的值289是根据Frame/Field 0 Vertical settings一栏中sync start来设置的. ...

  5. QPushButton 点击信号分析

    QPushButton 点击信号分析 QPushButton有三个很重要的信号跟点击有关 pressed clicked toggled 表面上看,pressed和clicked都会在点击按钮时触发, ...

  6. 傅里叶:有关FFT,DFT与蝴蝶操作(转 重要!!!!重要!!!!真的很重要!!!!)

    转载地址:http://blog.renren.com/share/408963653/15068964503(作者 :  徐可扬) 有没有!!! 其实我感觉这个学期算法最难最搞不懂的绝对不是动态规划 ...

  7. scipy 短时傅里叶变化

    原文链接   https://www.cnblogs.com/hoojjack/p/9967298.html 计算短时傅里叶变换(STFT) scipy.signal.stft(x,fs = 1.0, ...

  8. 2.3 linux中的信号分析 阻塞、未达

    信号的阻塞.未达: linux中进程1向进程2发送信号,要经过内核,内核会维护一个进程对某个信号的状态,如下图所示: 当进程1向进程2发送信号时,信号的传递过程在内核中是有状态的,内核首先要检查这个信 ...

  9. 2.2 linux中的信号分析

    信号: 信号是UNIX系统响应某些状况而产生的事件,进程在接收到信号时会采取相应的行动. 信号是因为某些错误条件而产生的,比如内存段冲突.浮点处理器错误或者非法指令等. 信号是在软件层次上对中断的一种 ...

随机推荐

  1. 指令——history

    作用:查看历史命令 一般用于查看已经输入执行过的命令,也可以作为自己练习时的指标衡量,因为在历史命令里有行号显示.

  2. 三十九、SAP中多语言的处理

    一.点击菜单翻译 二.选择目标语言 三.输入需要翻译的内容,并保存 四.我们切换到英语模式登录 五.查看我们的代码 六.输出结果如下,多语言特征就显示了

  3. 092-PHP定义索引数组

    <?php $arr=array('name'=>'PHP','age'=>22,7=>25,33,21=>35,56); //定义一个索引数组 echo '数组$arr ...

  4. RabbitMQ整合Spring Booot【消费者补偿幂等问题】

    如果消费者 运行时候 报错了 package com.toov5.msg.SMS; import org.springframework.amqp.rabbit.annotation.RabbitHa ...

  5. Swift Json解析基础

    func JSONToData(obj:Any) -> Data { //先判断是否可以转换 if !JSONSerialization.isValidJSONObject(obj) { ret ...

  6. Java中的日期表示类

    一.概述 Java中的日期类设计的比较失败,刚开始使用Date来计算时间,后来大部分Date类的方法都过时了:想用Calendar类代替Date类,然而Calendar类也是不尽如人意.下面简单介绍下 ...

  7. EUI库 - 9 - 数据集合 - 列表

      List 和DataGroup的区别 1 选中一项 会触发 eui.ItemEvent.ITEM_TAP 事件, 2 有选中项的概念,可以设置 List 里的默认选中项    selectedIn ...

  8. 【pwnable.kr】 mistake

    又一道pwnable,我还没放弃.. ssh mistake@pwnable.kr -p2222 (pw:guest) 源代码如下: #include <stdio.h> #include ...

  9. 大二暑假第五周总结--开始学习Hadoop基础(四)

    简单学习MapReduce并进行WordCount实践 分布式并行编程: MapReduce设计的一个理念就是“计算向数据靠拢”,将复杂的,运行于大规模集群上的并行计算过程高度地抽象到两个函数:Map ...

  10. 基于 burpsuite的web逻辑漏洞插件开发(来自JSRC安全小课堂,柏山师傅)

    基于 burpsuite的web逻辑漏洞插件开发 BurpSuite 提供了插件开发接口,支持Java.Python.Ruby语言的扩展.虽然 BApp Store 上面已经提供了很多插件,其中也不乏 ...