傅里叶分析(2)

在《傅里叶分析(1)》中,讲述了连续信号的傅里叶分析方法,本文讲述离散信号的傅里叶分析方法。

虽然电、声、光、机械振动等信号在物理上是连续函数,但在实际工程中,其通常为离散信号,即若干离散的数据点。对于离散信号,傅里叶级数和傅里叶变换已经无法使用,需要使用 DTFT(离散时间傅里叶变换)和 DFT(离散傅里叶变换)分析离散信号。

1 离散信号的来源

离散信号来源于对连续信号的采样。数学处理上,离散信号为连续信号和采样函数(sampling function)的乘积:

采样函数为基于狄拉克 δ 函数(Dirac delta function)表述的脉冲序列,其定义如下:

采样函数为周期函数,其在非采样时刻的函数值为 0,由此可得仅限采样时刻的离散数据点。

采样函数的图像(图源:维基百科)

采样函数的傅里叶变换为频域上的采样函数,其周期为 1/T:

2 DTFT

根据前述采样方法,可将离散信号 x{n} 视为连续函数,除了采样点之外其他时刻函数值均为0。

傅里叶变换的卷积特性可表示为:

利用傅里叶变换的卷积特性,对 x{n} 进行傅里叶变换,其结果即 DTFT 计算公式为:

变换结果 X(ξ) 为连续周期函数,其周期为 1/T,即 X(ξ)=X(ξ+n/T)。

由于 X(ξ) 为连续函数,其逆变换可直接使用傅里叶逆变换的计算公式。对于周期函数,可将积分区间从无穷大简化到一个周期内,得到 DTFT 逆变换公式:

其中,积分区间可为任意的区间,只需满足区间的长度为单个周期长度 1/T 即可。根据 n 取值的不同即可获得 x{n} 各项取值。

对于纯实数的信号 x{n},其变换结果 X(ξ) 在正频率和负频率的幅值为对称关系。

3 DFT

虽然 DTFT 表明了离散信号的频谱分析方法,但是得到的频谱是连续函数,对基于程序的实际信号分析造成很大困难。

引用 DTFT 思路,将 x{n} 视为连续函数。根据连续信号的频谱特征,周期函数的频谱为离散点,由此可对频谱进行程序处理。

将包含 N 个数据点的有限数据集 x{n}(从 x{0} 至 x{N-1}),进行周期延拓,即 x{n} = x{n+k*T*N)},可使之成为在无穷大区间均有定义的周期函数,其周期为 T*N。由于 x{n} 的周期性,对 x{n} 进行 DTFT 仅需在单周期内即可进行。

单周期内的 DTFT 为 DFT,其计算公式为:

很显然,X{k} 在区间 [0, N-1] 只有 N 个取值,且周期为 N。

同理,在频域的单周期内进行 DTFT 逆变换,即可得到 DFT 逆变换计算公式:

对于纯实数的信号 x{n},其变换结果 X(ξ) 在正频率和负频率的幅值为对称关系。

4 重要问题

4.1 频谱的类型

通常而言,时域信号 x{n} 来源为传感器信号、A/D电路转换等,其表示的物理量通常为可直接测量的物理量,如速度、电流、温度等。

实际应用中,频谱通常分为幅值谱(amplitude spectrum)和功率谱(power spectrum)两类。幅值谱表示与功率的平方根成比例的物理量(如速度、电流、电压等);功率谱表示功率或与功率成比例的物理量(如光强度、声强度等)。

功率谱示意图(图源:mathworks.com)

幅值谱和功率谱分别定义如下:

4.2 频谱范围与精度

对于纯实数函数,DFT 可分析的频率范围为:

其中,t 为采样总时间,fs 为采样频率。

根据奈奎斯特采样定理(Nyquist sampling theorem),离散信号可分析的频谱最高频率为采样频率的一半。对于更高频率部分,DFT 已无法分析。

DFT 频谱的频率分辨率为:

其中 N 为信号的数据点数量。若需要更精细的频谱分辨率,只需要增加信号样本数量即可。

4.2 数据处理与窗函数

对离散信号的周期延拓,通常会在信号首尾两端形成较大的不连续。信号在时域的不连续会导致频谱泄露(spectral leakage),即人为形成某些本不存在的谐波。

