FFT 分析进阶-笔记
FFT 分析进阶
- 边界不连续与泄漏效应
- 解决方法增加窗函数
- 海宁窗与哈布什窗
- 混叠效应
- 频率高到什么程度会出现混叠现象呢?
- 那我们有办法去应对这个混叠吗?
- 经典平均
- 指数平均
- 关于结果的显示模式
- FFT计算的三个常见的范例
- 计算FFT图谱中某一段的总值,图中这边橙色标记的这一段
- 特定高次谐波的和
- 信噪比SNR的一个计算
- 总结
边界不连续与泄漏效应
对于输入信号进行一个采样,每次会采一段的长度,然后把各段给它连接起来,这样子才能计算出FFT的一个频谱。
当信号在时间窗口内不完整时(即信号开始和结束时的值不相等),会在频域产生额外的频率分量,即泄漏效应。这会导致原本单一频率的信号在频谱图上表现为多个频率分量。

得出来的FFT频谱中,有两段之间其实我们注意看一下,这边会有一个突变,这个就导致了FFT的泄露,或者叫弥散的一个效应。
解决方法增加窗函数
出现泄露之后,我们看看的这个图,它就不是一个基波跟这个噪声区分非常明显的一个图谱了。应对的方法就是加一个窗函数就可以了。

增加窗函数使得每一段信号之间的过渡就会趋于平缓,结果受到的影响也会降到最低。
不同的窗函数对结果的影响显然也是不一样的,应用时选择一个合适的窗函数就显得非常的重要。比较流行的是海宁窗和哈布什窗这两个窗函数。一般来说这两个窗函数可以使用在大部分的应用场景之中。

红色的这个曲线它的旁瓣就是这两边的谐波,我们可以看到,压制的非常厉害,几乎只剩下中心频率的中心的这这一段。这样就可以把旁边两边的这些频率的弥散效应压的很低,而基波非常的突出。
同时我们也可以看到红色曲线的中间的频宽,这边中间的频宽要比黑色的要宽一些。所以说如果单独我们要找出某一个频率的话,那黑色的窗函数就比红色的这个窗函数要更加的好。黑色的窗函数的这个问题就是这旁瓣更多。
海宁窗与哈布什窗
海宁窗特点:海宁窗具有较好的频率选择性,适用于多个频率混在一起的信号。它的旁瓣较小,中心频率突出。
哈布什窗特点:哈布什窗的频率选择性较窄,适用于找出高速谐波。它的旁瓣较多,但中心频率更加集中。

这个绿色的就是哈布什窗,然后红色的就是海宁窗。
红色曲线其实就是直接的给它进行一个压制,这就意味着这个红色曲线的频率可选性更大。总的来说就是海宁窗它适合那种有多个频率混在一起的信号。而哈布什窗找频率比较的窄一点,它就适合去找出高速谐波。
混叠效应

混叠通常出现在对信号采样信号的一个重构的过程中,基于这些数字化的这些数值,仪器相当于重新重构了这样的一个输入信号。当然采样率越高的话,我们的这个采样也就越密集,这个重构就越精准。

如果我们这个输入信号的频率非常的大,我们还是以同样的这个采样率去进行一个采样。我们后面得到的这个bin的频率就非常的高。但是这个只是理想的情况,而实际情况频率越来越大。但是我分析一个采样率是有限的,这样采样的数据并不能代表完整的信号,重构出来的信号可能跟你原始的信号也变得不一样了。

因为采样点是有限的,所以我们只能重构出红色虚线这样的信号,从而计算出来的FFT频率要小于实际的频率,这重构的就是实际的要小于这个实际的频率。这个错误的频率实际上就是这个实际频率的一个混叠。
频率高到什么程度会出现混叠现象呢?

当这个频率超出我们采样率一半的时候就会出现混叠。那我们假设这个绿色的这个区域代表的是我是我仪器的带宽,就是FFT采样率的一半。只要超出这个频率就会出现一个混叠采样率一半的这个频率。还有一个学名叫奈奎斯特频率。
那我们有办法去应对这个混叠吗?
答案是肯定的,而且很简单,只需要加一个低通的滤波,但注意这个低通滤波器一定要加模拟的滤波器。因为数字滤波器还是会遇到同样的问题。数字滤波器它没有办法区分原始信号和原始信号的低频和这个混叠后产生的一个低频,它没办法区别的区分。
经典平均

