FFT将时域信号变换到频域里面的一些重要知识点记录

2023-10-28

 

一、FFT是离散傅立叶变换
    采样得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可以得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。
    假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位呢,就是在该频率下的信号的相位。
      第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。例如某点n所表示的频率为:Fn=(n-1)*Fs/N。由上面的公式可以看出,Fn所能分辨到频率为为Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。
       假设FFT(FFT变换完之后是复数形式a+bi,求模A=\sqrt{a^{2}+b^{2}}之后某点n用复数a+bi表示,那么这个复数的模就是An=根号a*a+b*b,相位就是Pn=atan2(b,a)。根据以上的结果,就可以计算出n点(n≠1,且n<=N/2)对应的信号的表达式为:
            An/(N/2)*cos(2*pi*Fn*t+Pn),即2*An/N*cos(2*pi*Fn*t+Pn)。

       对于n=1点的信号,是直流分量,幅度即为A1/N。    由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。    

二、实际的信号举例说明

       假设我们有一个信号,它含有2V的直流分量,频率为50Hz、相位为-30度、幅度为3V的交流信号,以及一个频率为75Hz、相位为90度、幅度为1.5V的交流信号。用数学表达式就是如下:

                          S=2+3*cos(2*pi*50*t-pi*30/180)+1.5*cos(2*pi*75*t+pi*90/180)

 

          我们以256Hz的采样率对这个信号进行采样,总共采样256点。按照我们上面的分析,Fn=(n-1)*Fs/N,我们可以知道,每两个点之间的间距就是1Hz,第n个点的频率就是n-1。我们的信号有3个频率:0Hz、50Hz、75Hz,应该分别在第1个点、第51个点、第76个点上出现峰值,其它各点应该接近0。实际情况如何呢?我们来看看FFT的结果的模值(FFT变换完之后是复数形式a+bi,求模A=\sqrt{a^{2}+b^{2}}如图所示。

                  



    从图中我们可以看到,在第1点、第51点、和第76点附近有比较大的值。我们分别将这三个点附近的数据拿上来细看:

1点: 512+0i
2点: -2.6195E-14 - 1.4162E-13i 
3点: -2.8586E-14 - 1.1898E-13i
50点:-6.2076E-13 - 2.1713E-12i
51点:332.55 - 192i
52点:-1.6707E-12 - 1.5241E-12i
75点:-2.2199E-13 -1.0076E-12i
76点:3.4315E-12 + 192i
77点:-3.0263E-14 +7.5609E-13i
   
    很明显,1点、51点、76点的值都比较大,它附近的点值都很小,可以认为是0,即在那些频率点上的信号幅度为0。接着,我们来计算各点的幅度值。分别计算这三个点的模值,
结果如下:
1点: 512
51点:384
76点:192

     按照公式,可以计算出直流分量为:512/N=512/256=2;50Hz信号的幅度为:384/(N/2)=384/(256/2)=3;75Hz信号的幅度为192/(N/2)=192/(256/2)=1.5。可见,从频谱分析出来的幅度是正确的。    然后再来计算相位信息。直流信号没有相位可言,不用管它。先计算50Hz信号的相位,atan2(-192, 332.55)=-0.5236,

结果是弧度,换算为角度就是180*(-0.5236)/pi=-30.0001。再计算75Hz信号的相位,atan2(192, 3.4315E-12)=1.5708弧度,换算成角度就是180*1.5708/pi=90.0002。可见,相位也是对的。根据FFT结果以及上面的分析计算,我们就可以写出信号的表达式了,它就是我们开始提供的信号。

                 

三、总结:

       假设采样频率为Fs,采样点数为N,做FFT之后,某一点n(n从1开始)表示的频率为:Fn=(n-1)*Fs/N;该点的模值除以N/2就是对应该频率下的信号的幅度(对于直流信号是除以N);该点的相位即是对应该频率下的信号的相位。相位的计算可用函数atan2(b,a)计算。atan2(b,a)是求坐标为(a,b)点的角度值,范围从-pi到pi。要精确到xHz,则需要采样长度为1/x秒的信号,并做FFT。要提高频率分辨率,就需要增加采样点数,这在一些实际的应用中是不现实的,需要在较短的时间内完成分析。解决这个问题的方法有频率细分法,比较简单的方法是采样比较短时间的信号,然后在后面补充一定数量的0,使其长度达到需要的点数,再做FFT,这在一定程度上能够提高频率分辨力。具体的频率细分法可参考相关文献。下面是上面例子的matlab算法

--------------------------------------------

close all; %先关闭所有图片
Adc=2;  %直流分量幅度
A1=3;   %频率F1信号的幅度
A2=1.5; %频率F2信号的幅度
F1=50;  %信号1频率(Hz)
F2=75;  %信号2频率(Hz)
Fs=256; %采样频率(Hz)
P1=-30; %信号1相位(度)
P2=90;  %信号相位(度)
N=256;  %采样点数
t=[0:1/Fs:N/Fs]; %采样时刻
%信号
S=Adc+A1*cos(2*pi*F1*t+pi*P1/180)+A2*cos(2*pi*F2*t+pi*P2/180);
%显示原始信号
plot(S);
title('原始信号');
figure;
Y = fft(S,N); %做FFT变换
Ayy = (abs(Y)); %取模
plot(Ayy(1:N)); %显示原始的FFT模值结果
title('FFT 模值');
figure;
Ayy=Ayy/(N/2);   %换算成实际的幅度
Ayy(1)=Ayy(1)/2;
F=([1:N]-1)*Fs/N; %换算成实际的频率值
plot(F(1:N/2),Ayy(1:N/2));   %显示换算后的FFT模值结果
title('幅度-频率曲线图');
figure;
Pyy=[1:N/2];
for i="1:N/2"
 Pyy(i)=phase(Y(i)); %计算相位
 Pyy(i)=Pyy(i)*180/pi; %换算为角度
end;
plot(F(1:N/2),Pyy(1:N/2));   %显示相位图

title('相位-频率曲线图');

 

本文转自:https://blog.csdn.net/zhouqt/article/details/52877641,非常感谢作者!

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

FFT将时域信号变换到频域里面的一些重要知识点记录 的相关文章

  • 数学知识---数论(质数和约数)

    文章目录 1 质数1 1质数的判定 试除法1 2分解质因数 试除法 1 3筛质数2 约数2 1试除法求约数2 2约数个数2 3约数之和2 4最大公约数 欧几里得算法 xff08 辗转相除法 xff09 1 质数 质数是针对所有大于1的自然数
  • 20201013 矩阵2范数matlab求解

    这里是引用n norm X 返回矩阵 X 的 2 范数或最大奇异值 该值近似于 max svd X 示例 n norm X p 返回矩阵 X 的 p 范数 其中 p 为 1 2 或 Inf https ww2 mathworks cn he
  • 多益网络校招笔试题

    马上要参加多益的笔试了 所以在网上找了一下多益的笔试题 原文 我感觉我想出了一个更简单的方法 时间复杂度O 1 如果有问题希望大家及时指正 题目如下 给定一个数x x gt 5 找到该数与3 4之间的关系 关系如下 x 3 n 4 m 然后
  • 常用的范数求导

    矢量范数的偏导数 L1范数不可微 但是存在次梯度 即是次微分的 L1范数的次梯度如下 x x 1 sign x begin equation begin aligned frac partial partial mathbf x mathb
  • 2023-9-11 高斯消元解异或线性方程组

    题目链接 高斯消元解异或线性方程组 include
  • FFT将时域信号变换到频域里面的一些重要知识点记录

    一 FFT是离散傅立叶变换 采样得到的数字信号 就可以做FFT变换了 N个采样点 经过FFT之后 就可以得到N个点的FFT结果 为了方便进行FFT运算 通常N取2的整数次方 假设采样频率为Fs 信号频率F 采样点数为N 那么FFT之后结果就
  • Acwing 893. 集合-Nim游戏

    Mex运算 设S表示一个非负整数集合 定义mex S 为求出不属于集合S的最小非负整数的运算 即 mex S min x x属于自然数 且x不属于S SG函数 在有向图游戏中 对于每个节点x 设从x出发共有k条有向边 分别到达节点y1 y2
  • 2023-9-8 求组合数(一)

    题目链接 求组合数 I include
  • 矩阵内积运算

    设有矩阵A a1 a2 a3 a4 和矩阵 B b1 b2 b3 b4 那么矩阵A与B的内积为 内积 a1 x b1 a2 x b2 a3 x b3 a4 x b4
  • 矩阵特征值与行列式、迹的关系

    矩阵特征值与行列式 迹的关系 from http www cnblogs com AndyJee p 3737592 html 矩阵的特征值之积等于矩阵的行列式 矩阵的特征值之和等于矩阵的迹 简单的理解证明如下 1 二次方程的韦达定理 请思
  • 简单博弈论(Nim游戏)

    891 Nim游戏 题目 提交记录 讨论 题解 视频讲解 给定 n 堆石子 两位玩家轮流操作 每次操作可以从任意一堆石子中拿走任意数量的石子 可以拿完 但不能不拿 最后无法进行操作的人视为失败 问如果两人都采用最优策略 先手是否必胜 输入格
  • Acwing-870. 约数个数

    N的任何一个约数都是d的形式 而且d每一项的指数都不同 所以N的约数与 1 k的取法是一致的 N的每一个约数都对应了 1 k的一种取法 不同的取法对应不同的约数 由算数基本定理 每一个数的因式分解是唯一的 只要因式分解不一样 那么这两个数就
  • Acwing-872. 最大公约数

    d a a b gt d ax by a b b a mod b 证明 a mod b a a b b a c b 注 为下取整符号 a b 记为c 所以 a b b a c b b a mod b 以下证明 a b b a c b 对于左
  • Acwing-873. 欧拉函数

    欧拉函数的证明使用了容斥原理 include
  • 浅谈对梯度下降法的理解

    浅谈梯度下降法 如果读者对方向导数和梯度的定义不太了解 请先阅读上篇文章 方向导数与梯度 前些时间接触了机器学习 发现梯度下降法是机器学习里比较基础又比较重要的一个求最小值的算法 梯度下降算法过程如下 1 随机初始值 2 迭代 直至收敛 表
  • 岭回归(Ridge Regression)及实现

    岭回归 Ridge Regression 及实现 https blog csdn net google19890102 article details 27228279 一 一般线性回归遇到的问题 在处理复杂的数据的回归问题时 普通的线性回
  • 4261. 孤独的照片

    数据范围为500 000 所以应该控制在O nlogn 或O n 我们发现要枚举的子串它其中有一个字母只出现一次 所以 我们可以去枚举只出现一次的字母是哪个 假设在第i个位置的字母为G 我们要枚举包含这个字母的 且只包含一个G的 且长度大于
  • 2023-9-11 拆分-Nim游戏

    题目链接 拆分 Nim游戏 include
  • Acwing-4366. 上课睡觉

    假设最终答案为每堆石子均为cnt个 cnt一定可以整除sum 石子的总数 我们可以依次枚举答案 sum小于等于10 6 所以cnt的数量等于sum约数的个数 10 6范围内 约数最多的数为720720 它的约数个数有240个 int范围内
  • Acwing-4729. 解密

    如果dt小于0 或者r不是整数 或者m r是奇数的话 m 2 与 m 2 的奇偶性相同 那么方程无解 输出NO include

随机推荐

  • 小程序获取当前时间戳

    使用Date parse new Date 默认生成的时间戳是以毫秒为单位的 可以根据业务需求 通过除以1000 来转化为秒 因为生成的时间戳末尾是000 所以不用担心不是整除 控制台打印 可在js中引用以下代码 var timeStamp
  • 如何优雅地回退代码

    如何优雅地回退代码 先介绍一下这种场景 我们一个项目从 N 版本升到 A 版本时引入了另一项目的 jar 包 又陆续发布了 B C 版本 但在 C 版本后忽然发现了 A 版本引入的 jar 包有极大的性能问题 B C 版本都是基于 A 版本
  • 【应急响应】网站入侵篡改指南&Webshell内存马查杀&漏洞排查&时间分析

    网站入侵篡改指南 Webshell内存马查杀 漏洞排查 时间分析 章节内容点 IIS NET 注入 基于时间配合日志分析 Apache PHP 漏洞 基于漏洞配合日志分析 弱口令 基于后门配合日志分析 Webshell查杀 常规后门 内存马
  • LongAdder类和AtomicInteger类

    voliate关键在保证可见性但是不保证原子性 多线程下还是有线程安全问题 不使用voliate情况下 使用voliate情况下 换成使用线程安全的类 也可以使用LongAdder类来实现线程安全 LongAdder类 在 LongAdde
  • springboot+vue上传至云服务后出现的跨域问题

    一 情况简介 在学习spring boot vue3前后端分离项目时 前期一直是用的自己电脑进行的开发及运行测试 当时就出现了跨域的问题 经过上网查询后在VUE中进行代理跨域的设置即可 但当我把前后端项目打包放到云服务上后却又出现了跨域的问
  • git命令之新建仓库

    一 配置git用户名 1 安装git 配置用户名和邮箱 git config global user name 你的用户名 git config global user email 你的注册邮箱 2 使用git config global
  • LangChain(6)构建用户自己的Agent

    构建用户自己的Agent 编写简单的计算工具 编写有多个参数的工具 其它更高级的工具 LangChain 中有一些可用的Agent内置工具 但在实际应用中我们可能需要编写自己的Agent 编写简单的计算工具 pip install qU l
  • OllyDBG 入门

    一 OllyDBG 的安装与配置 OllyDBG 1 10 版的发布版本是个 ZIP 压缩包 只要解压到一个目录下 运行 OllyDBG exe 就可以了 汉化版的发布版本是个 RAR 压缩包 同样只需解压到一个目录下运行 OllyDBG
  • Java入门扫盲

    j2ee那是原来的叫法 现在叫javaEE 以前的规范分为三种 j2se j2me j2ee 分别是基础平台 小型移动设备程序和企业级应用 现在javaEE开发称为web开发也行吧 javaEE框架太多了 例如 spring hiberna
  • IOS MDM流程

    http www mbaike net ios 1552 html 一 MDM资料下载 BH US 11 Schuetz InsideAppleMDM WP pdf MDM流程及资料最全的PDF文档 二 MDM流程整理 1 创建和部署htt
  • Win10激活(家庭版升级到专业版)带你5分钟解决

    作为一名计算机专业的学生 将自己的电脑激活到专业版是我们的必经之路 接下来的内容希望对在座的各位同学有帮助 一 误删密钥导致windows处于未激活状态的解决方法 点击 激活 疑难解答 升级到专业版后 需要产品密钥才能激活 二 最快速有效的
  • ios英语口语800句应用源码

    前几天突发奇想做了个很水的应用 名字叫chinese 800 汉语口语800句 现在让别人传上去了 正在传 今天又改了一下变成了英语口语800句 加了广告条 ui 没有优化 我随便整的两个图片 有人会ps的可以再优化一下ui 应用含800个
  • 盘点免费好用的5款思维导图工具

    在日常生活 学习和工作之中 我们难免会面对纷乱繁杂的知识或信息 运用思维导图对信息和内容进行整理 可以直接有效且高效地将散点链接成为相关联的 有逻辑的整体 当我们善用思维导图对这些内容进行分类梳理 自然而然我们的效率就会得到很大程度的提升
  • 玩转软路由 篇四:软路由中OpenWRT作为旁路由的安装设置教程

    开篇说一些仁者见仁智者见智的话 先声明 这只是代表我自己近期浅陋的看法 看到很多人玩路由器 刷各种固件 什么爱快 高格 老毛子 OpenWRT什么的 自己也折腾过 也在恩山论坛里下载各路大神的固件使用 作为一个小白 就自然而然想到 这么多固
  • 3.2 二维随机变量的边缘分布

    思维导图 学习目标 要学习二维随机变量的边缘分布 我可能会按照以下步骤进行学习 理解二维随机变量的概念和表示方法 包括联合分布函数和联合分布律等概念 理解二维随机变量的边缘分布的概念和意义 即在已知联合分布的情况下 如何求出单独一个随机变量
  • 前端Javascript,ES6常见面试题

    一 Javascript js数据类型 及检测 共8种常用的6种类型 基本类型 Number String Boolean undefined Null 引用类型 object function 不常用2种类型 Symbol bigInt
  • 浏览器手势识别原理

    以下内容转自 链接 https www zhihu com question 20607813 answer 1396981185 来源 知乎 Stroke 是作者的一款开源鼠标手势 支持复杂手势 对于这个问题 我觉得可以细分为这样两个子问
  • C/C++cmath库常用函数

    在一些计算题目中 我们常会用到求和 取绝对值以及求三角函数等代码 写出来需要耗费一番功夫 于是 C C 库中提供了一个包含各种计算函数的头文件 cmath库 C C 中的cmath头文件 C include
  • S_ISREG S_ISDIR 等几个常见的宏

    转自 http blog csdn net dssxk article details 6793370 S ISLNK st mode 是否是一个连接 S ISREG st mode 是否是一个常规文件 S ISDIR st mode 是否
  • FFT将时域信号变换到频域里面的一些重要知识点记录

    一 FFT是离散傅立叶变换 采样得到的数字信号 就可以做FFT变换了 N个采样点 经过FFT之后 就可以得到N个点的FFT结果 为了方便进行FFT运算 通常N取2的整数次方 假设采样频率为Fs 信号频率F 采样点数为N 那么FFT之后结果就