news 2026/10/14 7:25:37

基于多二阶广义积分器的电网谐波提取与复现方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于多二阶广义积分器的电网谐波提取与复现方法

做电能质量方向这些年,我几乎每隔一段时间就会遇到同一类需求:把电网里的某个谐波分量单独抽出来,然后要么在控制回路里把它补偿掉,要么把它还原成可用的测试波形。最近完成的这个“基于多二阶广义积分器的电网谐波提取与复现”项目,就是围绕这个需求展开的。项目核心是M-SOGI(Multiple Second Order Generalized Integrator),也就是多条彼此独立的二阶广义积分器并行工作,从同一个电网信号里分别锁定不同次数的谐波分量,同时产出幅值、相位和还原波形。整套链路跑通之后,既可以用在谐波补偿这类工程场景,也可以把特定次谐波重新合成输出,用于测试、校准或科研复现。如果你正准备处理“从混合信号里精准抓取多个频点分量”这类问题,这篇文的内容大概率能帮你少走几段弯路。

1. 项目背景与选型逻辑

1.1 谐波提取到底解决什么问题

电网里的谐波来源几乎不用刻意找:变频器、PWM整流器、充电桩、LED驱动这类非线性负荷,都会让输入电流不再是干净的正弦波。我处理过的一个现场案例里,母线电流的谐波主要是5次、7次和11次,三次到九次都有。问题不在于知道“有没有谐波”,而在于很多应用场景需要实时知道某一个谐波分量的瞬时幅值和相位,并且要随时跟进它的变化。

比如有源电力滤波器,它必须在几个毫秒内知道负载谐波电流的相位,才能反相位注入补偿电流;再比如并网逆变器做谐波抑制时,需要区分电网背景谐波和自身产生的谐波,这同样要在线提取。这类工作不像离线频谱分析那样给出一整张频谱图就行,而是要把选定次数的谐波从混合信号里持续分离出来,再参与到控制闭环或复现环节中。谐波提取的核心价值就在这里:它不是在“看”谐波,而是在“用”谐波。

1.2 几种常见技术路线的对比

做提取方案时,我最初同时评估了FFT滑窗、瞬时无功功率法和M-SOGI三条路线。FFT滑窗最大的问题是窗长与时滞天生绑在一起:想要频率分辨率高,窗就得长,窗长一长,谐波幅值突变时检测结果响应就慢。实际测试里,同样一个5次谐波从2%跳到8%,FFT滑窗的响应时间通常要100ms以上,对补偿类应用偏慢了。

瞬时无功功率法在三相系统里很成熟,通过Clark变换把abc转到αβ,再用Park变换转到dq,低通之后取到基波有功和无功,用总电流减去基波得到谐波。这条路在大多数APF里都能用,但它给出的谐波是“总谐波整体”,想再拆出5次、7次各自的幅值和相位,还得再套带通滤波器或多步变换,结构会绕。

多SOGI方案最吸引我的点,是它对“指定次数的谐波”有天然的针对性。每个SOGI就是一台中心频率可调的带通谐振器,想要5次就把中心设在250Hz,想要7次就设在350Hz,彼此之间是并联结构,互不占用窗长,谐波数据一拍就能得到。算下来计算量不大,DSP上用固定点或者浮点都能扛,配合锁频环还能跟踪电网频率漂移。综合比较,我最终选了多SOGI作为主骨架。

1.3 项目的技术目标

定方案的时候,我把技术指标写得很具体,不然后面做验证会变成“感觉差不多就行”。当时定下的目标包括:输入为单相或三相50Hz电网信号,采样率10kHz;待提取谐波为5次、7次、11次、13次;各通道稳态幅值误差小于2%、相位误差小于1度;从阶跃突变到稳态的调节时间控制在100ms以内;复现输出能够手动设定谐波次数、幅值和相位延迟;整个算法在普通数字信号处理器上运行周期不超过200微秒。

这几个数字不是随便拍的。小于1度的相位误差在APF补偿时基本能满足要求,超过这个值补偿后有残留;100ms调节时间对多数谐波治理场景够用,但对快速动态过程仍偏慢,这个后文再讲;200微秒算力预算在10kHz采样率下刚好剩一半余量,便于后续加锁频环和其他保护逻辑。

2. 二阶广义积分器原理与参数设计

2.1 SOGI的传递函数与通俗理解

