FFT频谱分析原理

2023-11-08

FFT频谱分析原理

采样定理:采样频率要大于信号频率的两倍。

N个采样点经过FFT变换后得到N个点的以复数形式记录的FFT结果。

假设采样频率为Fs,采样点数为N。那么FFT运算的结果就是N个复数(或N个点),每一个复数就对应着一个频率值以及该频率信号的幅值和相位。第一个点对应的频率为0Hz(即直流分量),最后一个点N的下一个点对应采样频率Fs。其中任意一个采样点n所代表的信号频率:

Fn=(n-1)*Fs/N。

这表明,频谱分析得到的信号频率最大为(N-1)*Fs/N,对频率的分辨能力是Fs/N。采样频率和采样时间制约着通过FFT运算能分析得到的信号频率上限,同时也限定了分析得到的信号频率的分辨率。

每一个复数的模值对应该点所对应的频率值的幅度特性,具体的定量关系如下:

假设信号由以下周期的原始信号叠加而成:

Y = A1 + A2 Cos (2*PI*ω2*t + φ2 * PI/180) + A3 Cos (2*PI*ω3*t + φ3 * PI/180)

那么,在经过FFT分析后得到的第一个点的模值是A1的N倍,而且只有在FFT结果点对应的频率在ω2,ω3时,其模值才明显放大,在其他频率点,模值接近于0。在这些模值明显放大的点中,除第一个点之外的其它点模值是相应信号幅值的N/2倍。

每个复数的相位就是在该频率值下信号的相位:φ2,φ3。

FFT结果有对称性,通常我们只是用前半部分的结果,也就是小于采样频率一半的结果。同时也只有采样频率一半以内、具有一定幅值的信号频率才是真正的信号频率。

Python实践FFT频谱分析

假如信号S是有1个直流信号和4个周期信号叠加而成,如下公式所列(t为自变量,pi为圆周率值)现要对其进行FFT分析并绘制频谱图。

S =  2.0  + 3.0 * cos(2.0 * pi * 50 * t - pi * 30/180)
      + 1.5 * cos(2.0 * pi * 75 * t + pi * 90/180)
      +  1.0 * cos(2.0 * pi * 150 * t + pi * 120/180)
      +  2.0 * cos(2.0 * pi * 220 * t + pi * 30/180)

我们先使用Python绘制其1秒内的波形图:

import numpy as np
  import pylab as pl
  import math
  # 采样步长
  t = [x/1048.0 for x in range(1048)]
  # 设计的采样值
  y = [2.0 + 3.0 * math.cos(2.0 * math.pi * 50 * t0 - math.pi * 30/180)
          + 1.5 * math.cos(2.0 * math.pi * 75 * t0 + math.pi * 90/180)
          +  1.0 * math.cos(2.0 * math.pi * 150 * t0 + math.pi * 120/180)
          +  2.0 * math.cos(2.0 * math.pi * 220 * t0 + math.pi * 30/180)
          for t0 in t ]
  pl.plot(t,y)
  pl.show()

 

波形图如图1所示。

使用Python进行FFT频谱分析
图 1 信号S在1秒内的波形

现在我们要对该信号在0-1秒时间内进行频谱分析,我们在这1秒时间内采样1048点,则我们的采样频率为1048Hz。这两个设定决定了我们频谱分析所能得到的最高信号频率是1047Hz (1048Hz*(1048-1)/1048),但只有小于524Hz的频率才可能是真实的信号频率。我们能分辨的最小频率差为1Hz(1048Hz/1048)。输入如下的python代码:

N=len(t)    # 采样点数
  fs=1048.0     # 采样频率
  df = fs/(N-1)   # 分辨率
  f = [df*n for n in range(0,N)]   # 构建频率数组

使用下面的代码进行快速傅里叶变换并对结果模值进行缩放:

Y = np.fft.fft(y)*2/N  #*2/N 反映了FFT变换的结果与实际信号幅值之间的关系
  absY = [np.abs(x) for x in Y]      #求傅里叶变换结果的模

