傅立叶变换详解

2023-05-16

傅里叶变换

傅里叶变换(Fourier transform)是一种线性的积分变换,从时间转换为频率的变化

1. 连续傅里叶变换

这是将频率域的函数F(ω)表示为时间域的函数f(t)的积分形式

img

连续傅里叶变换的逆变换 (inverse Fourier transform)为:

img

一般可称函数f(t)为原函数,而称函数F(ω)为傅里叶变换的像函数,原函数和像函数构成一个傅里叶变换对(transform pair)。

其他形式变换对

在通信或是信号处理方面,常以来代换,而形成新的变换对:

img

或者是因系数重分配而得到新的变换对:

img

2.傅里叶级数

连续形式的傅里叶变换其实是傅里叶级数 (Fourier series)的推广,因为积分其实是一种极限形式的求和算子而已。对于周期函数,其傅里叶级数是存在的:

img

其中Fn为复幅度。对于实值函数,函数的傅里叶级数可以写成:

img

其中an和bn是实频率分量的幅度。

3.离散时域傅里叶变换

离散傅里叶变换是离散时间傅里叶变换(DTFT)的特例。DTFT在时域上离散,在频域上则是周期的。DTFT可以被看作是傅里叶级数的逆变换。

4.离散傅里叶变换

离散傅里叶变换(DFT),是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换(DTFT)频域的采样。在形式上,变换两端(时域和频域上)的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。即使对有限长的离散信号作DFT,也应当将其看作经过周期延拓成为周期信号再作变换。在实际应用中通常采用快速傅里叶变换以高效计算DFT。

为了在科学计算和数字信号处理等领域使用计算机进行傅里叶变换,必须将函数xn定义在离散点而非连续域内,且须满足有限性或周期性条件。这种情况下,使用离散傅里叶变换(DFT),将函数xn表示为下面的求和形式:

img

其中Xk是傅里叶幅度。直接使用这个公式计算的计算复杂度为O(nn),而快速傅里叶变换(FFT)可以将复杂度改进为O(nlgn)。

实数离散傅里叶变换

  • 例子
    原始信号图像:

img

这个信号的长度是16,于是可以把这个信号分解9个余弦波和9个正弦波

(一个长度为N的信号可以分解成N/2+1个正余弦信号,一个长度为N的信号,最多只能有N/2+1个不同频率,再多的频率就超过了计算机所能所处理的精度范围 )

在程序中:

img

x[]表示信号在每个时间点上的幅度值数组, 用大写X[]表示每种频率的副度值数组(即时间x-->频率X)

X[]数组分两种,一种是表示余弦波的不同频率幅度值:Re X[],

另一种是表示正弦波的不同频率幅度值:Im X[]
  • 频域中关于频率的四种表示方法
    1、序号表示方法,根据时域中信号的样本数取0 ~ N/2,用这种方法在程序中使用起来可以更直接地取得每种频率的幅度值,因为频率值跟数组的序号是一一对应的: X[k],取值范围是0 ~ N/2;
    2、分数表示方法,根据时域中信号的样本数的比例值取0 ~ 0.5: X[ƒ],ƒ = k/N,取值范围是0 ~ 1/2;
    3、用弧度值来表示,把ƒ乘以一个2π得到一个弧度值,这种表示方法叫做自然频率(natural frequency):X[ω],ω = 2πƒ = 2πk/N,取值范围是0 ~ π;
    4、以赫兹(Hz)为单位来表示,这个一般是应用于一些特殊应用,如取样率为10 kHz表示每秒有10,000个样本数:取值范围是0到取样率的一半。

  • DFT基本函数
    ck[i] = cos(2πki/N)
    sk[i] = sin(2πki/N)
    其中k表示每个正余弦波的频率,如为2表示在0到N长度中存在两个完整的周期,10即有10个周期

  • 分解运算方法(DFT)

    1)通过联立方程进行求解, 从代数的角度看,要从N个已知值求N个未知值,需要N个联立方程,且N个联立方程必须是线性独立的,计算量非常的大且极其复杂,很少被采用;

    2)利用信号的相关性(correlation)进行计算;

    img

    上面a和 b两个图是待检测信号波,图a很明显可以看出是个3个周期的正弦信号波,图b的信号波则看不出是否含有正弦或余弦信号,图c和d都是个3个周期的正弦信号波,图e和f分别是a、b两图跟c、d两图相乘后的结果,图e所有点的平均值是0.5,说明信号a含有振幅为1的正弦信号c,但图f所有点的平均值是0,则说明信号b不含有信号d。这个就是通过信号相关性来检测是否含有某个信号的方法。

    img

    3)快速傅立叶变换(FFT),大大提高了运算速度,根据复数形式的傅立叶变换来实现的,它把N个点的信号分解成长度为N的频域,

