当前位置: 首页 > news >正文

FFT 工程关键点总结(采样分辨率 / 频点 / 相位)

本文只讨论 FFT 在嵌入式与工程中的实际含义,不涉及数学推导。


一、采样分辨率是什么?

1. 先定义所有变量(很重要)

符号含义
fs采样率(Hz),每秒采样多少次
NFFT 点数(一次参与 FFT 的采样点数量)
T采样时间长度(秒)
Δf频率分辨率(Hz)

2. 它们之间的关系

采样时间长度
T = N / fs
  • N个点
  • 每秒采fs
  • 一共覆盖T秒的数据

频率分辨率
Δf = 1 / T = fs / N

含义:

FFT 能区分的最小频率间隔


3. 工程本质结论

  • fs决定你能看到多高的频率
  • N决定你看了多久
  • Δf决定你能分多细

频率分辨率的本质是:采样时间长度,而不是采样率本身


二、FFT 频点对应的是什么?

1. 再定义变量

符号含义
kFFT 频点序号(整数,从 0 开始)
Δf频率分辨率(Hz)
f(k)k个频点所代表的实际频率(Hz)

2. 频点与频率的对应关系

f(k) = k × Δf

含义:

  • FFT 并不是“算出一个频率”
  • FFT 是把频率范围按 Δf 分成很多桶
  • k个桶的中心频率是k × Δf

3. 具体工程例子

已知条件
fs = 2048 Hz N = 1024
计算
T = N / fs = 0.5 s Δf = fs / N = 2 Hz
对应关系
k = 0 → 0 Hz k = 1 → 2 Hz k = 2 → 4 Hz k = 25 → 50 Hz

可以理解为:1 个频点代表 2 Hz 宽度的频率区间


4. FFT 能不能“算准”的唯一判断条件

定义变量
符号含义
f_sig实际信号频率(Hz)
判断条件
f_sig / Δf = 整数
  • ✔ 是整数 → 能量集中在一个频点
  • ✘ 不是整数 → 能量分散到多个频点(频谱泄漏)

三、FFT 中的相位是怎么计算的?

1. FFT 输出数据的含义

FFT 在每个频点k上输出一个复数:

X[k] = Re[k] + j · Im[k]
符号含义
X[k]k个频点的 FFT 结果
Re[k]实部
Im[k]虚部
j虚数单位

2. 相位的计算方式

φ[k] = atan2( Im[k], Re[k] )
符号含义
φ[k]k个频点的相位(弧度)
atan2()四象限反正切函数

3. FFT 相位的真实物理意义

FFT 计算得到的相位表示的是:

该频率分量,相对于“采样起点”的相位

其中:

项目说明
采样起点DMA 开始采样的第一个点
相位零点并不是信号的物理零相位

4. 为什么单通道 FFT 相位通常没意义?

因为相位包含:

  • 采样起点偏移
  • 滤波器群延时
  • ADC / 数字链路延时

所以:

单通道 FFT 相位 → 只用于稳定性判断

5. 工程中“有意义的相位”

① 通道间相位差
符号含义
φ1通道 1 的相位
φ2通道 2 的相位
Δφ = φ2 − φ1

② 谐波相对基波相位
符号含义
φ1基波相位
φn第 n 次谐波相位
Δφn = φn − n · φ1

四、工程最终结论(纯结论版)

采样时间 T = N / fs 频率分辨率 Δf = 1 / T = fs / N 频点频率 f(k) = k × Δf FFT 能否算准:f_sig / Δf 是否为整数 FFT 相位只能使用“相对相位”

五、一句话总结

FFT 的本质是:用 N/fs 秒的数据,把频率按 fs/N 分桶;
是否准确,只取决于你看得够不够久,以及频率是否对齐桶中心。

http://www.jsqmd.com/news/109936/

相关文章:

  • AI应用架构师视角:企业数据中心合作伙伴的选择策略
  • 不止于 Dify:为什么我在部署私有 LLM 时选择了它?
  • 内网穿透工具新选择:这款免费工具如何让远程访问变得简单高效
  • 上海样册设计指南,打造触动人心的视觉叙事
  • QCoreApplication::aboutToQuit
  • KotaemonLeetCode刷题伴侣:思路提示与优化建议
  • 基于python的搜索引擎设计与实现(源码+文档)
  • Kotaemon能否用于在线教育答疑?学生反馈积极
  • Kotaemon能否用于招投标文件比对?商务应用探索
  • EmotiVoice语音合成在艺术装置中的声音叙事设计
  • Qt跨线程安全通信指南
  • 【AI平台核心架构设计】
  • Kotaemon诗歌生成实验:古典诗词风格模仿
  • 基于SpringBoot+Vue的航班进出港管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • QObject::startTimer: Timers can only be used with threads started with QThread
  • Kotaemon社区活跃度调查:GitHub星标增长趋势分析
  • Kotaemon支持LDAP目录服务集成吗?组织架构同步
  • 向量数据库常用SQL语句
  • 47、深入了解 NNTP 协议及其应用
  • Kotaemon与LangChain对比:谁更适合生产环境?
  • Kotaemon能否用于图书馆检索?公共文化服务创新
  • 批量将 Word 文档重命名为其标题
  • 我发现动态病例生成补足医学教育短板,三甲医院培训效率翻倍
  • 我发现扩散模型生成合成基因数据,罕见病跨境早筛灵敏度翻倍
  • Conreg:Rust生态的轻量配置与注册中心
  • 为什么我们需要补充欧米伽-3?海豹油的全面营养成分解析
  • KotaemonAPI文档生成:Swagger/YAML自动填充
  • 【项目实战】md 是标准纯文本标记语言,mdx 是其扩展格式(融合 JSX/组件能力)
  • 10、TCP/IP 网络配置全攻略
  • Kotaemon前缀缓存机制:加速重复查询响应