此时我们得到了信号的FFT分析结果,它存储在列表Y内,同时我们也获取了Y内每一个元素(是复数)的模组成的列表absY。根据理论分析,absY内的元素大部分都极其接近0,只有极少数峰值提示的是信号频率的幅度。我们写一小段代码显示幅度较大的信号的信息。代码如下:

i=0
  while i < len(absY):
          if absY[i]>0.01:
                   print("freq:M, Y: %5.2f + %5.2f j, A:%3.2f, phi: %6.1f"

     %(i, Y[i].real, Y[i].imag, absY[i],math.atan2(Y[i].imag,Y[i].real)*180/math.pi))
       i+=1

该段代码的执行结果如下:

freq:   0, Y:  4.00 +  0.00 j, A:4.00, phi:    0.0

freq:  50, Y:  2.60 + -1.50 j, A:3.00, phi:  -30.0

freq:  75, Y:  0.00 +  1.50 j, A:1.50, phi:   90.0

freq: 150, Y: -0.50 +  0.87 j, A:1.00, phi:  120.0

freq: 220, Y:  1.73 +  1.00 j, A:2.00, phi:   30.0

freq: 828, Y:  1.73 + -1.00 j, A:2.00, phi:  -30.0

freq: 898, Y: -0.50 + -0.87 j, A:1.00, phi: -120.0

freq: 973, Y:  0.00 + -1.50 j, A:1.50, phi:  -90.0

freq: 998, Y:  2.60 +  1.50 j, A:3.00, phi:   30.0

该段结果很好的反映了原始信号的频率、幅度和相位,我们在代码中已经对FFT结果与信号幅值做了一个换算2/N,但在0Hz处,实际的信号应该是FFT结果的1/N,也就是A:4.00再除以2。

使用如下代码绘制频谱图,得到图2:

pl.plot(f,absY)
  pl.show()

 使用Python进行FFT频谱分析
图 2 信号S的频谱分析图

 

 由图2可见,频谱分析的结果具有对称性,同220Hz对称的频率为828Hz,可以计算出对称轴为524Hz。但只有小于524Hz的频率才是信号频率。我们通过修改采样频率和采样点数,我们发现作为对称轴的频率会变化,同样的对称轴右侧的信号频率也会发生变化。提示右侧的频率没有实际意义,这也从一个方面印证了采样定理。