二阶广义积分器,名字听起来像积分器,本质是一个谐振器。它的连续域传递函数通常写成带通形式:

H_BP(s)= (k·ω_n·s)/(s² + k·ω_n·s + ω_n²)

其中ω_n是中心角频率,k相当于阻尼相关的增益系数。在中心频率附近,这个带通滤波器的幅值增益接近1,相位接近0;偏离中心频率后,幅值迅速衰减。也就是说,它就像一个非常窄的筛子,只放行指定频率的信号。我第一次接触时理解它,用了“收音机选台”的类比:输入是所有电台叠在一起的混合信号,SOGI就是调到某个电台频率的接收通道,其他频段全部被压下去。

SOGI还天然产出两路信号:一路是和输入同相位的带通输出,另一路是滞后90度的正交输出。这两路凑在一起,恰好就是αβ坐标系里的一个正交对。后面要算谐波的瞬时幅值和相位,不再需要锁相环加零阶保持器,直接用两路正交量求模和角度就行。

2.2 阻尼系数与中心频率如何定

参数设计的核心就两个:中心频率和阻尼系数。中心频率没有悬念,电网基波如果是50Hz,5次谐波的中心频率就是250Hz,我直接写成 n×50Hz,n是谐波次数。

阻尼系数k才是真正要权衡的地方。它直接决定滤波器带宽和收敛速度。带宽近似于k·ω_n,k越小带宽越窄,频选性越好,但调节时间越长;k越大响应越快,却更容易让相邻频段的谐波、间谐波漏进来。

我在项目里把k取在0.5左右。按这个值算,250Hz的中心频率大概有不到40Hz的通带宽度,5次谐波和7次谐波之间差了100Hz,频点之间干扰很小;调节时间也能控制在60到80ms量级,和项目指标对得上。如果提取的是50Hz附近的分量,k需要更小,比如0.3以下,否则基波旁边的间谐波会把结果染脏。

2.3 从单个SOGI扩展成多SOGI阵列

单个SOGI只能盯一个频率,项目要连抓多个谐波,所以把好几路SOGI并在一起使用。输入信号进总线,各SOGI并行接入同一信号,每路把中心频率设置为不同谐波的角频率,输出各走各的。这个结构叫多项二阶广义积分器,简称M-SOGI。它区别于级联结构,各路没有前后依赖关系,某一路的参数改动不影响其他路,调试起来非常省心。

真正需要统筹的是基波频率跟踪。电网频率不是固定50Hz,工业现场可能漂到49.7Hz,如果每路中心频率还是50Hz的整数倍,提取结果就会出现明显幅值衰减和相位偏移。为此我在基波SOGI外侧加了一个频率锁环(FLL),实时估算电网实际频率,再把这个估值乘上谐波次数,作为每一路SOGI的动态中心频率。这样电网频率慢漂时,各路谐波提取结果依旧稳定,避免了“提取着提取着分量就跑了”的尴尬。

3. 谐波提取的完整实现

3.1 算法流程与软件架构

整个提取算法的流程很简单:采样电压或电流瞬时值,做量程缩放和抗混叠预处理,送入M-SOGI并行阵列;每路SOGI输出同相分量和正交分量,然后计算瞬时幅值与相位;如果需要复现波形,就用幅值和相位合成谐波瞬时值,或者直接把即时的正交分量组合起来输出。

软件架构上,我把每个SOGI封装成独立函数,用结构体保存状态变量和系数。初始化时给定中心和阻尼系数,每次采样中断里循环调用所有SOGI的更新函数。因为各路互不相关,循环顺序无所谓,对实时性的影响也只取决于路数多少。做5路谐波时,单次中断的计算开销在几十微秒量级,远低于采样周期100微秒。

用C语言描述一轮更新大概是下面的样子,省去具体系数推导,重点是结构清晰:

