快速傅里叶变换 (FFT) 谐波分析与可视化工具
项目介绍
本项目是一款基于 MATLAB 面向对象编程(OOP)架构设计的专业级信号处理工具。其核心目标是对离散时域信号进行精细化的频谱解算,通过快速傅里叶变换算法将复杂的波形数据转换为频率域表达。工具能够自动识别信号中的基波成分及各阶高次谐波,并精确计算其幅值、频率、相位及均方根(RMS)等关键参数,最终提供标准化的数据报告与专业的可视化图谱。该工具专为电力电子分析、信号质量评估以及通用数字信号处理研究而设计。
---
功能特性
- 多参数自动化提取:自动识别基波频率,并提取前10阶谐波的频率、峰值、相位及 RMS 值。
- 灵活的窗函数支持:内置矩形窗(Rectangular)、汉宁窗(Hanning)及汉明窗(Hamming),有效抑制频谱泄露。
- 高精度幅值修正:针对加窗处理过程中的相干增益损失进行自动补偿,确保频谱幅值的物理准确性。
- 总谐波失真计算:依据标准定义自动计算总谐波失真度(THD),定量评估信号质量。
- 三位一体可视化:集成时域波形图、频谱标识图、以及谐波能量占比条形图的综合展示功能。
---
实现逻辑与工作流程
程序采用了严谨的模块化处理流程,具体包含以下阶段:
- 信号仿真阶段:
程序预设了一个高频采样环境(10kHz),并构造了一个复杂的合成信号,包含50Hz基波、3/5/7次奇次谐波以及随机高斯白噪声,用于验证分析器的可靠性。
- 对象初始化与加窗:
创建分析器实例并指定采样频率与窗函数。程序将原始信号转化为列向量,根据信号长度生成对应的窗口系数,并对时域信号进行点乘加窗处理。
- 核心频域转换:
采用 2 的幂次(nextpow2)优化 FFT 计算点数。通过对双边频谱进行截断处理得到单边频谱,并根据窗函数的相干增益系数(窗口求和除以点数)进行幅值归一化,确保计算出的 Peak 幅值与原始物理信号一致。
- 谐波定位与修正算法:
首先通过频谱全局最大值定位基波频率。对于各阶高次谐波,程序并非简单采集固定点位,而是在理论谐波频率($k times f_0$)的上下 2% 带宽范围内进行局部搜索,寻找真实峰值,以此应对频率分辨率限制导致的频谱泄露问题。
- 结果封装与指标评估:
程序将所有识别出的各阶参数封装为 MATLAB 表格(Table)结构。同时,利用各阶谐波相对于基波的 RMS 值,按照平方和开根号的比例计算总谐波失真。
---
关键分析算法说明
- 窗函数补偿算法:代码中通过
sum(w) / L 计算窗函数的直流增益,并在 FFT 结果处理中应用该系数,解决了非矩形窗导致信号能量衰减的难题。 - 相位谱计算:程序提取了 FFT 后复数结果的辐角(angle),并将其转换为更具工程实用价值的角度(degree)单位。
- 谐波识别逻辑:
* 基波探测:排除了 DC 分量(频率轴第一项)的影响,搜索能量最强的分量。
* 智能点位检索:针对 $N_{FFT}$ 造成的频率刻度不完全重合问题,通过
min(abs(FreqAxis - targetF)) 寻找最接近的频谱索引,随后结合局部窗口搜索策略锁定最强能量点。
---
结果展示模块
可视化功能提供三个垂直排布的子图:
- 时域视图:自动选取信号的前 5 个周期进行展示,清晰展现波形的非线性畸变情况。
- 频域视图:以灰色曲线显示全频谱,并以红色火柴梗图(Stem)突出显示识别出的各阶谐波分量。
- 能量占比视图:以柱状图形式展现各阶谐波相对于基波幅值的百分比占比,并在柱体上方实时标注具体数值,便于快速识别主要的干扰源阶次。
---
系统要求
- 软件环境:MATLAB R2014b 或更高版本(需支持
classdef 面向对象语法及 table 数据类型)。 - 硬件建议:标准台式机或笔记本电脑,内存 4GB 以上。
- 依赖库:无需安装第三方工具箱,所有功能基于 MATLAB 核心语言与基础内置函数实现。