5.傅立叶变换分类

img

函数在时(频)域的离散对应于其像函数在频(时)域的周期性。反之连续则意味着在对应域的信号的非周期性。也就是说,时间上的离散性对应着频率上的周期性。同时,注意,离散时间傅里叶变换,时间离散,频率不离散,它在频域依然是连续的。

根据原信号的不同类型,我们可以把傅立叶变换分为四种类别:

1、非周期性连续信号 傅立叶变换(Fourier Transform)

2、周期性连续信号 傅立叶级数(Fourier Series)

3、非周期性离散信号 离散时域傅立叶变换(Discrete Time Fourier Transform)

4、周期性离散信号 离散傅立叶变换(Discrete Fourier Transform)

   下图是四种原信号图例(从上到下,依次是FT,FS,DTFT,DFT): 

img

问题:1.把长度有限的信号表示成长度无限的信号:

把信号用复制的方法进行延伸,这样信号就变成了周期性离散信号,这时我们就可以用离散傅立叶变换方法(DFT)

2.对于非周期性的信号,我们需要用无穷多不同频率的正弦曲线来表示:

对于离散信号的变换只有离散傅立叶变换(DFT)才能被适用,对于计算机来说只有离散的和有限长度的数据才能被处理

6.形象理解

矩形波在频域里的另一个模样了:

img

这就是矩形波在频域的样子,频域图像,也就是俗称的频谱,就是——

img

再清楚一点:

img

可以发现,在频谱中,偶数项的振幅都是0,也就对应了图中的彩色直线。振幅为 0 的正弦波。

我见解

傅里叶变换是一个线性的积分变换,从时域到频域,傅立叶变换分为连续傅立叶变换、傅立叶级数、离散时域傅立叶变换、离散傅立叶变换(DFT).原理即是将输入的长度为N信号分解为N/2+1 正余弦,通过正交的原理。

傅里叶变换,实际上就是给一个时域上的函数乘上旋转因子,然后在全时间域上积分。在全时间域上积分,所以最后结果就刨去了时间t的影响。最后的积分结果是一个只关于的函数,也就是说是一个关于角频率的函数。这样就实现了时域到频域的转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