typedef struct { float w0; // 中心角频率 float zeta; // 阻尼系数 float b0, b1, b2, a1, a2; float x1, x2, y1, y2; } sogi_t; void sogi_init(sogi_t *s, float f0, float zeta, float fs) { // 按双线性变换生成二阶带通滤波器的离散系数 // 此处省略具体系数计算,初始化时完成一次即可 s->w0 = 2.0f * 3.14159265f * f0; s->zeta = zeta; } float sogi_update(sogi_t *s, float vin) { float y = s->b0 * vin + s->b1 * s->x1 + s->b2 * s->x2 - s->a1 * s->y1 - s->a2 * s->y2; s->x2 = s->x1; s->x1 = vin; s->y2 = s->y1; s->y1 = y; return y; }

这个结构在DSP和单片机上都能直接跑。正交输出可以由同相输出再经过一次精确90度移相得到,也可以在同一离散模型里把两个输出同时算出来,后者统一性更好,我实际操作时直接采用双输出版本。

3.2 离散化与参数标定过程

SOGI连续域公式再漂亮,数字实现时也绕不开离散化。我用的方法是双线性变换(Tustin变换),采样率取10kHz。双线性变换的优势是稳定域映射好,系数简单,中心频率处的增益误差在低频段可以忽略;缺点是频率响应在接近奈奎斯特频率时有频率压缩,但10kHz采样率下提取250Hz到650Hz的谐波,这个压缩效应非常小。

具体标定时,我会先在仿真软件里把每一路SOGI放在开环状态,输入一个由基波叠加多次谐波的合成信号,观察各路输出的幅值和相位是否与注入量一致。若发现幅值偏低,优先检查输入信号的量纲和缩放;若相位偏移,优先确认离散化选择是否正确,以及在中心频率附近连续域与离散域的相位差。这个标定流程做过一轮之后,后面的参数微调就很快了。

3.3 仿真验证数据

为了验证多SOGI的提取效果,我构造了一个模拟电网信号:基波50Hz有效值220V,叠加5次谐波8%、7次谐波5%、11次谐波3%,三者初相各不相同,还加了一点白噪声。信号送入M-SOGI阵列后,各通道输出滤波后的谐波分量。

稳态后的数据如下表:

谐波次数注入幅值(%)提取幅值(%)相位误差(°)调节时间(ms)
5次8.07.990.362
7次5.05.010.470
11次3.02.980.778
13次2.02.010.982

这个结果和理论预期基本一致。阻尼系数没变,中心频率越高,收敛反而稍微变慢,原因是数字滤波器在较高频率处的相位裕度略有变化。把调节时间再往下压不是不行,把阻尼系数从0.5提到0.7,调节时间能缩到40ms左右,但11次和13次谐波之间的串扰会明显变大,必须有取舍。

4. 谐波复现的实现方式

4.1 从提取到复现的整体链路

很多情况下不只需要“看见”谐波,还要把谐波“重新放出来”。比如要验证某台谐波检测装置准不准,就得先造一个含指定谐波含量的电网信号喂给它;要测试馈线保护在特定谐波下的动作行为,同样需要可复现的谐波源。我在项目里把复现链路设计成:M-SOGI提取实时幅值与相位,之后进入一个波形合成环节,再经DAC、隔离放大和功率级输出。

设计时特别注意一点:复现不是开环地播放固定波形。电网信号本身在实时变化,复现出来的谐波必须和实际信号保持同步,否则两边频率稍有偏差,合在一起会出现拍频条纹。同步的依据就来自M-SOGI带出的基波相位。我把它作为全局相位参考,谐波相位移到 n 倍基波相位上,复现信号在任何时刻都和电网同拍。

4.2 相位与幅值的同步设计

相位同步的细节值得多说一句。直接用某次谐波SOGI输出相位做合成时,如果只是简单取atan2,得到的是一串在0到360度跳变的量,直接拿它拼波形容易产生相位跳变。正确做法是先锁住基波相位,让基波SOGI连同FLL产生连续累加的相位,第 n 次谐波的相位就取 n 倍的基波相位,再叠加上该次谐波相对基波的固定相位差。这样既避免了跳变,也让复现谐波和原谐波之间的相位关系稳定维持。

幅值同步类似。M-SOGI提取出的谐波幅值可以直接作为正弦合成的幅度,但要留意提取幅值是瞬时幅值,可能带有纹波。复现用于稳态测试时,我会在幅值通道后加一阶低通先把纹波压掉,再进入合成器;用于动态补偿时则不加低通,保留原始响应速度。这一点要按场景区分,不能照搬。

4.3 硬件实现与工程细节

在硬件平台上,我把一路谐波复现做到了一块带浮点数字信号处理器和16位DAC的板上。采样率保持10kHz,DAC更新率也设为10kHz,输出经二阶低通滤除台阶。实测下来的波形总畸变率可以控制在1%以下,谐波幅值误差在2%以内,能接受。

避坑提醒:功率放大级一定不能省。直接拿DAC输出的弱信号去接被测设备,负载一变波形就塌。我在第一阶段图省事,接的是一台普通音频功放,结果低频响应不足,50Hz和250Hz分量增益差了将近10%,谐波复现结果完全不达标。后来换成了直流耦合、带宽至少5kHz的线性功放,增益平坦度才合格。

5. 应用场景与效果分析

5.1 有源电力滤波器中的谐波补偿

M-SOGI在APF里最直接的用法,是作为指令电流提取单元。负载电流进入M-SOGI,每个通道检测一次特定次谐波的瞬时值,再乘补偿增益、反相,输出给主电路产生抵消电流。相比传统总谐波提取方案,它的好处是可以只补偿重点谐波,比如只补5次和7次,让补偿容量投到畸变最严重的地方,成本和开关损耗都省下来。

在我参与的某个模拟项目里,负载电流5次谐波占8%、7次占5%,补掉这两个分量后,电流总畸变率从21%降到5%以下。关键参数是相位延迟,SOGI和功率级输出都有滞后,必须在补偿通道里加总时延补偿,否则补偿波形和原谐波相位对不齐,补完反而多出一截。这个坑在做闭环时尤其痛。

5.2 并网逆变器对电网背景谐波的抑制

并网逆变器的并网电流质量,不仅取决于逆变器自己,还受电网电压背景谐波牵制。电网电压里如果含5次或7次谐波,通过电流环耦合,输出电流也会出现同样次数的畸变。我在并网逆变器的控制环路里嵌入了M-SOGI,实时提取并网电压的几个主要谐波,在电流指令前叠加前馈抵消项,能明显压低对应次数的电流畸变。

对比实验里,没加前馈时并网电流5次谐波含量是6.7%,加入M-SOGI前馈后降到2.1%。代价是每个谐波通道多耗一点算力,以及需要额外整定前馈增益。整定过大反而振荡,我最后用的策略是让前馈增益从0缓慢爬升,观察并网电流对应次谐波的变化,找到拐点后取0.7倍作为工作点,系统留足稳定裕量。

5.3 测试信号源与教学科研复现

谐波复现链路还有个很实用的场景:做一个可配置谐波测试电源。把M-SOGI提取结果断开,直接让波形合成器输出指定幅值、相位和次数的正弦序列,混入基波,就能模拟“含有3次、5次、7次畸变的电网”。我用它在实验室里验证过某电能质量监测装置的谐波测量功能,注入5次谐波5%,装置测得4.98%,误差在允许范围内。

在科研教学复用上,M-SOGI也是一个很好展示的信号处理案例。把提取到的谐波分量重新合成,和原始混合信号一起观察,能直观看到“分离”和“重构”的效果。项目里我还用这套平台对比过不同阻尼系数下的提取波形,调节时间动态变化一目了然,比只看仿真曲线有说服力得多。

6. 常见问题与排查技巧实录

6.1 提取谐波幅值突然偏低

遇到过几次这类问题,排查下来大部分是中心频率与真实谐波频率不匹配。电网频率漂到49.7Hz后,5次谐波实际是248.5Hz,如果SOGI中心频率固定在250Hz,滤波器对248.5Hz已经有了明显衰减,提取幅值自然会掉。

处理方法有两种。第一种是加FLL,让中心频率跟着基波频率实时乘系数走,这也是我最后采用的方案。第二种是临时把带宽调宽一点,在频率漂移范围内用带宽罩住谐波,但带宽变宽后相邻次谐波串扰风险上升,不推荐当长期方案。

6.2 相位误差偏大且随频率增高

谐波次数越高,相位误差往往会越明显,这在离散化之后很难完全避免。数字滤波在接近奈奎斯特频率时相位响应会有偏差,采样率又不愿意降,所以需要做一次校准表。具体操作是:注入已知相位的高次谐波,记录M-SOGI输出相位,算出该次谐波在不同频率点的相位差值,存成查表项,复现和补偿时反过来补偿。

我做过一次完整校准,5次谐波相位误差从最初的约1.5度降到0.3度以内。需要注意的是,相位校准表会随采样率和滤波器系数变化,换平台后必须重校,不能拿上一块板的表迁过来用。

6.3 多路SOGI之间互相串扰

理论上并联SOGI互不依赖,但在实际信号里,各路输出会有少量相邻频率泄漏。最明显的是11次和13次谐波之间只差100Hz,如果阻尼系数大、带宽宽,两路输出会互相渗透,表现为幅值纹波和相位抖动。

排查时先看带宽是否过大,适当调小阻尼系数;再看输入信号是否需要前级预处理,如果输入中基波分量太强,SOGI的动态范围被基波占掉太多,谐波通道的分辨力就会下降。更稳妥的思路是先提取基波并从原始信号拆掉,再对残余信号做高次谐波提取,实测下来高次通道的纹波能降一半以上。

6.4 复现波形出现明显台阶和抖振

复现信号如果直接送DAC不加平滑滤波,就会在波形上看到台阶,谐波分析时出现镜像频率的高频噪声。我的处理是DAC后加二阶有源低通,截止频率放在1kHz左右,把开关频率及以上的杂波滤除。低通会带来相位滞后,所以在前面波形合成时预补一个负时延,或者采用相位超前补偿器。

另外复现波形抖振往往源于相位参考不稳。基波FLL在强噪声下可能出现小幅振荡,衍射到高次谐波相位上会被放大,所以FLL带宽也不能设太高。把FLL带宽从2Hz降到0.5Hz后,复现信号的相位抖动肉眼可见地减小,这是一个调试中容易忽略的细节。

实际做完整套提取加复现链路,我的最大体会是:M-SOGI本身不复杂,真正的工程工作量全在参数权衡和相位对准上。无论是补偿、抑制还是复现,抓准中心频率、锁稳基波频率、校准好相位延迟,三件事做到位,这套方案就可以在多种场景里稳定复用。如果时间允许,建议先在平台上把5次谐波这一路单独调通,指标达标后再扩展到多路,单路的参数和相位校准经验能直接沉淀下来,多路扩展只是重复这个流程而已。后面如果继续深入,我想把这条链路和陷波器组合起来处理间谐波提取,到时候再来分享新的实测结果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 7:25:31

JWT+Gateway+Nacos+Redis实现微服务免登录架构解析

1. 这个“免登录”到底免了什么?先破除三个常见误解很多人看到“JwtGatewaynacosredis实现免登录”,第一反应是:“哦,用户点一下就进去了,不用输账号密码。”——这其实是个典型误解。真正的“免登录”在这里特指会话状…

作者头像 李华
网站建设 2026/10/14 7:25:16

Simulink中DFIG风电调频模型搭建与参数整定全解析

1. 风电调频为什么成了绕不开的话题做电力系统仿真的朋友,对三机九节点这个经典模型应该都不陌生。它虽然规模不大,但包含了完整的发电、输电、负荷环节,用来验证控制策略特别顺手。这几年我陆陆续续在Simulink里搭过不少风电并网的模型&…

作者头像 李华
网站建设 2026/10/14 7:25:16

llama.cpp 与 GGUF 实战:本地大模型量化、编译与推理调优

1. 为什么“裸引擎”这个说法值得认真对待很多人第一次接触本地大模型,脑子里想的都是“下载一个模型文件,双击打开就能聊天”。这个预期本身没错,但中间那层被各种图形界面和封装工具藏起来的东西,恰恰决定了你能不能把模型跑起来…

作者头像 李华
网站建设 2026/10/14 7:25:16

AWS Greengrass组件开发全链路:Recipe到云端部署及aarch64排坑指南

上一篇把高通跃龙IQ-9100平台部署AWS Greengrass的初始化链路走完之后,我这边的核心设备已经在 IoT Core 里显示在线,Nucleus 也稳定跑了好几天。但很多同行问我的问题其实是从这里才开始的:组件到底怎么开发?写个 Python 服务丢上…

作者头像 李华
网站建设 2026/10/14 7:24:55

VMware Workstation 9.0.2精简绿色版:部署流程、网络配置与避坑指南

简介:VMware Workstation 9.0.2 精简绿色版是一款面向 Windows 平台的虚拟机软件,专为需要在同一台物理机中运行多个操作系统的开发测试人员、运维学习者和教学演示场景准备。该版本移除了大量冗余组件,免安装即可直接运行,显著缩…

作者头像 李华
网站建设 2026/10/14 7:24:33

Python可视化操作系统教学实验系统设计与实现详解

操作系统这门课,对计算机专业的同学来说,是真正分水岭级别的存在。学懂了,后面看任何软件都像看透明盒子;学不透,就感觉一直在背一堆名词解释。但这门课的教学和实验,说实话长期存在一个尴尬局面&#xff1…

作者头像 李华