通过窗函数(window function)对离散信号进行处理,使信号首尾两端的幅值逐步降低,可降低信号在两端的不连续性。

通过窗函数处理后的信号 y{n} 和原始信号 x{n} 之间,满足:

其中 w{n} 为窗函数。

窗函数应用效果对比(图源:《Digital Signal Processing Fundamentals and Applications》,作者 Li Tan)

常用的窗函数包括三角、Hamming、Hanning等。

若信号是宽带信号,即不存在很明显的频域尖峰,可无需窗函数处理。Hanning 窗函数适用于多数常规问题,可作为通用的窗函数。

Hanning 窗函数表达式为:

Hanning 窗函数特点为在信号首尾两端幅值为 0,正中心位置幅值为 1。

包含 21 个数据点的 Hanning 窗函数图像

5 DFT 和 FFT 的关系

快速傅里叶变换(Fast Fourier Transform,FFT)是 DFT 的一种计算方法。FFT 本质上是利用其它替代计算方式,避免根据 DFT 的定义直接计算 DFT,从而加快计算速度,节约硬件资源。

FFT 当前最常用方法为 Cooley–Tukey 方法。许多工程计算软件均有 FFT 相关功能,直接导入数据序列进行分析即可。

6 总结

对(1)、(2)文的重点进行总结:

  • 傅里叶级数和傅里叶变换表述了连续信号频谱分析方法
  • DTFT 表述了无限多样本的离散信号频谱分析方法
  • DFT 表述了有限多样本的离散信号频谱分析方法
  • 只有 DFT 可直接用于程序计算
  • 使用 FFT 可加快 DFT 计算速度

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

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

相关文章

2024测试工程师必学系列之Jmeter(36):jmeter对图片验证码的处理

jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入,而且每次登录时图片验证码都是随机的;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段,然后再登录接口中使用; 通过jmeter对图片验证码…

【CSH 入门基础 8 -- csh 中 set 与 setenv 的区别 】

文章目录 set 命令setenv 命令区别设置系统路径变量PATH添加单个路径设置多个路径 举例例子:编辑 .cshrc 文件 设置文件路径设置和使用局部变量永久设置变量 在 csh(C shell)和它的变体 tcsh(增强型 C shell)中&#x…

深度学习之基于yolo的体育运动项目姿态估计识别计数系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习在体育运动项目姿态估计识别计数系统中的应用是一项具有挑战性和应用价值的研究领域。以下是对深度学习在体…

亚马逊运营中动态/静态住宅IP代理的应用有哪些?跨境电商必备

作为全球最大的电商平台之一,亚马逊已经成为许多商家的首选销售平台。而代理IP作为近几天互联网的热门工具,在跨境电商界也起着非常强大的作用。那么在亚马逊运营中,适合动态住宅代理还是静态住宅代理呢?下面我们一起来探索&#…

位运算技巧及leetcode相关例题Java实现

目录 一、异或运算符的运用&&leetcode136 异或运算符 a ^ b ^ b a leetcode136 二、n & (n - 1)&&leetcode133 n & (n - 1):消除n最右边的一个1 leetcode133/剑指offer15 三、m的n次方(n是正整数) 常规写法 二进制的快…

LeetCode热题100——贪心算法

贪心算法 1. 买卖股票最大利润2. 跳跃游戏3. 跳跃游戏Ⅱ 1. 买卖股票最大利润 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一…

linuxTcp状态转换

1.TCP状态转换 在TCP进行三次握手,或者四次挥手的过程中,通信的服务器和客户端内部会发送状态上的变化,发生的状态变化在程序中是看不到的,这个状态的变化也不需要程序猿去维护,但是在某些情况下进行程序的调试会去查…

《QT从基础到进阶·三十六》QWidget实现收缩栏的效果

功能: 1、可以在收缩栏插件中添加界面 2、可以把界面展开或收缩 3、可以用鼠标拖动界面改变界面的排放顺序 源码放在最下方 1、可以在收缩栏插件中添加界面 virtual void addWidget(QWidget* widget, const QString& label, const QIcon& icon QIcon())…