本文大量参考了博文:利用matlab怎样进行频谱分析 在此对博主表示感谢,原文链接:http://blog.sina.com.cn/s/blog_a07f4fe301013gj3.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FFT频谱分析原理 的相关文章

  • 机器视觉(一)——ROS中的图像数据

    机器视觉 xff08 一 xff09 ROS中的图像数据 目录 总述一 二维图像数据二 三维点云数据 总述 无论是USB摄像头还是RGBD摄像头 xff0c 发布的图像数据格式多种多样 xff0c 在处理这些数据之前 就需要了解这些数据的格
  • ROS中阶笔记(五):机器人感知—机器视觉

    ROS中阶笔记 xff08 五 xff09 xff1a 机器人感知 机器视觉 文章目录 1 ROS中的图像数据1 1 二维图像1 1 1 安装安装usb cam1 1 2 显示图像数据 1 2 三维图像 kinect 2 摄像头标定2 1
  • 图像处理入门5-特征提取

    特征提取 图像特征提取属于图像分析的范畴 是对图像信息的深层理解 是数字图像处理的高级阶段 同时也是图像识别的开始 特征工程是图像处理的必备工具 所以掌握它的重要性不言而喻 什么是特征 特征是某一类对象区别于其他类对象的相应 本质 特点或特
  • 缺陷检测公开数据集大全

    一 弱监督学习下的工业光学检测 DAGM 2007 数据下载链接 https hci iwr uni heidelberg de node 3616 数据集简介 主要针对纹理背景上的杂项缺陷 较弱监督的训练数据 包含十个数据集 前六个为训练
  • Ciclop开源3D扫描仪软件---Horus源码分析之src\horus\engine\calibration\moving_calibration.py

    联系方式 QQ 2468851091 call 18163325140 Email 2468851091 qq com coding utf 8 This file
  • 计算机视觉技术与应用综述

    引用自 无人系统之 眼 计算机视觉技术与应用浅析 张 丹 单海军 王 哲 吴陈炜 一 前言 近年来 人工智能和深度学习获得突破 成为了大众关注的焦点 如LeCun Y Bengio Y Hinton G等 1 提出的深度卷积网络在图像识别领
  • 像素和毫米怎么换算

    像素和毫米怎么换算 像素和毫米是不能直接转换的 只有在分辩率 dpi 下才能进行转换 因此 像素与毫米的转换 需要知道参数 DPI 每英寸多少点 象素数 DPI 英寸数 英寸数 25 4 毫米数 对于显示设备 不管是打印机还是屏幕 都有一种
  • FFT频谱分析原理

    FFT频谱分析原理 采样定理 采样频率要大于信号频率的两倍 N个采样点经过FFT变换后得到N个点的以复数形式记录的FFT结果 假设采样频率为Fs 采样点数为N 那么FFT运算的结果就是N个复数 或N个点 每一个复数就对应着一个频率值以及该频
  • 机器视觉之医学诊断应用

    https www toutiao com a6668252530897584644 随着药品和医疗器械安全性问题重要性的不断提升 越来越多的生产厂商将机器视觉技术引入实际生产中来 以达到提高生产效率 加强产品质量保障的目的 同样 在医疗系
  • OpenCV相机标定全过程

    一 OpenCV标定的几个常用函数 findChessboardCorners 棋盘格角点检测 bool findChessboardCorners InputArray image Size patternSize OutputArray
  • opencv--图像金字塔--高斯金字塔

    什么是图像金字塔 我们需要了解一个概念 尺度 尺度 顾名思义就是说图像的尺寸和分辨率 在我们进行图像处理的时候 会经常对源图像的尺寸进行放大或者缩小的变换 进而转换为我们指定尺寸的目标图像 在对图像进行放大和缩小的变换的这个过程 我们称为尺
  • 大数据毕业设计 机器视觉图像拼接算法研究与实现 - python opencv

    文章目录 0 前言 一 拼接效果 二 算法介绍 1 拼接算法简介 1 1 基于区域相关拼接算法 1 2 基于特征相关拼接算法 1 3 拼接算法的基本流程 2 拼接算法原理 2 1 第一种 特征匹配 2 2 第二种 计算图像之间的变换结构 2
  • 机器视觉(十一):一维条码识别

    目录 机器视觉 一 概述 机器视觉 二 机器视觉硬件技术 机器视觉 三 摄像机标定技术 机器视觉 四 空域图像增强 机器视觉 五 机器视觉与世界杯 机器视觉 六 频域图像增强 机器视觉 七 图像分割 机器视觉 八 图像特征提取 机器视觉 九
  • 摄像机标定到底是在干什么?

    2017年11月13日学习记录 机器视觉 1 摄像机标定概括 刚开始学机器视觉 我研究的方向主要是双目视觉测距 做机器视觉的肯定对摄像机标定并不陌生 我入坑一个月 开始就是看看书 论文 了解了大概流程和研究主要方法 无特别明确目的和压力 然
  • Ciclop开源3D扫描仪软件---Horus源码分析之src\horus\engine\calibration\autocheck.py

    c 光明工作室 2017 2037 COPYRIGHT 光明工作室团队成员大部分来自全国著名985 211工程院校 具有丰富的工程实践经验 本工作室热忱欢迎大家的光临 工作室长期承接嵌入式开发 PCB设计 算法仿真等软硬件设计 1 基于C8
  • 施努卡:基于深度学习的裂缝检测技术

    不同于传统的裂缝检测方法 基于深度学习的检测方法不需要人工干预 能自主学习有代表性的特征 直接对输入图像的裂缝进行检测 随着深度学习方法在许多应用场景中取得了很好的检测结果 国内众多研究人员也开始把基于深度学习的目标检测模型和语义分割模型用
  • opencv的安装、配置及所遇问题(Ubuntu16.04 + OpenCV3.4.2 + Python3.6)

    安装opencv对好多首次安装的开发者来说都是一场勇气和运气的较量 同样也是我在安装Ubuntu下安装过的众多软件包中最为波折的一款 在此记录安装过程中出现的各种error 幸运女神眷顾的安装顺序 1 安装ubuntu下的依赖项 sudo
  • 【毕业设计】机器视觉手势检测和识别系统 - python 深度学习

    文章目录 0 前言 1 实现效果 2 技术原理 2 1 手部检测 2 1 1 基于肤色空间的手势检测方法 2 1 2 基于运动的手势检测方法 2 1 3 基于边缘的手势检测方法 2 1 4 基于模板的手势检测方法 2 1 5 基于机器学习的
  • 机器视觉最火应用领域

    1 图像和视频识别 人工神经网络领域最重要的进展之一出自 ImageNet ImageNet收集了 1400 万标签图像并于2009年发布 ImageNet挑战赛要求参赛者设计一个能够跟人类一样对照片进行分类的算法 但一直没有出现获胜者 直
  • 图像加权运算

    import os import re import cv2 cv2 imshow image img 显示 cv2 waitKey 10000 停留 cv2 destroyAllWindows 关闭 from PIL import Ima

