快速傅里叶FFT变换
目录一、概述二、FFT结果的物理意义1、FFT讲解2、实例讲解3、总结4、Matlab测试程序三、理解离散傅立叶变换参考1、DFT、DFS、FFT区别2、名词解释一、概述DFS 是周期序列的离散傅里叶级数DTFT 是非周期序列的傅里叶变换称离散时间傅里叶变换其频谱是连续的函数DFT 是有限长序列的离散傅里叶变换是对其 DTFT 的等间隔抽样是离散的频谱。DFT 是 DFS 的主值序列是非周期的。而 DFS 是 DTFT 的频域内的抽样。FFT 是 DFT 的一种高效快速算法也称作快速傅里叶变换。二、FFT结果的物理意义1、FFT讲解FFT 是离散傅立叶变换DTF的快速算法可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的但是如果变换到频域之后就很容易看出特征了。这就是很多信号分析采用 FFT 变换的原因。另外FFT 可以将一个信号的频谱提取出来这在频谱分析方面也是经常用的。虽然很多人都知道 FFT 是什么可以用来做什么怎么去做但是却不知道 FFT 之后的结果是什意思、如何决定要使用多少点来做 FFT。现在就根据实际经验来说说 FFT 结果的具体物理意义。一个模拟信号经过 ADC 采样之后就变成了数字信号。采样定理告诉我们采样频率要大于信号频率的两倍这些我就不在此罗嗦了。采样得到的数字信号就可以做 FFT 变换了。N个采样点经过 FFT 之后就可以得到 N个点的 FFT 结果。为了方便进行 FFT运算通常 N 取 2 的整数次方。假设采样频率为 Fs信号频率为 F采样点数为 N。那么FFT 之后结果就是一个为 N点的复数。每一个点就对应着一个频率点。这个点的模值就是该频率值下的幅度特性。具体跟原始信号的幅度有什么关系呢假设原始信号的峰值为 A那么 FFT 结果的每个点除了第一个点直流分量之外的模值就是 A 的 N/2倍。而第一个点就是直流分量它的模值就是直流分量的 N倍。而每个点的相位呢就是在该频率下的信号相位。第一个点表示直流分量即0Hz而最后一个点N的再下一个点实际上这个点是不存在的这里是假设的第N1个点也可以看做是将第一个点分做两半分另一半移到最后则表示采样频率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 之后某点n 用复数abi 表示那么这个复数的模就是 An √(a*ab*b)相位就是 Pn atan2(b,a)。根据以上的结果就可以计算出 n点n ≠ 1且n ≤ N/2对应的信号的表达式为An/(N/2)*cos(2*pi*Fn*tPn)即 2*An/N*cos(2*pi*Fn*tPn)。对于 n 1点的信号是直流分量幅度即为 A1/N。由于FFT结果的对称性通常我们只使用前半部分的结果即小于采样频率一半的结果。2、实例讲解假设我们有一个信号它含有 2V 的直流分量频率为 50Hz、相位为 -30°、幅度为 3V 的交流信号以及一个频率为 75Hz、相位为 90°、幅度为 1.5V 的交流信号。数学表达式Signal 23*cos(2*pi*50*t-pi*30/180)1.5*cos(2*pi*75*tpi*90/180)。式中 cos 参数为弧度所以 -30° 和 90° 要分别换算成弧度。我们以 256Hz 的采样率对这个信号进行采样总共采样 256点。按照我们上面的分析Fn (n-1)*Fs/N我们可以知道每两个点之间的间距就是 1Hz第n个点的频率就是 n-1。我们的信号有 3个频率0Hz、50Hz、75Hz应该分别在第1个点、第51个点、第76个点上出现峰值其它各点应该接近 0。实际情况如何呢我们来看看 FFT 的结果的模值如图所示。图2.2.1 时域到频域变换图2.2.2 各个频域幅值从图中我们可以看到在第1点、第51点、和第76点附近有比较大的值。我们分别将这三个点附近的数据拿上来细看1点 5120i2点 -2.6195E-14 - 1.4162E-13i3点 -2.8586E-14 - 1.1898E-13i……50点-6.2076E-13 - 2.1713E-12i51点332.55 - 192i52点-1.6707E-12 - 1.5241E-12i……75点-2.2199E-13 -1.0076E-12i76点3.4315E-12 192i77点-3.0263E-14 7.5609E-13i很明显1点、51点、76点的值都比较大它附近的点值都很小可以认为是 0即在那些频率点上的信号幅度为 0。接着我们来计算各点的幅度值。分别计算这三个点的模值结果如下1点 51251点38476点192按照公式可以计算出直流分量为512/N 512/256 250Hz信号的幅度为384/(N/2) 384/(256/2) 375Hz信号的幅度为 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 结果以及上面的分析计算我们就可以写出信号的表达式了它就是我们开始提供的信号。3、总结假设采样频率为 Fs采样点数为 N做 FFT 之后某一点nn从1开始表示的频率为Fn (n-1)*Fs/N该点的模值除以 N/2 就是对应该频率下的信号的幅度对于直流信号是除以N该点的相位即是对应该频率下的信号的相位。相位的计算可用函数atan2(b,a) 计算。atan2(b,a) 是求坐标为 (a,b)点的角度值范围从 -ππ。要精确到 xHz则需要采样长度为 1/x秒的信号并做 FFT。要提高频率分辨率就需要增加采样点数这在一些实际的应用中是不现实的需要在较短的时间内完成分析。解决这个问题的方法有频率细分法比较简单的方法是采样比较短时间的信号然后在后面补充一定数量的 0使其长度达到需要的点数再做 FFT这在一定程度上能够提高频率分辨力。具体的频率细分法可参考相关文献。使用Excel进行傅里叶变换傅里叶变换FFT基于Excel。4、Matlab测试程序close all; %先关闭所有图片 Adc2; %直流分量幅度 A13; %频率F1信号的幅度 A21.5; %频率F2信号的幅度 F150; %信号1频率(Hz) F275; %信号2频率(Hz) Fs256; %采样频率(Hz) P1-30; %信号1相位(度) P290; %信号相位(度) N256; %采样点数 t[0:1/Fs:N/Fs]; %采样时刻 %信号 SAdcA1*cos(2*pi*F1*tpi*P1/180)A2*cos(2*pi*F2*tpi*P2/180); %显示原始信号 plot(S); title(原始信号); figure; Y fft(S,N); %做FFT变换 Ayy (abs(Y)); %取模 plot(Ayy(1:N)); %显示原始的FFT模值结果 title(FFT 模值); figure; AyyAyy/(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 i1:N/2 Pyy(i)phase(Y(i)); %计算相位 Pyy(i)Pyy(i)*180/pi; %换算为角度 end; plot(F(1:N/2),Pyy(1:N/2)); %显示相位图 title(相位-频率曲线图);三、理解离散傅立叶变换理解离散傅立叶变换一. 傅立叶变换的由来理解离散傅立叶变换二. 实数形式离散傅立叶变换理解离散傅立叶变换三.复数理解离散傅立叶变换四. 复数形式离散傅立叶变换参考1、DFT、DFS、FFT区别2、名词解释1采样频率单位时间一般1秒内采样点数2带宽指的是信号的主体占据的频率范围3频率分辨率分辨两个不同频率信号的最小间隔所以信号越长分辨率越好T就是采样前模拟信号的时间长度。我与春风皆过客你携秋水揽星河。觉得不错动动发财的小手点个赞哦

相关新闻

2021年中青杯数学建模C题在线教学的分析与研究求解全过程论文及程序

2021年中青杯数学建模C题在线教学的分析与研究求解全过程论文及程序

2021年中青杯数学建模 C题 在线教学的分析与研究 原题再现:随着教育信息化的发展,在线教学与传统教学深度融合已成为必然趋势。多媒体课件的展示,或MOOC教学在高校中已经是非常常见的一种教学模式。在线教学智能教室的建设,正在不…

2026/10/13 17:38:05 阅读更多 →
2026论文AI工具真实排名[特殊字符]不吹不黑|定稿直接照抄选

2026论文AI工具真实排名[特殊字符]不吹不黑|定稿直接照抄选

写论文别再乱选AI工具了!2026高校AIGC检测全面升级,很多热门AI看着好用,实则高危、造假、泄露、格式翻车,一用就延毕。我把目前全网最火的几款论文AI全部实测完毕,不营销、不吹捧,按「初稿可用/辅助能用/定…

2026/10/13 14:54:09 阅读更多 →
AI编码时代的集体焦虑:从“程序员“到“审核员“,我们在失去什么?

AI编码时代的集体焦虑:从“程序员“到“审核员“,我们在失去什么?

AI编码时代的集体焦虑:从"程序员"到"审核员",我们在失去什么? 2026年初至今,软件工程领域经历了一场前所未有的工作流变革。Evan Schwartz 在 8 月 5 日发布了一篇文章《Notes from the AI Coding Transition…

2026/10/6 4:53:34 阅读更多 →

最新新闻

linux-dash 全局 CSS 层解析:main、plugins-container、tables 如何撑起一套极简监控面板样式

linux-dash 全局 CSS 层解析:main、plugins-container、tables 如何撑起一套极简监控面板样式

运维观测指标监控监控大盘 【免费下载链接】linux-dash A beautiful web dashboard for Linux 项目地址: https://gitcode.com/gh_mirrors/li/linux-dash 点击查看 免费下载 本文以 src/css/README.md 中描述的"全局基础样式文件"(Global CSS…

2026/10/14 2:23:24 阅读更多 →
10.5 GHz 相控阵雷达开源了:四块板与 10 层混压 PCB 拆解

10.5 GHz 相控阵雷达开源了:四块板与 10 层混压 PCB 拆解

10.5 GHz 相控阵雷达开源了:四块板与 10 层混压 PCB 拆解 【免费下载链接】PLFM_RADAR Open-source, low-cost 10.5 GHz PLFM phased array RADAR system 项目地址: https://gitcode.com/GitHub_Trending/pl/PLFM_RADAR 如果告诉你,一套 16 通道 …

2026/10/14 2:23:24 阅读更多 →
Matlab findpeaks峰值检测:参数调优与实战避坑指南

Matlab findpeaks峰值检测:参数调优与实战避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 2:23:24 阅读更多 →
Java小白如何三天速通redis?

Java小白如何三天速通redis?

大家都知道Redis的业务范围是非常广的,但是对于刚入行的小伙伴来说可能也就知道个缓存跟分布式锁。因为Redis的很多功能在一些小企业里,根本是用不到的,得等到并发量到了一定的程度,系统扛不住了,才会用到Redis那些高级…

2026/10/14 2:23:24 阅读更多 →
Viper 回连过滤(Handler Firewall):按 IP 精准管控监听回连的实战指南

Viper 回连过滤(Handler Firewall):按 IP 精准管控监听回连的实战指南

文档教程网络安全 【免费下载链接】Viper Adversary simulation and Red teaming platform with AI 项目地址: https://gitcode.com/gh_mirrors/vip/Viper 点击查看 免费下载 Viper 的**回连过滤(Handler Firewall)**是内置在监听器&#xf…

2026/10/14 2:23:24 阅读更多 →
A*算法在路径规划中的原理与实践优化

A*算法在路径规划中的原理与实践优化

1. 路径规划中的A*算法初探第一次接触A算法是在开发仓库机器人导航系统时。当时我们尝试了Dijkstra、深度优先搜索等各种路径规划方法,要么计算时间太长,要么找到的路径不够优化。直到一位同事推荐了A算法,测试效果令人惊艳——在100x100的网…

2026/10/14 2:22:24 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →