ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

相序处理与对称分量法:从数学原理到工程避坑

相序处理与对称分量法:从数学原理到工程避坑 简介这是一份面向电力系统分析场景的相序处理与相分量、序分量变换 MATLAB 脚本资源适用于电气工程专业学生、科研人员及继电保护相关工程师可帮助快速掌握正序、负序、零序分量的提取与计算。压缩包内仅含 1 个 m 文件整体大小约 3KB属于轻量级工具代码可通过傅里叶变换或对称分量法对三相数据进行运算并输出各序分量结果脚本结构简洁便于阅读和二次修改。该资源已在平台积累 644 人次浏览学习说明其在课程设计、故障分析与保护原理验证中具有一定参考价值。借助这份脚本读者可以直接运行并验证相序变换流程结合 PSCAD 或 Simulink 的仿真场景深化对不对称故障、接地故障序分量特征的理解也可将其作为电力系统分析工具的基础模板用于教学演示或算法移植。1. 相序处理是什么三相信号到序分量的第一性原理做电力系统故障分析或者继电保护调试的人迟早都要跟相序处理打交道。相序处理的核心就是把实测得到的A、B、C三相电压或电流相分量通过一个线性变换拆成三组工程上更好用的对称分量零序、正序、负序。这个变换不是学术炫技而是继电保护定值、故障测距、电能质量评估里的基础操作。比如母线电压不平衡度计算、负序过流保护、零序方向保护背后全是这套数学。我最早接手故障录波分析时以为“把三相波形画出来就能看出来问题”后来才发现不经过相序变换很多故障特征根本无从谈起——单相接地时三相电压幅值变化不大但零序和负序分量的大小、相位组合能直接告诉你是哪一相、什么类型。这篇文章就按我实际做过的方案讲清楚变换的数学来源、可复现的代码实现、参数选择边界以及几个让我翻过车的地方。2. 相分量与序分量的数学变换从ABC到120的矩阵推导2.1 为什么引入序分量三相对称性被破坏后的工程语言对称的电力系统里三相电压或电流幅值相等相位互差120°这时分析起来很简单——看一相就够了。但发生短路、断线、负荷不平衡或者系统谐振时三相不再对称。直接拿三相瞬时波形去分析既看不出故障位置也无法区分“这是过负荷还是接地”、“这是相间故障还是两相对地”。对称分量法的思路是把任意一组不对称的三相相量强行拆成三组各自对称的分量正序分量三相幅值相等相序为A-B-C即A相超前B相120°B相超前C相120°旋转方向与系统正常运行方向一致。负序分量三相幅值相等但相序为A-C-B即A相超前C相120°。它只出现在不对称工况下。零序分量三相同幅值、同相位相当于在三根导线上叠加了一个共同的中性点位移电压或零序电流。用这套语言任何三相不对称量都能拆成“对称的部分 不对称的偏差”保护逻辑就能从中提取特征量。比如负序分量专门用来反映相间不对称零序分量专门用来反映接地故障正序分量则反映系统主能量。2.2 Fortescue变换矩阵正序、负序、零序的定义与旋转算子对称分量变换最核心的数学依据是Fortescue原理也就是用复数算子 a 表示“落后/超前120°”。定义[ a e^{j\frac{2\pi}{3}} \cos 120^\circ j \sin 120^\circ -0.5 j0.866 ]那么 a² 就表示旋转240°a³ 表示旋转360°回到原位。对于任意三相相量 ( \dot{F}_A, \dot{F}_B, \dot{F}_C )序分量 ( \dot{F}_0, \dot{F}_1, \dot{F}_2 )分别对应零序、正序、负序按下式计算[ \begin{bmatrix} \dot{F}_0 \ \dot{F}_1 \ \dot{F}_2 \end{bmatrix} \frac{1}{3} \begin{bmatrix} 1 1 1 \ 1 a a^2 \ 1 a^2 a \end{bmatrix} \begin{bmatrix} \dot{F}_A \ \dot{F}_B \ \dot{F}_C \end{bmatrix} ]这里的关键是系数矩阵每行的相位关系。第二行是 A 相不动B 相滞后得到正序第三行是 B 相超前得到负序。不同的教材可能把负序写在第二行、正序写在第三行但只要逆变换一致工程上都能用。我个人习惯用“0、1、2”顺序因为大多数保护装置的定值菜单也是这么排列的。2.3 逆变换与功率不变原则从序分量还原相分量从序分量回到相分量就是逆变换[ \begin{bmatrix} \dot{F}_A \ \dot{F}_B \ \dot{F}_C \end{bmatrix}\begin{bmatrix} 1 1 1 \ 1 a^2 a \ 1 a a^2 \end{bmatrix} \begin{bmatrix} \dot{F}_0 \ \dot{F}_1 \ \dot{F}_2 \end{bmatrix} ]注意逆矩阵的系数不是1/3因为正变换已经除过了。如果你直接用原矩阵乘以序分量会得到放大了3倍的相分量这是我见到的第一个高频错误。还有一件很多人会忽略的事上面的变换是“幅值不变”形式它不保证变换后的功率等于三相总功率。换句话说用这个矩阵算出来的序分量幅值与相分量幅值相等但序分量各自对应的功率之和并不等于三相总功率。如果要做功率分析或能量计算需要用“功率不变”形式的变换矩阵其系数是 ( \sqrt{2/3} ) 而不是 ( 1/3 )。大多数继电保护应用采用幅值不变形式因为保护关心的是相量和幅值但电能质量仪和功率测量装置通常采用功率不变形式。选哪一种决定了你后续计算负序不平衡度时需不需要乘系数。3. 用Python实现相序变换最小可运行代码与参数调校3.1 采集三相工频相量从瞬时值到相量的FFT提取实际现场拿到的数据往往是采样点序列不是复数相量。所以相序变换的第一步是先对每一相电压或电流做工频相量提取。比如用离散傅里叶变换DFT或者短时傅里叶变换STFT在工频频率点上的投影。我一般会用单频DFT也就是余弦和正弦相关法这样计算量小对单一工频分量提取效果足够。采样率选128点/周期也就是50Hz系统用6400Hz采样率既兼顾了高次谐波分析又不会让数据量失控。import numpy as np def phasor_from_samples(samples, fs, f050.0): 从一相采样序列提取工频相量复数形式 samples: 一相电压/电流采样值序列 fs: 采样率 Hz, f0: 工频 Hz 返回: 复数相量幅值为真有效值RMS n len(samples) t np.arange(n) / fs # 余弦和正弦参考波形 cos_w np.cos(2 * np.pi * f0 * t) # 注意正弦参考取负对应 sin(-ωt)使相位为滞后的正弦相量 sin_w -np.sin(2 * np.pi * f0 * t) real 2.0 / n * np.dot(samples, cos_w) imag 2.0 / n * np.dot(samples, sin_w) return np.complex128(real 1j * imag)这段代码里最关键的是正弦参考波取了负号。如果取正号得到的相位定义会变成“余弦相位”而不是“正弦相位”。工程上电网相量通常定义为 ( X(t) \sqrt{2} |X| \sin(\omega t \theta) )其中 ( \theta ) 相对于过零点。我的习惯是统一用正弦基准这样后续跟保护装置里的相量基准才能对上。如果混合使用相位差会固定偏移90°负序分量就会算错。数据窗长度也很有讲究。最少需要一个完整工频周期算法才能正确提取基波。实际做录波分析时我会取3到5个周期平均这样能压制噪声和非周期分量。但注意窗长不能太长否则会平滑掉故障暂态过程中幅值相位的快速变化负序保护的启动判据就变得迟钝。3.2 核心变换函数输入ABC复数数组输出序分量幅值相位有了三相的工频相量后就可以直接套变换矩阵。下面这个函数接受三个复数相量返回零序、正序、负序的复数结果并同时给出幅值和相位。def sym_components_from_phasors(Fa, Fb, Fc): 将三相相量变换为序分量 Fa, Fb, Fc: 复数相量A相、B相、C相 返回: dict, 包含 zero, positive, negative 每个元素是 (幅值RMS, 相位角度°) a np.exp(2j * np.pi / 3) # 旋转120° T np.array([ [1, 1, 1], [1, a, a*a], [1, a*a, a] ]) / 3.0 F np.array([Fa, Fb, Fc]) comp T F def mag_phase(c): return abs(c), np.degrees(np.angle(c)) return { zero: mag_phase(comp[0]), positive: mag_phase(comp[1]), negative: mag_phase(comp[2]) }逻辑说明矩阵 T 就是上一章的正变换矩阵除以3放在矩阵里乘以电压或电流相量。结果 comp[0] 是零序comp[1] 是正序comp[2] 是负序。这里假设输入的 Fa, Fb, Fc 已经是RMS相量输出幅值也是RMS值。如果输入的是峰值则输出也是峰值两者需要保持一致。我在这上面栽过跟头录波文件里有些通道是峰值有些是RMS混着用导致负序幅值算出来偏大。参数说明a 的精度由 np.exp(2j * np.pi / 3) 保证64位复数浮点完全足够。关键参数是“输入相量的相位基准”必须确认A相零度定义在哪里。有的装置以A相电压过零点为0°有的以采样起始时刻为0°若不做对齐计算出的负序相位会整体偏转导致选相逻辑误判。3.3 参数调校采样率、数据窗长度与相位基准采样率建议不低于每周期64点我常用128点。过低会带来基波相量提取误差尤其在存在谐波时过高则占用内存且对同步要求更严格。数据窗长度稳态分析取3个周期故障暂态分析取1个周期或更短。如果做的是实时保护算法窗长压缩到半周期也是常见做法但此时提取出的相量并非严格稳态需要配合补偿算法。相位基准是最大的“隐性参数”。标准做法是以A相电压的工频相位作为全局参考零点。如果你拿到的数据本身带有绝对时标那直接按采样时刻构造时间轴即可。如果数据来自多个录波装置则必须先做GPS对时校验否则各相之间哪怕差0.1毫秒负序相位就可能偏移十几度足以让方向元件误动。我一般会在计算前打印三相原始相量先人工检查一下是否为标准的“A超前B 120°、B超前C 120°”顺序如果不满足首先怀疑采样同步问题而不是急着调算法。4. 工程落地继电保护与故障分析中的序分量应用4.1 负序分量在不对称故障检测中的定值逻辑负序分量最经典的应用就是负序过流保护和负序方向保护。以负序过流保护为例整定值通常用负序电流与正序电流的比值或者用负序电流绝对值。当前主流微机保护内部计算序分量时用的就是Fortescue变换只是实现上常采用数字滤波器直接输出负序分量避免逐点做复数矩阵运算。实际整定时负序过流一段定值要躲过正常运行时系统允许的最大不平衡电流。这个不平衡电流来自负荷不对称、三相电流互感器误差、变压器励磁涌流等一般取额定电流的5%到10%。我见过由于CT二次回路接错导致负序电流长期大于定值保护频繁发信的场景后来用相序变换单独分析三相电流相位发现B相极性接反换算成负序后幅值达到额定值的30%替换接线后恢复正常。负序分量的相位还能用于故障方向判断。例如在双电源系统中负序功率方向指向故障点。计算负序电压和负序电流之间的夹角如果角度落在动作区方向元件就判断为正方向故障。这要求对相量提取和相位基准的精度要求极高任何固定的相位偏移都会导致方向误判。因此在保护装置的调试中用继电保护测试仪模拟各类故障时测试仪输出的故障分量必须严格按对称分量原理构造——输出电压/电流先合成序分量再逆变换生成三相量才能保证保护装置计算出的相位与预设值一致。4.2 零序分量与接地故障三次谐波与零序电流方向零序分量的大小直接反映接地故障的严重程度。在小电流接地系统中单相接地时零序电压约为相电压的√3倍取决于中性点接地方式零序电流则取决于系统对地电容。做故障选线时通常比较各线路零序电流的幅值和相位故障线路的零序电流相位与非故障线路相反。这需要正确处理零序电流的极性也就是TA极性端子的接线方向。现场常见的坑是三相CT二次绕组首尾端接反导致零序电流变成3I0但极性反向造成选线错误。还有一点零序分量并非只在接地故障时出现。三相电流不平衡本身就会产生零序分量特别是在三相四线制系统里零序电流流经中性线。此外非线性负荷产生的三次谐波虽然属于零序性质但频率是150Hz不是工频零序。很多电能质量监测仪把工频零序分量和三次谐波都归在“零序”类别里做保护判定时必须用窄带滤波把工频零序提取出来否则会误以为存在接地故障。4.3 相序错误检测负序电压的相位特征相序处理还能用来判断三相电源的相序是否正确也就是常说的“相序保护”。当一个电动机或电子设备的供电相序接反时电机反转设备可能损坏。利用序分量变换只需要测量三相电压计算负序分量的相位。正常相序下负序电压几乎为零不考虑不平衡一旦任意两相对调负序电压会陡然增大且负序电压相对于正序电压的相位关系会呈现一个固定的角度差。通过这个角度还能反推出是A、B交换还是B、C交换。我做过一台ATS切换开关的逻辑校验现场用相序表测是对的吗其实相序表只能告诉你是正相序还是逆相序不能精确到哪两项互换。而用录波器采三相电压波形做一次序分量计算就能从负序分量相位差120°还是240°直接判断出是哪一组互换。5. 相序变换的避坑与排查相位基准、幅值标幺和零序陷阱5.1 相位基准默认以A相为0°不同数据源的对齐方式现象两台录波器分别记录同一母线电压各自计算出的负序相位差了60°以上导致方向保护判据无法统一。原因一台录波器以A相电压过零点作为基准另一台以采样文件起始时刻作为0°或者两台装置内部分别采用正弦和余弦基准定义相位。两种基准之间不是纯线性偏移因为3/2矩阵对相位偏移敏感。解决统一在算法层把三相相量的相位归一到“A相工频相位为0°”的坐标系。具体做法是先提取A相相位θA然后构造复数相量 Fa Fa * exp(-jθA)Fb Fb * exp(-jθA)Fc Fc * exp(-jθA)再送入变换矩阵。这样可以消除所有通道间固定的相位偏移只保留相对相位关系。5.2 零序分量是3I0还是I0位置和系数双重坑现象用公式计算零序分量得到幅值很大与实测零序TA测量值对不上。原因很多教材在零序电流定义时把“三相电流之和除以3”称为零序电流即 I0 (IaIbIc)/3。而保护装置中的零序电流通常来自零序CT其测量的是3I0 IaIbIc。如果直接拿零序CT的采样值除以3再送入变换跟用Ia、Ib、Ic计算出的零序分量相比会出现系数差3倍。另外如果逆变换矩阵忘了乘系数也会把零序放大。解决明确你的相分量是“相电流”还是“3I0合成量”。在变换代码里输入必须是分别的A、B、C三相电流零序分量才是标准的I0。如果数据源只有零序电流通道3I0则先除以3再参与变换或者直接把它当作3U0在输出解释时标注清楚。5.3 用瞬时值做变换导致的虚假负序现象直接拿三相电压的每点瞬时采样值套用3x3矩阵输出一个随时间旋转的负序矢量幅值忽大忽小无法用于定值判断。原因对称分量变换针对的是工频相量复数不是瞬时值。瞬时值做变换得到的是“瞬时对称分量”只有在理想对称正弦条件下才与稳态相量相等。实际波形含有谐波、衰减直流分量、噪声瞬时变换结果中会混入大量其他频率成分。解决先用DFT或窄带滤波器提取每相工频相量再做序变换。如果是在线实时算法使用带通滤波器组或卡尔曼滤波跟踪基波而不是直接对原始采样点做矩阵乘法。这是我调过最多次的“玄学”问题最终都归结为两个步骤先相量提取再序变换。5.4 采样不同步引发的相位漂移现象变压器差动保护中的制动电流计算出现虚假负序导致保护在穿越性故障时误动。原因变压器两侧电流互感器的采样通道可能由不同采集卡完成通道间存在几微秒到几十微秒的恒定延迟。对于50Hz系统1ms对应18°相位差。如果两侧通道没有统一的时间基准比如采用插值重采样对齐负序分量会凭空产生。解决在做多通道相序变换前先对所有通道做时间标定。最简单的方法是利用已知的稳态三相正弦信号计算各通道相对A相的相位差并补偿。对于跨越站点的数据使用IEEE 1588对时或GPS/北斗脉冲对时确保全局采样时钟一致。我在离线分析中通常使用插值方法把所有通道重采样到同一个时间网格然后再做DFT。5.5 矩阵系数忘记除3或乘以√2现象同样一组数据自己写的Python算出的负序幅值比保护装置显示的大约3倍或√2倍。原因一是变换矩阵没有除以3直接用伴随矩阵做了正变换二是输入的是峰值相量而装置显示的是RMS值或者相反。这两种情况在代码迭代中非常容易混入。解决写一个简单的自测用例——输入三相完全对称的正序量如 Fa100、Fb100e^{-j120°}、Fc100e^{j120°}正确结果应该只有正序分量幅值100零序负序为0。然后用这个用例做回归测试每次修改矩阵系数后跑一遍。养成这个习惯后再也不会被系数问题坑到。6. 进阶技巧用序分量快速判别故障类型与选相6.1 通过零序和负序的“有/无”表锁定故障类别故障类型的判定不需要看完整波形只需要看故障稳态阶段序分量的有无和相位关系。四类常见短路的序分量特征可以浓缩成一张表故障类型正序负序零序典型相位关系三相短路有无无三相完全对称两相短路有有无负序相位与故障相相关单相接地有有有零序与负序幅值接近相位关系固定两相接地有有有负序与零序相位关系区别于单相接地利用这个表我写过一个小工具在故障录波中自动区分故障类别。做法是取故障后2到3个周波的采样数据计算三相电压/电流的序分量然后按幅值阈值判断“有无”。具体阈值按照额定值的5%来定低于阈值视为无。然后进一步用负序电压和零序电压的比值区分单相接地和两相接地。实际项目中这个方法对大多数金属性短路准确率很高但对经过弧光电阻或过渡电阻的故障零序幅值会压低容易漏判。这时我通常再结合故障相电压突变量做二次确认。6.2 利用负序相位做选相一套可验证的手工计算选相是距离保护和自动重合闸的逻辑基础。用序分量选相的核心是看负序电压/电流的相位与A相基准的夹角。例如单相接地故障如果故障相是A相则负序电流相位与正序电流反相如果是B相故障负序电流相位滞后又前移特定角度。我做过一个离线计算器输入三相电流相量程序输出“故障相为A/B/C”的判定。校验方法是手工算一遍设A相接地设故障电流在A相按对称分量法算出正序、负序、零序电流再验证程序输出。这一招能快速排查程序里的相位旋转方向是否定义反了。用序分量做选相时注意区分“电流选相”和“电压选相”。电流选相受负荷电流和系统阻抗影响较小适合近区故障电压选相则对双侧电源系统更可靠。保险起见两者同时计算结论一致才动作。我个人的习惯是每次写完相序变换代码先跑一遍“理想正序输入”和“已知故障相输入”两个测试用例确认没跑偏再用于现场数据分析。这个习惯救过我很多次。相序处理说到底就是线性代数和信号处理的结合公式不难难的是在真实数据面前保持相位基准、幅值定义和采样同步这三个变量都不出错。希望这篇笔记能帮你少走几个弯路。本文还有配套的精品资源点击获取
返回列表