随机推荐

  • java stream 两个List<Map>合并

    new三条源数据 value值均为一个字 加入list Map
  • C++笔记(随时更新)

    一 string key str sort key begin key end 二 emplace back优于push back 能就地通过参数构造对象 不需要拷贝和移动内存 提升容器插入性能 三 swap nums i nums i 1
  • Python表白代码合集:用完这几种表白代码,找不到对象你来找我,这也太秀了吧❤️

    明天就七夕了 谁说程序员不懂浪漫 今天给大家分享几种有意思的表白代码 带你用Python 码 上七夕 话不多说 我们直接上代码 第一种 表白弹窗 先看效果 文字背景啥的 大家可以自定义一下 代码展示 20行代码实现弹窗 import tki
  • 特征工程(1)--特征工程是什么?

    机器学习领域的大神Andrew Ng 吴恩达 老师曾说 Coming up with features is difficult time consuming requires expert knowledge Applied machin
  • 乐高编程机器人编程有什么区别

    乐高编程机器人编程有什么区别 一直以来家长们对于孩子的学习重视程度可谓是相当的大 很多的家长会给孩子选择一些能够让孩子适应社会发展的课程 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 有的家长对于乐高编程机器人编程有什么区别并不清楚
  • 【Xgplayer】xgplayer基本使用

    文章目录 xgplayer简介 xgplayer官网 Xgplayer VS VideoJs xgplayer下载 播放器组件 使用播放器 效果图 推荐 xgplayer简介 开发团队 字节跳动 字节跳动出品 必属精品 xgplayer是一
  • VS2022编译GDAL库报错: LINK : error LNK2001: 无法解析的外部符号 _OSRValidate _OGR_G_GetPointCount _OGRRegisterAll

    目录 场景复现 解决方案 场景复现 使用VS2022的Native Tools command prompt for 2022工具编译GDAL库时 报 LINK error LNK2001 无法解析的外部符号 OSRValidate OGR
  • Pytorch入门实战(5):基于nn.Transformer实现机器翻译(英译汉)

    使用Google Colab运行 open In Colab 源码地址 文章目录 本文涉及知识点 本文内容 环境配置 数据预处理 文本分词与构造词典 Dataset and Dataloader 模型构建 模型训练 模型推理 本文涉及知识点
  • 数据库并发控制 事务调度 可串行调度

    所谓并发操作 是指在多用户共享的系统中 许多用户可能同时对同一数据进行操作 所带来的问题是数据的不一致性 具体表现为 丢失更新 不可重复读 读脏数据 1 事务调度 1 1 串行调度 Serial Schedule 是指多个事务依序串行执行
  • 华为手机上的网上邻居怎么用_HUAWEI Mate 8 网络邻居 使用教程

    本帖最后由 爱奔跑的蜗牛 于 2016 1 19 23 54 编辑 有根数据线 手机连接电脑传输管理文件算不上什么秘密 但总有那么一两天 忘记带数据线 又急需拷贝电脑文件到手机上 除了问别人借数据线 难道就不能 自力更生 了吗 当然不是 拥
  • 【华为OD机试真题 python】通信误码【2022 Q4

    题目描述 通信误码 信号传播过程中会出现一些误码 不同的数字表示不同的误码ID 取值范围为1 65535 用一个数组记录误码出现的情况 每个误码出现的次数代表误码频度 请找出记录中包含频度最高误码的最小子数组长度 输入描述 误码总数目 取值
  • Python编程的注意事项

    目录 一 异常处理 1 精细化地捕获异常 2 finally 块中的资源清理 3 抛出自定义异常 二 类的继承 1 不要过度使用继承 2 了解多重继承的问题 三 垃圾回收与内存管理 1 对象引用计数的概念 2 循环引用的问题 Python
  • Kubernetes中的PV和PVC

    K8s引入了一组叫作Persistent Volume Claim PVC 和Persistent Volume PV 的API对象 大大降低了用户声明和使用持久化Volume的门槛 在Pod的Volumes中 只要声明类型是persist
  • [1080]idea import引用报错

    从GIT上拉下代码后 出现这种情况 类正常 但是import是浅灰色 引用类有红色警告 代码中所有的引用都报错 重启idea 无效 删除引用的类与被引用的类中的代码 无效 重新加载maven 无效 最后 清理缓存后 恢复正常 File gt
  • 硬件系统工程师宝典(29)-----应用DC/DC要注意什么?

    各位同学大家好 欢迎继续做客电子工程学习圈 今天我们继续来讲这本书 硬件系统工程师宝典 上篇我们说到使用LDO时 除了要考虑输入 输出电压外 还要注意压差 最大输出电流等 今天我们来讲讲DC DC的应用分析 DC DC分类 将一个不受控的输
  • 台式电脑重装系统失败怎么办

    当大家使用一键重装系统软件给自己电脑重装系统的时候 都可能会遇到一些故障问题造成台式电脑重装系统失败的情况发生 那么大家遇到台式电脑重装系统失败怎么办呢 现在小编就教下大家相关的方法教程 大家一起来看看吧 工具 原料 系统版本 window
  • 【开源之美】nanomsg(2) :req/rep 模式

    req rep 模式显然就是类似http的应答模式 在某些基于短连接的进程间通讯方式上可以很方便的使用 下面我们举个例子 服务端 demo ifndef NANOMSGUTIL H define NANOMSGUTIL H include
  • [已解决] 数据库连接问题Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionExcept...

    我在学习SSM框架做一个小demo 时遇到了这个问题 具体的报错时 Error querying database Cause org springframework jdbc CannotGetJdbcConnectionExceptio
  • 真假难辨?来看看华为云区块链怎么搞定

    怎么证明你是你 你的合同是真合同 被骗 防被骗 怎么证明自己的证据是真实的 跑路 人间蒸发 怎么还原事实维护自己的合法产权 云 5G的普遍应用与流量平面化 促使数字化资产内容爆发式增长 数字合同 知识版权 书籍 视频 音乐 个人信息等在流通
  • FFT频谱分析原理

    FFT频谱分析原理 采样定理 采样频率要大于信号频率的两倍 N个采样点经过FFT变换后得到N个点的以复数形式记录的FFT结果 假设采样频率为Fs 采样点数为N 那么FFT运算的结果就是N个复数 或N个点 每一个复数就对应着一个频率值以及该频