打造高效医患沟通:陪诊小程序开发技术指南

随着科技的不断发展,陪诊小程序作为医患沟通的新工具逐渐成为关注焦点。本文将带领你通过使用React和Node.js技术栈,构建一个功能强大且用户友好的陪诊小程序,实现医患互动的便捷和高效。 1. 准备工作 确保你的开发环境中已安装了Node.js和…

封装Vue中的axios请求库

安装axios:首先,在项目中安装axios库。可以使用npm或者yarn进行安装。 npm install axios创建封装文件:在src目录下创建一个api文件夹,并在该文件夹下创建一个request.js文件。 在request.js文件中,引入axios库和Vue&…

点击这里,获取数据治理加速器!

数据管理员:又双叒叕…盘一遍数据,这种工作究竟还要重复多少次?! • 上上个月,发现数据有些问题,我把数据盘了一遍,梳理完数据的关联表才定位到问题; • 上个月,进行数据…

竞赛 题目:基于深度学习的人脸表情识别 - 卷积神经网络 竞赛项目 代码

文章目录 0 简介1 项目说明2 数据集介绍:3 思路分析及代码实现3.1 数据可视化3.2 数据分离3.3 数据可视化3.4 在pytorch下创建数据集3.4.1 创建data-label对照表3.4.2 重写Dataset类3.4.3 数据集的使用 4 网络模型搭建4.1 训练模型4.2 模型的保存与加载 5 相关源码6…

js判断参数是否为空方法

这边记录一下大致的判断情况, 写法一(不推荐): function foo(arg){//写法一:不严谨arg arg ? arg : 我是默认值console.log(arg) }foo(123) //输出:123 foo() //输出:我是默认值 foo(0) …

去除IDEA中代码的波浪线(黄色警示线)

去除IDEA中代码的波浪线 首先是点击File—>Settings 操作如下图所示: 然后点击Editor—>Inspections—>General—>Duplicated code fragment(去掉勾选)—>Apply—>OK 即可,详情请看下图所示:

【Java】Groovy 语言应用场景以及积累

Groovy 是一种多用途的编程语言,它可以用于多种开发场景。以下是 Groovy 可以用于的一些开发领域和示例: 脚本编写: Groovy 的简洁语法和强大的动态特性使其成为编写脚本的理想选择。 def message "Hello, World!" println messag…

7-sqlalchemy快速使用和原生操作、增删查改、增加和基于对象的跨表查询、scoped线程安全、g对象、基本增查改和高级查询

1 sqlalchemy快速使用 2 sqlalchemy原生操作 3 sqlalchemy操作表 3.2 基本增删查改 4 一对多关系 4.1 关系建立 4.2 增加和基于对象的跨表查询 5 多对多关系 5.2 增加和基于对象跨表查 6 scoped线程安全 7 g对象 8 基本增查改 7 常用查询 1 sqlalchemy快速使用 1.1 介绍 # …

什么是数字化工厂?企业数字化转型有什么好处?

科技在发展,时代在进步,全球信息化、数字化的步伐越来越快,数字化转型是否成功也成为企业在未来发展中能否做大做强的关键因素。而数字化工厂就是制造业数字化发展的一个重要发展方向,那么究竟什么是数字化工厂呢?它和…

Linux | 进程间通信

目录 前言 一、进程间通信的基本概念 二、管道 1、管道的基本概念 2、匿名管道 (1)原理 (2)测试代码 (3)读写控制相关问题 a、读端关闭 b、写端关闭 c、读快写慢 d、读慢些快 (4&a…

Unity下载资源且保存

UnityWebRequest(WWW——已过时) 替代:Unity不再支持WWW后,使用UnityWebRequest完成web请求。 Unity - Scripting API: UnityWebRequest (unity3d.com)https://docs.unity3d.com/ScriptReference/Networking.UnityWebRequest.html if (www.isNetworkEr…

GPT-4:论文阅读笔记

GPT-4的输入和输出:输入的内容是文本或图片,输出的内容是文本。因此,GPT-4是一种输入端多模态的模型。GPT-4的效果:在真实世界中还是比不上人类,但是在很多专业性的任务上已经达到了人类的水平,甚至超过人类…