☰
基于傅里叶变换的电力系统谐波分析:从FFT原理到MATLAB工程实践
2026/10/28 20:58:22 网站建设 项目流程

简介:这份资源是东北电力大学电气工程学院的「信号与系统」课程专题报告,聚焦基于傅里叶变换的电力系统谐波分析,面向电气工程、自动化等专业学生及从事电能质量检测的技术人员,帮助理解谐波产生机理、危害与治理思路。报告从连续傅里叶级数出发推导各次谐波系数,讨论DFT与FFT在谐波测量中的实现及频谱泄漏、栅栏效应等问题,并结合加窗函数改进算法,最后在MATLAB中用FFT编程得到频谱图,涵盖谐波源分析、补偿抑制与滤波器选型等内容。压缩包为1个PDF文件,约452KB,结构完整、便于直接阅读与引用。目前已有985人学习,适合课程报告参考、谐波检测入门及MATLAB仿真思路借鉴。

1. 谐波分析:为什么一个“算频谱”的动作能决定电网安全

很多人第一次看到“基于傅里叶变换的电力系统谐波分析”这个题目,会以为它只是信号与系统课程里的一道大作业:给一段正弦波,套 FFT,画个频谱图,收工。但真正在电气工程现场待过的人知道,频谱图上那几根不该出现的柱子,背后可能是变压器过热、零线电流超标、电容器鼓包甚至保护装置误跳闸。谐波分析的本质,是把时域里看不见的波形畸变,翻译成频域里可量化、可定位、可治理的频率成分。傅里叶变换在这里不是数学装饰,而是整套治理链条的入口:只有先准确知道 3 次、5 次、7 次谐波各有多大,滤波器选型、电容串抗率、保护整定才有依据。这份课程专题报告的价值,就在于它把连续傅里叶级数、离散傅里叶变换、快速傅里叶变换这条链路,和 MATLAB 里的实际频谱计算接在了一起,让人能看到“公式怎么落到代码、代码又怎么落到工程判断”的完整路径。

2. 从傅里叶级数到 FFT:谐波系数到底是怎么被算出来的

2.1 周期信号为什么天然适合傅里叶级数分解

电力系统的电压和电流在稳态下近似为周期函数,满足狄利克雷条件,这就意味着它可以展开成一系列正弦、余弦函数的叠加。报告里给出的连续时间、离散频率那一组变换对,本质上就是傅里叶级数:周期为 (T_0) 的信号 (f(t)),其第 (k) 次谐波系数由

[ F(kf_0)=\frac{1}{T_0}\int_{0}^{T_0} f(t)e^{-j2\pi kf_0 t}dt ]

给出,其中 (f_0=1/T_0) 是基波频率,(k) 是谐波序号。这个式子的工程含义很直接:把周期信号和一个频率为 (kf_0) 的复指数做内积,内积结果的大小就代表该频率成分的强弱。基波 (k=1) 对应 50 Hz,(k=3) 对应 150 Hz,依此类推。之所以电力谐波分析普遍从这一层起步,是因为电网里的非线性负载——整流器、变频器、UPS——产生的畸变电流仍然是工频周期的,只是波形不再是纯正弦。傅里叶级数把“波形长什么样”转换成“各次谐波各占多少”,这是后续一切治理动作的前提。

常见的实现思路是:先确定基波周期,再在一个完整周期内对信号采样,然后用数值积分或离散求和近似上面的积分。报告里强调“电力系统中的电压与电流为周期函数,且满足狄利克雷条件”,就是在为这一步合法性做铺垫。如果信号不是周期的,或者在一个周期内不满足可积条件,级数展开就不成立,后面的谐波系数也就没有物理意义。

2.2 DFT 的离散化:把积分换成求和,代价是什么

连续傅里叶级数要在计算机上跑,必须做两件事:时间上离散化,频率上离散化。报告里把四种傅里叶变换形式列得很清楚,其中离散时间、离散频率那一组就是 DFT:

[ F(k)=\sum_{n=0}^{N-1} f(n)e^{-j2\pi nk/N} ]

这里的 (N) 是一个周期内的采样点数,(f(n)) 是第 (n) 个采样值。DFT 的物理意义可以理解成让数据样本通过一组梳状滤波器,每个滤波器的中心频率恰好落在各次谐波点上。理论上,只要采样频率和信号频率严格同步,各次谐波就能被准确分离。

但代价也很明显。DFT 需要做 (N^2) 量级的复数乘法和加法,当 (N) 取 512、1024 甚至更大时,计算量会迅速膨胀。报告里直言“巨大的运算量严重制约了离散傅里叶变换的实际应用”,这不是理论上的担忧,而是早期数字信号处理设备算力有限时的真实瓶颈。另一个代价来自离散化本身:时域截断和频域采样会引入频谱泄漏和栅栏效应,这一点在采样频率与信号频率不一致时尤其突出,相位误差往往比幅值误差更难接受。