连续测出了第二段、第三段,然后仪器自动的计算这三段的一个平均值,显示出这个平均值。

接着仪器继续去采样,等三段结果出来的时候,我再去做一个平均,然后显示出来这里每一段采样在这里面每一段的采样在结果中显示出来的权重是一样的。
指数平均
也有第一段采样,接着是第二段,然后第三段,我们计算出一个FFT的频谱出来。

但是我们注意它计算的权重是第三个,最近的这一个权重是最大的。

然后接下来我们又出现了一个新的一个图谱,再一次的去进行一个采样。
采样这个采样完成之后,仪器又立刻计算出了一个平均值。这个平均值,他就把第一个出现的结果给它剔除掉了。
经典平均一般用在单次测量中。比如说产线上对产品进行品控,每个产品测一次就可以得到结果。
而指数平均就适合连续监测的一个场景,它能记录出信号随时间变化的一个情况。
关于结果的显示模式
假设我的快长度设置的是8K,那就是说每次测试的结果里面包含了8000个点的数值。不说显示器能不能显示出这么多个点,就算把数据都记录下来,我们也很难找到有意义的一些信息。最终办法是将其合并起来。

FFT计算的三个常见的范例
计算FFT图谱中某一段的总值,图中这边橙色标记的这一段

特定高次谐波的和

信噪比SNR的一个计算

图谱里面最高的这一个点是基波,是一个是信号。然后看到基波的左边和基波的右边,左边是一些低频的噪声,然后右边其实它里面还有一些高速谐波,这在这个里面,这个时候我们就需要做一个计算,信号值的话就只有一个。
总结