傅立叶变换详解 的相关文章

  • JS删除数组中指定元素/删除数组中指定对象

    删除数组中指定对象指定元素 let arr 61 name 34 xiaowang 34 id 1 name 34 xiaozhang 34 id 2 createDate 34 xiaoli 34 id 3 删除id为1的对象 xff0c
  • React G2Plot 水波图

    官方文档 xff1a https antv g2plot v1 gitee io zh docs manual introduction 安装依赖 span class token function npm span span class
  • 数据链路层

    本篇目录 数据链路层的三个基本问题 使用点对点信道的数据链路层 使用广播信道的数据链路层 以太网MAC层的硬件地址 一 数据链路层的三个基本问题 封装成帧 xff1a 帧是数据链路层的传送单位 一个帧的帧长等于帧的数据部分加上帧的首部和尾部
  • 输入三个数求出最大值(5种方法)

    这是一个很简单的C语言程序 xff0c 重要的是考验思考问题的角度 xff1a 方法1 xff1a include lt stdio h gt void main int a b c scanf 34 d d d 34 amp a amp
  • 把二维数组数据读入txt文本(C语言)

    我们经常需要把计算后的数据存入txt文本 xff0c 下例提供了一种简单思路 xff1a include lt stdio h gt include lt stdlib h gt int main int a 2 3 61 5 2 8 4
  • 查询txt文本信息行数(C和C++分别实现)

    在一些程序设计中 xff0c 我们经常要先查询txt文本的行数 xff0c 据此 xff0c 才能对数组进行动态内存分配 C语言实现 include lt stdio h gt include lt stdlib h gt define A
  • 从txt中读取数据存入二维数组

    在实际应用中 xff0c 经常需要把txt中的数据读入到一个数组中 xff0c 然后再参与运算 在C语言中可以利用fscanf 函数从文件中读取数据 xff0c 示例如下 xff1a void main xff08 xff09 double
  • 仿射变换

    AffineTransform类描述了一种二维仿射变换的功能 xff0c 它是一种二维坐标到二维坐标之间的线性变换 xff0c 保持二维图形的 平直性 xff08 译注 xff1a straightness xff0c 即变换后直线还是直线
  • OpenCV下的直线拟合

    出处 xff1a http blog csdn net Tangyongkang OpenCV中 CvSeq 对象由以下语句生成 创建 CvSeq的容器对象 CvMemStorage storage 61 cvCreateMemStorag
  • 利用meshgrid函数绘制二维高斯函数曲面

    meshgrid函数用于根据给定的横纵坐标点生成坐标网格 xff0c 以便计算二元函数的取值 设二维高斯函数表达式为 xff1a 程序如下 xff1a u 61 10 0 1 10 v 61 10 0 1 10 U V 61 meshgri
  • 要想成功必备的9大好习惯 以及必须克服的9个坏习惯

    要想成功 必备 9 大好习惯 以及 必须克服的 9 个坏习惯 你想成功吗 xff1f 那就及早培养有利于成功的好习惯 习惯的力量是惊人的 xff0c 35岁以前养成的习惯决定着你是否成功 有这样一个寓言故事 一位没有继承人的富豪死后将自己的
  • 数据结构算法学习之路

    1 二分法竞猜商品价格 include lt stdio h gt include lt stdlib h gt int main int oldprice price 61 0 i 61 0 printf 34 请设置商品的真实价格 xf
  • React markdown 编辑器

    react markdown 是一款 github 上开源的适用于 react 的 markdown 组件 xff0c 可以基本实现 markdown 的功能 xff0c 且可以根据自己实际应用定制的 remark 组件 安装 安装 mar
  • ROS下IMU串口通讯接口(通用版)

    1 源码 include lt string gt include lt ros ros h gt 包含ROS的头文件 include lt sensor msgs JointState h gt include lt tf transfo
  • openrave安装 win7(10)

    1 软件安装 1 xff09 其中 xff0c boost 1 44需独立编译 xff0c 放到指定文件夹下 xff0c 例如 D boost 1 44 0 xff1b 2 xff09 ps 最大的坑在这里 xff0c 务必把msvc bo
  • 嵌入式常见的数据结构

    0 引言1 线性表1 1 顺序表1 1 1 定义类型1 1 2 相关操作1 1 3 相关操作的实现 1 2 链表1 2 1 定义类型1 2 2 相关操作1 2 3 相关操作的实现 2 栈2 1 顺序栈2 1 1 定义类型2 1 2 相关操作
  • vslam

    目录 隐藏 1 SLAM 介绍 1 1 什么是SLAM 1 2 SLAM与视觉里程计 xff08 Visual Odometry xff09 1 3 SLAM和SfM 2 主流开源SLAM方案 2 1 视觉传感器 2 2 激光传感器 2 3
  • 华为mate手机从解锁到root成功全步骤

    警告 请保持电量充足 xff0c 不然小心变砖 解锁手机会恢复出厂设置 xff0c 原因未知 xff08 伤心 xff0c 不想查了 xff09 xff0c 请需要解锁的diy爱好者 xff0c 自行备份数据 一 安装adb驱动 下载安装a
  • <Zhuuu_ZZ>HIVE(十一)函数

    Hive内置函数 一 Hive函数分类二 字符函数二 类型转换函数和数学函数三 日期函数四 集合函数五 条件函数六 聚合函数和表生成函数6 1 聚合函数6 2 表生成函数 xff1a 输出可以作为表使用 一 Hive函数分类 从输入输出角度
  • 嵌入式软件工程师的自我修养: Cortex-M3 ARM代码编译,链接与启动过程深度分析

    本篇文章以武汉杰开科技的汽车级MCU芯片AC7811为硬件平台 xff0c 使用GNU GCC作为开发工具 详细分析Compile Link Loader的过程以及Image 二进制程序 启动的详细分析 整个过程分析涉及到RW可读写DATA