2.3 基-2 FFT 的蝶形结构:计算量是怎么降下来的

FFT 没有在理论上突破 DFT,它做的是算法层面的重排。报告采用时间抽取法,把长度为 (N=2^L) 的序列按序号奇偶分成两组:

# 基-2 时间抽取 FFT 的分组思想(示意,非完整实现) # 原序列 f[n], n = 0,1,...,N-1 # 偶数序号子序列 f_even = [f[2*r] for r in range(N//2)] # 奇数序号子序列 f_odd = [f[2*r + 1] for r in range(N//2)] # 递归计算两个 N/2 点 DFT 后,用旋转因子 W_N^k 合并 # X[k] = E[k] + W_N^k * O[k] # X[k+N/2] = E[k] - W_N^k * O[k]

这段伪代码对应报告里的式 4-11 和 4-12。关键在最后两行:一个长度为 (N) 的 DFT 被拆成两个长度为 (N/2) 的 DFT,再用旋转因子 (W_N^k=e^{-j2\pi k/N}) 做加减合并。递归下去,复数乘法次数从 (N^2) 降到 ((N/2)\log_2 N) 量级。报告里说 FFT“主要以加法、减法以及延迟运算为主,伴以少量的乘法运算”,指的就是这种蝶形结构——每一级只做一次复数乘和两次复数加减,乘法被大量复用。

参数上要注意:基-2 FFT 要求 (N) 是 2 的整数次幂。报告附录里取 (N_1=512)、(N_2=1024),正是为了满足这个条件。如果采样点数不是 2 的幂,常见做法是补零到最近的 2 的幂,但补零只改变频域采样密度,不增加真实信息,这一点在解读频谱时容易被忽略。

2.4 采样定理与同步采样:为什么“采得够快”还不够

报告在讨论 FFT 误差时提到一个容易被轻视的点:即使采样频率满足奈奎斯特定理,由于不可能实现严格的同步采样,泄漏效应和栅栏效应仍然会影响频率、幅值和相位的准确度。奈奎斯特条件只保证不发生混叠,它不保证谐波系数准确。真正决定精度的是采样窗口是否覆盖整数个信号周期。

举个具体场景:工频 50 Hz,采样频率 3000 Hz,一个周期对应 60 个采样点。如果采样窗口取 512 点,实际覆盖的是 512/60≈8.53 个周期,不是整数。这时信号在窗口边界被硬截断,频域上就会产生泄漏,原本集中在 50 Hz 的能量会向邻近频点扩散,幅值读数偏低,相位误差更大。报告里说“尤其是相位的误差很大”,原因就在这里。工程上常见的补救手段是加窗函数,用汉宁窗、汉明窗或布莱克曼窗对截断后的样本做加权,让窗口两端的样本渐变为零,从而压低泄漏。加窗的代价是主瓣变宽、频率分辨率下降,所以窗型和窗长要根据实际谐波间隔来选,不是随便套一个就行。

3. 谐波治理的工程逻辑:滤波器为什么不是随便选一个

3.1 谐波危害的传导链:从电流到温度再到误动作

报告把谐波危害归成两大类:一类是导致电缆或变压器过热,另一类是导致电网上的其他设备误动作或性能降低。这两类现象看起来分散,但传导链是清晰的。谐波电流流过导体和铁芯,产生额外的铜损和铁损,热量累积导致绝缘老化;3 次谐波在零线上叠加,电流有效值接近相线的 1.7 倍,零线过热风险被显著放大;谐波电流流过电网阻抗产生谐波电压,这个电压再干扰 PLC、UPS、变频器等敏感设备,造成误动作。

理解这条传导链的意义在于:治理点选在哪里,取决于你想切断哪一段。如果只在变电所集中治理,末端设备附近的谐波电压可能仍然超标;如果只在单个非线性负载处分散治理,成本又会上升。报告提到“谁污染谁治理”的原则,倾向在非线性用电设备处分散治理,这是从源头切断传导链的思路。

3.2 降低谐波源含量:增加整流脉动数为什么有效

报告给出的第一个治理方向是从谐波源本身下手。以整流器为例,其特征频谱与脉动数 (P) 有关,谐波次数大致为 (kP\pm1),谐波电流幅值随次数升高而下降。脉动数从 6 增加到 12,最低次特征谐波从 5 次、7 次移到 11 次、13 次,而高次谐波的幅值通常更低,滤波也更容易。这就是“增加整流器脉动数”能降低谐波含量的原因。