相关文章:
FFT 分析进阶-笔记
FFT 分析进阶 边界不连续与泄漏效应解决方法增加窗函数海宁窗与哈布什窗混叠效应频率高到什么程度会出现混叠现象呢?那我们有办法去应对这个混叠吗?经典平均指数平均关于结果的显示模式FFT计算的三个常见的范例计算FFT图谱中某一段的总值,图中…...
毕业设计_基于springboot+layui+mybatisPlus的中小型仓库物流管理系统源码+SQL+教程+可运行】41004
毕业设计_基于springbootlayuimybatisPlus的中小型仓库物流管理系统源码SQL教程可运行】41004 下载地址: https://download.csdn.net/download/qq_24428851/89843203 技术栈 后端:springboot、mybatis-plus、shiro 前端:layUI 存储&…...
ROS基础入门——实操教程
ROS基础入门——实操教程 前言 本教程实操为主,少说书。可供参考的文档中详细的记录了ROS的实操和理论,只是过于详细繁杂了,看得脑壳疼,于是做了这个笔记。 Ruby Rose,放在这里相当合理 本文初编辑于2024年10月4日 C…...
etcd 快速入门
简介 随着go与kubernetes的大热,etcd作为一个基于go编写的分布式键值存储,逐渐为开发者所熟知,尤其是其还作为kubernetes的数据存储仓库,更是引起广泛专注。 本文我们就来聊一聊etcd到底是什么及其工作机制。 首先,…...
Spring MVC__HttpMessageConverter、拦截器、异常处理器、注解配置SpringMVC、SpringMVC执行流程
目录 一、HttpMessageConverter1、RequestBody2、RequestEntity3、ResponseBody4、SpringMVC处理json5、SpringMVC处理ajax6、RestController注解7、ResponseEntity7.1、文件下载7.2、文件上传 二、拦截器1、拦截器的配置2、拦截器的三个抽象方法3、多个拦截器的执行顺序 三、异…...
GAMES101(19节,相机)
相机 synthesis合成成像:比如光栅化,光线追踪,相机是capture捕捉成像, 但是在合成渲染时,有时也会模拟捕捉成像方式(包括一些技术 动态模糊 / 景深等),这时会有涉及很多专有名词&a…...
Django Nginx+uwsgi 安装配置
Django Nginx+uwsgi 安装配置 本文将详细介绍如何在Linux环境下安装和配置Django应用程序,使用Nginx作为Web服务器和uwsgi作为应用程序服务器。我们将覆盖以下主题: 安装Python和相关库安装和配置Django安装Nginx安装和配置uwsgi配置Nginx以使用uwsgi测试和调试1. 安装Pytho…...
oracle数据备份和导入
一、数据导出 创建目录对象: CREATE DIRECTORY dpump_dir AS /path/to/your/directory;授予权限: GRANT READ, WRITE ON DIRECTORY dpump_dir TO test_user; #导出的用户导出全库数据 expdp your_user/your_password DIRECTORYdpump_dir DUMPFILEfu…...
C++ | Leetcode C++题解之第452题用最少数量的箭引爆气球
题目: 题解: class Solution { public:int findMinArrowShots(vector<vector<int>>& points) {if (points.empty()) {return 0;}sort(points.begin(), points.end(), [](const vector<int>& u, const vector<int>&…...
react-问卷星项目(3)
项目实战 React Hooks 缓存,性能优化,提升时间效率,但是不要为了技术而优化,应该是为了业务而进行优化 内置Hooks保证基础功能,灵活配合实现业务功能,抽离公共部分,自定义Hooks或者第三方&am…...
69 BERT预训练_by《李沐:动手学深度学习v2》pytorch版
系列文章目录 文章目录 系列文章目录NLP里的迁移学习Bert的动机Bert架构对输入的修改五、预训练任务1、2、3、 六、1、2、3、 七、1、2、3、 八、1、2、3、 NLP里的迁移学习 之前是使用预训练好的模型来抽取词、句子的特征,例如 word2vec 或语言模型这种非深度学习…...
Java报错输出的信息究竟是什么?
Java报错输出的信息究竟是什么? 本篇会带大家了解一下java运行时报错输出的信息内容,简单学习一下虚拟机内存中Java虚拟机栈的工作方式以及栈帧中所存储的信息内容 异常信息 当你的程序运行报错时,你是否会好奇打印出来的那一大坨红色的究竟…...
解表之紫苏
** 声明:本文介绍的中药仅供学习使用,请勿擅自使用,否则后果自负!!!因水平有限,如有不当之处,请批评指正!!!!图片来源网络࿰…...
JavaScript数据类型
目录 JavaScripit数据类型 原始类型(Primitive Types) 1 Undefined 特点 实例 2 Null 实例 3 Boolean 重点: 常用falsy情况: 思考 4 Number,BigInt 实例 特点 NaN 5 String 在JavaScript中表示字符串有三种表示方…...
市场中的新兴力量与未来发展
在当前瞬息万变的全球金融市场中,期货交易以其高杠杆与灵活性,吸引了越来越多的投资者参与其中。大粤期货作为中国期货行业的新兴力量,凭借其创新的交易平台、广泛的产品线及专业的风险管理服务,迅速在市场中崭露头角。本文将介绍…...
Golang | Leetcode Golang题解之第446题等差数列划分II-子序列
题目: 题解: func numberOfArithmeticSlices(nums []int) (ans int) {f : make([]map[int]int, len(nums))for i, x : range nums {f[i] map[int]int{}for j, y : range nums[:i] {d : x - ycnt : f[j][d]ans cntf[i][d] cnt 1}}return }...
Java 常用序列化对比
Java 中常用的序列化方式主要包括以下几种: 1. Java 原生序列化 使用方式: 使用 java.io.Serializable 接口。对象需要实现该接口,然后通过 ObjectOutputStream 和 ObjectInputStream 进行序列化和反序列化。 示例代码: import java.io.*;public class Person impleme…...
【redis学习篇1】redis基本常用命令
目录 redis存储数据的模式 常用基本命令 一、set 二、keys pattern keys 字符串当中携带问号 keys 字符串当中携带*号 keys 【^字母】 keys * 三、exists 四、del 五、expire 5.1 ttl命令 5.2key删除策略 5.2.1惰性删除 5.2.2定期删除 六、type key的数据类型…...
量子计算:颠覆未来计算的革命性技术
量子计算:颠覆未来计算的革命性技术 量子计算作为下一代颠覆性技术,正在引领计算领域的重大变革。与传统计算机基于比特的二进制运算不同,量子计算通过量子比特(qubits)在叠加态和纠缠态下实现并行计算,能…...
ctfshow-web入门(信息收集,持续更新中。。)
写在之前:近期打了个比赛,备受打击,入手了vip账号进修,加油! 文章目录 ctfshow-web1查看源代码ctfshow-web2burp抓包ctfshow-web3burp抓包ctfshow-web4访问robots.txtctfshow-web5dirscarch扫描PHPS文件泄露ctfshow-web6dirscarch扫描ctfshow-web7dirscarch扫描ctfshow-w…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