随机推荐

  • STM32F103C8T6驱动ESP8266转串口模块(一)——模块AP模式+TCP客户端的HAL库驱动代码详解(CubeMX工程)

    1 STM32驱动ESP8266模块 笔者所使用的ESP8266模块为正点原子开发的模块 xff0c 该模块将通信接口变成了串口 接下来关于ESP8266模块的介绍均以此模块为基础 1 1 CubeMX配置STM32F103C8T6芯片引脚
  • spring cloud 问题记录(十五) Unauthorized grant type: authorization_code

    在使用授权码的方式获取code的时候出现如下异常 xff1a org springframework security oauth2 common exceptions InvalidClientException Unauthorized
  • 如何提高MATLAB的运算速度

    将提高MATLAB运算速度的途径总结为以下几点 xff1a 1 硬件方面 xff1a CPU配置高一些 xff1b 2 利用Profiler评估程序 xff0c 查找出函数花费时间较多的地方优化 xff1b 3 尽量少使用for或者whil
  • webpack5 学习系列 —— 支持 Vue

    接之前的 webpack 学习系列 安装 Vue xff1a span class token function npm span i vue S 安装完成 xff1a 安装相关插件 xff1a vue loader xff1a 解析和转换
  • Keil : Error-Flash Download failed Cortex-M4错误解决方案整理(J-Flash擦除下载教程)

    记录一下碰到的问题解决方法 第一步 xff1a 首先最先要确定的是芯片和设置是否对应 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 第二步 xff1a 确定芯片和设置对应无误后
  • js闭包理解与基本实现

    简单理解 xff1a 闭包就是 61 内层函数 43 外层函数的变量 内层函数 用到了外层函数的变量 所以才会产生了闭包 lt script gt function fn let a 61 1 function f console log
  • 头文件atlstr.h使用错误问题

    我的代码编译时出现如下错误 xff1a Error 33 fatal error LNK1120 1 unresolved externals Error 32 error LNK2001 unresolved external symbo
  • ubuntu编译服务器搭建

    我们现在开始做Android项目 xff0c 编译Android源码必不可少 但是Android编译需要Linux平台 xff08 一般都采用ubuntu xff09 xff0c 而且各种环境搭建繁杂 xff0c 编译时间长 xff0c 占
  • 和程序员有些不解之缘

    没来由的想起九年前的六月七 xff0c 不管是谁或许都不会想到一个青涩俏皮的丫头会变成铁铮铮的 汉子 高考那年我没发现自己有些许紧张 xff0c 在那之前我几乎没带着脑袋活着 xff08 我是那么想的 xff09 xff0c 觉着自己不在乎
  • SWDL学习篇

    WSDL 学习篇 1 什么是WSDL WSDL 是网络服务描述语言 xff0c 使用xml 编写 xff0c 是xml 文档 xff0c 可规定服务的位置以及提供服务的操作和方法 2 WSDL 文档结构 1 lt portType gt 元
  • linux面试题

    1 在Linux系统中 以 文件 方式访问设备 2 Linux内核引导时 从文件 etc fstab 中读取要加载的文件系统 3 Linux文件系统中每个文件用 i节点 来标识 4 全部磁盘块由四个部分组成 分别为 引导块 专用块 i节点表
  • MySql学习笔记(一)MySql卸载和安装说明

    MySql卸载 开始 控制面板 程序和功能 MySQL server xx 卸载 删除 C Program Files x86 MySQL 文件 删除 C ProgramData MySQL 文件 xff08 隐藏目录 xff09 如果以上
  • MySql学习笔记(二)MySql配置文件和服务操作说明

    Mysql配置文件说明 MySQL MySQL ServerX X my ini mysqld 为服务端配置 xff0c 服务端端口号 port 61 3306 安装目录 basedir 61 34 C Program Files MySQ
  • MySql学习笔记(三)MySql常用命令说明

    一 数据库命令 1 1显示数据库命令 命令 xff1a mysql gt show databases 执行后 xff1a 43 43 Database 43 43 information schema mysql performance
  • 什么是源端口和目的端口

    源端口就是指本地端口 目的端口就是远程端口 一个数据包 xff08 pocket xff09 被解封装成数据段 xff08 segment xff09 后就会涉及到 连接上层协议的端口问题 很多人都在源端口和目的端口这两个概念上犯迷糊 xf
  • Redux 学习系列(一) —— 基础概念入门篇

    简介 Redux 是一个可预测的 JavaScript 应用状态管理容器 xff0c 也可以说是一个应用数据流框架 作用 Redux 主要是用作应用状态的管理 它抽离所有组件的状态 xff0c 构造一个中心化的单独常量状态树 xff08 对
  • ini文件

    关于ini 文件的存储于加载 xff0c 初次遇到 xff0c 刚接触ini 文件 xff0c 我想我该把它记下 xff0c 以后提醒自己要常用 参数 保存 xff1a 参数结构体 struct TextConfig int nVol 音量
  • TX2安装Realsense -L515相机并在ros下 运行 总结

    1 写在最前面 坑爹呀有木有 xff0c L515 刚弄出来 xff0c 导师就让用 一堆坑呀 xff0c 最大的谎言就是ubuntu1604能用realsense2 不管之前D435之流留下多少恩爱情仇 xff0c https www i
  • 12-IDEA配置JDK版本(2020.2.3版本)

    1 配置当前项目的JDK版本 File gt Project Structure gt Project SDKs xff0c 也可以直接点击右上角的图标 2 配置之后创建的新项目JDK版本 类似于全局配置 File gt New Proje
  • 傅立叶变换详解

    傅里叶变换 傅里叶变换 xff08 Fourier transform xff09 是一种线性的积分变换 xff0c 从时间转换为频率的变化 1 连续傅里叶变换 这是将频率域的函数F 表示为时间域的函数f xff08 t xff09 的积分