同样的逻辑适用于变频器配套治理、选用同步电动机吸收部分谐波电流、以及防止并联电容器组对谐波放大。电容器组这一条尤其值得注意:电容器组和系统电感在某一频率上可能形成并联谐振,把该次谐波电流放大,危及电容器本身和附近设备。报告提到串联电抗器、把某些支路改为滤波器、限定电容器组投入容量,都是破坏谐振条件的工程手段。串抗率的选取不是拍脑袋,要根据系统短路容量和主要谐波次数核算,选错了反而可能把谐振点移到更危险的位置。

3.3 有源与无源滤波器:两种补偿思路的取舍

报告把滤波器分成有源和无源两大类,这个划分背后是两种完全不同的补偿哲学。无源滤波器由 L、C 元件构成谐振回路,在某一频率呈现低阻抗,把该次谐波电流“吸”过来。它投资少、结构简单、运行可靠、维护方便,但滤波特性受系统参数影响,对某些次谐波有放大可能,体积也大。有源滤波器则是检测高次谐波,再注入与谐波成分相反相位的电流,实现实时补偿。它可控性好、响应快、能自动跟踪变化的谐波,还能避免与系统阻抗发生谐振,但受电力电子器件耐压和额定电流限制,成本高、结构复杂。

这里的取舍不是“有源一定比无源好”。无源滤波器适合谐波成分稳定、次数固定的场合,比如大型整流设备的特征谐波治理;有源滤波器适合谐波成分随负载变化、需要动态跟踪的场合。实际工程里常见混合方案:无源支路承担主要固定次谐波,有源部分补足动态变化和低次谐波。报告没有展开混合方案,但从它列出的优缺点可以自然推出这个方向。

4. MATLAB 实现拆解:频谱图上的每个参数都不是摆设

4.1 采样参数怎么定:fs、N 与频率分辨率的关系

报告附录的程序里,fs=3000、N1=512、N2=1024,这几个数不是随手写的。采样频率 3000 Hz 对应奈奎斯特频率 1500 Hz,足以覆盖到 25 次以内的工频谐波。频率分辨率由 (f_s/N) 决定:512 点时约 5.86 Hz,1024 点时约 2.93 Hz。分辨率越高,越容易把相邻的谐波和间谐波分开,但窗口时间也越长,实时性越差。

fs = 3000; % 采样频率,奈奎斯特频率 1500 Hz N1 = 512; % 采样点数,决定频率分辨率 fs/N1 n1 = 0:N1-1; t = n1/fs; % 时间轴 x = sin(2*pi*t*50); % 50 Hz 基波信号

这段代码构造了一个纯 50 Hz 正弦。t=n1/fs的时间步长是 1/3000 秒,512 点覆盖约 0.1707 秒,对应 8.53 个工频周期,不是整数周期。这就是后面频谱泄漏的根源。如果想让窗口覆盖整数周期,可以把采样点数改成 600 的整数倍,或者调整采样频率,让 (N/f_s) 等于工频周期的整数倍。

4.2 幅值谱为什么要乘 2/N

y = fft(x); % 对时域信号做 FFT plot(n1/N1*fs, abs(y)*2/N1); % 幅值谱,横轴换算成 Hz xlim([0 2000]); xlabel('频率/Hz'); ylabel('振幅'); title('原始振幅谱');

fft(x)输出的是复数频谱,abs(y)取模得到幅值。乘2/N1是为了把 FFT 结果换算成单边幅值谱:对于实信号,正负频率对称,单边谱只取正频率部分,能量要乘 2;除以 (N_1) 是归一化,让幅值回到原始信号的物理量纲。横轴n1/N1*fs把频点索引换算成频率,第 (k) 个点对应 (k f_s/N_1) Hz。

这里有个常见误用:直接画abs(y)不归一化,得到的幅值和原始信号幅值对不上,然后误以为 FFT 算错了。实际上 FFT 本身没有错,错在没做单边谱换算。另一个误用是忘记xlim,把负频率部分也画出来,频谱看起来对称,读图时容易把负频率的镜像当成真实谐波。

4.3 加噪声与频域滤波:为什么在频域置零再 IFFT

x1 = awgn(x, 0, -10); % 加入噪声,信噪比参数按场景设定 y1 = fft(x1); f1 = 100; f2 = 500; % 要滤除的频率上下限 yy = zeros(1, length(y1)); for m = 0:N1-1 freq = m/(N1/fs); % 当前频点对应的频率 if (freq > f1 && freq < f2) || (freq > fs-f2 && freq < fs-f1) yy(m+1) = 0; % 目标频段置零 elseif m < 511 yy(m+1) = y1(m+1); % 其余频点保留 end end

这段循环做的是频域带阻:把 100 Hz 到 500 Hz 之间的频点置零,同时处理大于奈奎斯特频率的镜像频段。置零后做ifft回到时域,就得到滤波后的波形。报告里用这个流程演示“含噪声波形滤波后得到基波频谱图,再反变换得到波形图”。

