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…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