参数上要注意两点。第一,f1、f2的选择要和目标谐波对应,如果只想保留 50 Hz 基波,阻带应该覆盖 100 Hz 以上;如果想滤掉某几次特定谐波,阻带要按次数精确设置。第二,频域硬置零相当于理想矩形滤波器,时域会产生振铃,实际工程里更常用平滑过渡的窗函数或设计好的数字滤波器。报告用硬置零是为了演示原理,不是推荐直接用于精密测量。

提示:频域置零后做 IFFT,得到的时域信号可能出现非因果的预振铃,这是理想滤波的固有现象,不是程序写错了。

5. 避坑与排查:谐波分析里最容易翻车的几个地方

5.1 频谱幅值对不上原始信号

现象:构造一个幅值为 1 的 50 Hz 正弦,FFT 后峰值显示不是 1,而是接近 (N/2) 或别的数。原因:没有做单边谱归一化,abs(y)直接画图。解决:实信号取正频率部分乘 2 再除以 (N),即abs(y)*2/N,并且只画前 (N/2) 个点。

5.2 谐波峰值出现在错误的频率上

现象:明明输入 50 Hz,频谱峰值却偏到 48 Hz 或 52 Hz 附近。原因:频率轴换算写错,或者采样频率、采样点数与实际时间轴不一致。解决:统一用f = k*fs/N换算频点,检查t=n/fs的时间步长是否和fs对应,避免把索引当频率用。

5.3 相位误差大得离谱

现象:幅值谱看起来正常,但反算相位时和理论值差很多。原因:采样窗口不是整数个周期,频谱泄漏对相位的影响比对幅值更敏感;或者加窗后没有做相位补偿。解决:优先调整采样参数让窗口覆盖整数周期;必须加窗时,记录窗函数类型并在相位计算中补偿窗函数带来的相移。

5.4 滤波后波形两端出现异常振荡

现象:频域置零再 IFFT,时域波形在首尾出现明显振铃。原因:理想矩形滤波器的冲激响应是 sinc 函数,具有无限长拖尾,硬截断和硬置零都会引入吉布斯现象。解决:改用平滑过渡的频域窗,或者在时域设计 FIR/IIR 滤波器;如果只是演示原理,接受振铃但不要把它当成真实信号成分。

5.5 补零后误以为频率分辨率提高了

现象:把 512 点补零到 4096 点,频谱看起来更密,误以为能分辨更近的谐波。原因:补零只是在频域插值,增加了显示点数,没有增加真实观测时间,真实分辨率仍由原始采样时长决定。解决:需要更高频率分辨率时,增加实际采样点数或延长采样时间,而不是只补零。

6. 设计取舍:为什么“算得准”和“算得快”永远在打架

谐波分析这套东西,越往底层看,越会发现它不是一个纯算法问题,而是一组互相牵制的工程取舍。傅里叶级数要求周期性和完整周期,DFT 要求离散化和有限长度,FFT 要求点数是 2 的幂,加窗能压泄漏但会降低分辨率,频域滤波简单直观但会带来振铃,有源滤波器动态性能好但成本高,无源滤波器便宜可靠但怕系统参数变化。每一个选择都在“精度、速度、成本、鲁棒性”这四个维度上做权衡,没有哪一套参数能通吃所有场景。

我自己的习惯是,每次拿到一段谐波数据,先不急着看频谱图,而是先确认三件事:采样窗口覆盖了多少个工频周期、采样频率和奈奎斯特频率的关系、有没有加窗以及加的是什么窗。这三件事决定了频谱图上哪些峰是真实的、哪些是泄漏出来的、哪些是补零插值出来的。报告里那句“即使采样频率满足奈奎斯特定理,由于不可能实现严格的同步采样,泄漏效应以及栅栏效应也必将会影响采用 FFT 算法所算出的电气参数”,说的就是这件事——奈奎斯特只是底线,不是精度保证。

再往深一层,谐波治理的取舍还体现在治理点的选择上。集中治理省事,但末端设备可能仍然受影响;分散治理精准,但设备数量和成本上升。报告倾向“谁污染谁治理”,这个原则在工程上合理,但落地时要考虑非线性负载的分布、系统阻抗的变化、以及未来扩容的可能性。滤波器选型也不是越贵越好,无源滤波器在特征谐波稳定的场合性价比很高,有源滤波器更适合谐波成分动态变化的场景。真正难的不是算出一个频谱,而是根据频谱判断该在哪一层、用哪种手段、花多少成本去治理。

从那以后我每次做频谱分析,都会先把采样参数和窗函数在纸上写一遍,再回头看代码输出,避免被一张漂亮的频谱图带偏。希望这份拆解能帮到你,让你下次看到 FFT 结果时,不只看峰值在哪,还能追问一句:这个峰值,是真的吗?

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询