1. 为什么一套输电线路故障数据集值得反复磨
做输电线路故障诊断、继电保护整定或者机器学习模型训练的人,应该都有过这种体会:找一套靠谱的故障数据,比调模型还费劲。
我自己在项目里翻过不少公开数据集,要么是只有单一故障类型,要么是波形长度太短没法做暂态分析,要么是标注信息模糊——只写"故障发生"不写"哪一相、什么类型、过渡电阻多大"。真正拿来做保护逻辑验证或者训练分类模型时,总感觉差一口气。所以当看到这套覆盖四类故障的数据集——单相接地、两相接地、两相间短路、三相间短路——第一反应是:终于有把基本故障类型收齐的资源了。
这套数据集的定位很明确:面向输电线路故障分析场景,覆盖电力系统中四种最常见的故障形态,每类故障都对应特定的电气特征和录波形态。不管你是做继电保护原理验证、做故障分类算法研究,还是给高校电力系统课程配实验数据,它都能直接拿来用。
要真正用好这套数据,不能只把它当作一个"文件包"去下载。你需要理解每一类故障背后的电磁暂态过程、数据采集时采样率怎么选、标注信息如何组织、以及训练模型时哪些坑是绕不开的。这篇就按我实际使用这类数据集的完整思路,从故障机理到实操步骤,一层层拆开讲。
2. 四类故障的电气特征与数据内涵
2.1 故障类型背后的暂态过程
输电线路发生短路故障,本质上都是绝缘被破坏后,导体之间或导体与大地之间出现了非正常的导通路径。但四类故障在电气量上的表现差异非常大,这也是数据集要区分标注的根本原因。
单相接地故障最常见的形态是某一条线路对地发生击穿,比如雷击闪络、树枝碰线、污闪等。这类故障的特点是故障相电压骤降,非故障相电压会升高,线电压基本保持对称,零序电压和零序电流显著增大。关键在于,接地故障的过渡电阻可以从几欧到几百欧甚至上千欧,高阻接地时故障特征非常微弱,是保护装置最容易漏判的情况。
两相接地故障是两条线路同时接地,比如两相导线同时被外力破坏搭到杆塔上。这时候相当于两相先短路再接地,故障相电流大幅上升,两个故障相的电压都跌落,零序分量明显。相比单相接地,两相接地的短路电流更大,对系统的冲击也更剧烈。
两相间短路是两相之间直接导通,但没有触及大地。最典型的就是大风天气下两条导线舞动碰线。AB两相短路时,C相电压基本不变,AB两相电压降低、电流增大,不存在零序分量,这是区分它和接地故障的核心判据。
三相间短路是对称性故障,三相同时短接,比如线路倒塔或严重外力破坏。三相短路电流最大、电压跌落最严重,但因为对称,零序分量反而为零,负序分量也为零。保护装置最容易检测,但系统受到的冲击也最致命。
理解这些特征有什么用?直接决定你对数据集做特征提取时的思路。比如做故障分类时,零序电流这个特征对区分"接地类"和"非接地类"故障几乎是决定性的;而做相别识别时,各相电压跌落幅度是对比的关键。
2.2 数据集里到底装了什么
一套规范的数据集,通常不只是给一堆CSV波形文件。我在实际使用中,最关注四个层面的信息:
波形数据是核心资产。常规配置至少包含三相电压(UA、UB、UC)、三相电流(IA、IB、IC),部分场景还会加零序电压U0和零序电流I0。采样率一般不低于1kHz,主流故障录波器是4kHz到10kHz。采样率决定了你能看到多高频的暂态分量——想做行波分析的,10kHz都不够用,需要MHz级别;只做稳态量判别的,1kHz就够。
故障标注信息是第二层。规范的数据集每条样本都会标注:故障类型、故障相别、故障发生时刻或区间、过渡电阻范围、故障距离或位置(如果有仿真参数)。这些标注信息是做监督学习的前提。没有标签的波形只能用来做人工观察,没法直接喂给分类器。
场景参数是第三层。如果数据来自仿真,通常会包含线路长度、电压等级(如110kV、220kV、500kV)、系统阻抗、负荷水平等。这些参数决定了故障数据的普适性。同一类故障在110kV短线路和500kV长线路上,电气量的幅值和暂态衰减速度差异很明显。用一套参数训练出来的模型,直接迁移到另一套参数场景,性能往往打折扣。
数据组织形式决定了使用的便利程度。好的数据集会按故障类型分文件夹,每个样本带独立的描述文件(JSON或TXT格式的元数据),而不是几千个波形堆在一个目录里。
2.3 为什么单相接地占比要单独重视
如果你统计过电网故障记录,会发现单相接地故障在所有线路故障中占了70%到80%。这个比例在数据集中也应该有体现。但很多数据集为了均衡,把四类故障做成各25%,这样做模型训练时类别均衡,却脱离了真实分布。
我个人的做法是:如果目标是做保护算法验证,按真实故障概率分布来组织测试集更合理;如果目标是做分类算法调优,均衡样本反而更好上手。你需要先明确自己的目标,再决定怎么从数据集中抽样。一套好的数据集应该支持这两种用法——原始分布给你,均衡采样也方便做。
3. 构建高质量故障数据集的三个关键环节
3.1 采集端:采样率与录波窗口怎么定
先解决采样率。采样率不是越高越好,它和你的分析目标直接挂钩。想做工频量(50Hz)的幅值、相位判别,1kHz到2kHz采样率足够。想做暂态高频分量分析,比如利用故障初始行波或高频谐波特征做分类,至少需要10kHz以上。
我在做故障诊断模型时踩过一次坑:前期拿到一套4kHz采样的数据,工频特征训练效果很好,后来想把模型升级到能识别早期微弱故障,需要用到暂态高频特征,结果发现4kHz采样率下5次谐波以上基本都失真了,频率分辨率不够,只能重新找数据。所以拿数据之前,先想清楚你要提取什么频段的特征,再确认采样率是否覆盖。
录波窗口也常被忽略。完整的故障录波应该包含故障前一段时间——通常是20ms到40ms——作为正常运行的基准,包含故障期间的完整暂态过程,最好还包括故障切除后的恢复过程。故障前数据用来计算正常运行时的幅值和相位基准,没有这段数据,很多相对量特征(比如电压跌落比例)就算不准。
我推荐的最小配置:故障前40ms、故障中100ms到200ms、故障后40ms。这样既能覆盖两个工频周期的完整暂态,又不会因为数据太长导致文件臃肿。如果做行波分析,需要故障前几毫秒甚至更短的前置窗口,同时采样率要在1MHz以上——那是另一个量级的需求,普通故障录波数据满足不了。
3.2 标注端:标签粒度决定算法天花板
标注信息决定了你能训练什么样的模型。最粗糙的标注是只标"故障"和"正常",这只能做二分类。稍微好一点的是按四类故障类型标,能做四分类。更进一步是按故障相别标——A相接地、B相接地、C相接地、AB相间短路等,这就有十几个细分类别。最高级的标注还会附带故障时刻的精确采样点、过渡电阻估计值、故障距离估计值。
我特别要强调过渡电阻这个参数。同样的单相接地故障,5欧姆和100欧姆的过渡电阻,在波形上呈现的差异非常大——高阻接地时故障电流增量很小,电压变化也不明显,很容易被当成正常运行数据漏过去。如果你的标注里没有过渡电阻字段,做模型时你就无法区分"难样本"和"简单样本",也无法针对性地做难例挖掘。
另外,标注里的"故障发生时刻"要精确到采样点级别,而不是给一个模糊的秒数。因为做故障测距时,行波到达时刻的误差直接换算成距离误差。行波在输电线路中的传播速度约等于光速的95%到97%,也就是大约29万公里每秒,一个1毫秒的标注误差就对应约290米的测距偏差。
3.3 样本端:仿真与实测数据怎么取舍
输电线路故障数据的获取渠道大致分两类:现场录波数据和仿真数据。现场录波最真实,包含了各种实际环境中难以建模的干扰——电磁噪声、负荷波动、设备谐波等等。但真实故障是稀缺事件,而且你没办法控制故障类型和故障条件,很难在短期内积累足够的标注样本。
仿真数据用电力系统仿真软件——比如PSCAD/EMTDC、MATLAB/Simulink、ATP-EMTP——搭建线路模型,可以批量生成各种故障场景。好处是能精确控制故障类型、故障时刻、过渡电阻、故障位置等所有参数,样本量可以做得很大。代价是模型简化会带来误差,仿出来的波形"太干净",缺少现场噪声。
实际项目里我建议两条腿走路。先用仿真数据做模型开发和调参,再把少量实测数据作为验证集。如果数据集本身包含仿真和实测两部分,使用时要特别注意:训练集用仿真数据,测试集用实测数据,这样才能真实评估模型的泛化能力。如果在仿真数据上准确率99%,拿到实测数据上掉到80%,这是常态,不用太焦虑,重点看能不能通过数据增强和迁移学习弥补差距。
4. 一套数据怎么训练故障分类模型
4.1 特征工程优先于模型选型
拿一套数据就直接套个深度学习模型,这是很多新手最容易走的路。我实测下来的经验是:输电线路故障波形数据,先做扎实的特征工程,再配合合适的模型,远比直接上复杂的深度网络更稳、更可解释。
工频稳态量特征包括:各相电压电流的有效值、相位、零序分量幅值、负序分量幅值、故障前后各相电压跌落比。这些量物理意义明确,直接用傅里叶变换或均方根计算就能得到。基于这些特征,用一个简单的决策树或者K近邻就能达到很高的分类准确率。
暂态高频特征包括:故障初始行波极性、高频分量能量分布、特定频段的幅值衰减速度、小波变换后的细节系数能量。这些特征对区分"金属性短路"和"高阻接地"特别有价值。提取这些特征需要用带通滤波或小波包分解,计算量比有效值大不少,但物理可解释性依然比端到端深度学习强。
我在项目里的经验是:先把工频量化特征做出来,跑一个随机森林或XGBoost,如果准确率已经到95%以上,那就不必上深度学习。只有在特征高度重叠或需要自动提取复杂时序模式时,才考虑用卷积神经网络或长短期记忆网络直接处理原始波形。
4.2 一个可直接复用的处理流程
具体操作上,我给出一个经过实测的流程,适合1kHz到10kHz采样率的数据集。
先做数据清洗和格式统一。把不同来源的数据统一成相同采样率,格式统一为CSV或NPZ。如果采样率不一致,用多速率重采样统一到同一基准。这一步看似简单,但会直接影响后续特征提取的准确性,尤其是做FFT时,采样率不一致得到的频谱分量对应关系全乱了。
再做信号预处理。工频分析场景下,可以先做50Hz陷波滤波来消除工频分量对暂态分析的干扰;如果是直接分析故障波形,就要做低通滤波来去掉高频噪声。滤波器的截止频率要与采样率匹配:4kHz采样率下,低通截至频率建议控制在1.5kHz以内,避免频谱混叠又不丢失主要暂态信息。
特征计算最耗时,也最考验对物理过程的理解。我的建议是按组组织特征:第一组是三相电压电流的幅值特征(故障前和故障后各算一组),第二组是序分量特征(零序、负序的幅值和相位),第三组是暂态特征(小波包分解的第三层和第四层频带能量占比)。这三组特征合在一起,通常在60到100维之间,就足够支撑一个可靠的分类模型了。
训练和评估环节,要特别注意样本分割方式。最忌讳的是随机分割——同一故障场景的前后片段可能同时出现在训练集和测试集,分类器等于已经"看过"测试内容,准确率虚高。正确的做法是按故障样本整体分割,保证同一条故障录波的所有片段都在同一侧。
4.3 模型选型与参数要点
四分类场景下,我推荐优先试随机森林。理由是它对高维特征和类别不平衡有天然的鲁棒性,不需要做特别复杂的归一化。调参上重点关注两个参数:树的数量和最大深度。树数量从100开始,逐个翻倍试到500,准确率曲线趋于平稳就停;最大深度限制在10到20之间,太深容易过拟合训练集的噪声。
如果特征之间有时间序列依赖——比如你想用完整的暂态波形而不是统计特征——再考虑时序模型。长短期记忆网络和时序卷积网络都能处理变长序列,但训练成本高不少,而且需要充足的样本量。四类故障各几百条波形时还不明显,总量低于500条时,深度模型大概率打不过随机森林,因为样本太少了,深度模型学不到稳定的模式。
最后补充一个特别注意:类别不平衡处理。如果你的数据集中单相接地样本远多于三相短路样本,分类器会倾向于把模糊样本判成多数类。解决办法有两个,一是对多数类做欠采样或对少数类做过采样;二是在损失函数里给少数类加权。Sklearn里的class_weight参数就能直接解决,别忘了用。
5. 实操中的常见问题与排查心得
5.1 波形截断了怎么办
实测录波数据经常出现故障后的波形只有几十毫秒,因为保护装置切除故障后录波自动停止。如果你要做暂态分析,这几十毫秒足够覆盖最初的行波和暂态高频段;但如果你想观察故障稳态过程,或者计算故障后的稳态电流,这就不够了。
我的处理习惯是:先看每个样本的录波时长分布。如果一部分样本只有50ms,另一部分有200ms,就按最短时长对齐截取,保证所有样本的观测窗口一致。宁可损失长样本的信息,也不能让样本长度不一致,否则特征维度对不齐,模型训练直接报错。
5.2 相位基准不一致怎么对齐
故障波形的初始相位角对暂态特征影响很大。同一类型的故障,合闸角是0度还是90度,暂态波形的形状差异明显。如果数据集没有记录故障发生时刻相对于工频周期的相位,你需要自己做对齐。
最简单的对齐方法是:取故障前一个周波的电压过零时刻作为相位零点,把故障后波形按这个零点对齐。这样所有样本的故障时刻就对应到统一的工频相位基准。我遇到过数据集里不同批次样本的零序电流极性不一致——后来发现是电流互感器接线方向不统一导致的。如果标注信息里没有说明极性,先画几组波形对比一下,不要盲目直接训练。
5.3 仿真数据"太干净"导致模型泛化差
用仿真数据训练的模型,拿到现场数据上性能下降明显,这是最常见的问题。主要原因是仿真数据里没有噪声,而现场数据包含谐波、间谐波、白噪声、负荷波动等各种干扰。
我的做法是主动做数据增强:在训练集里加不同信噪比的高斯白噪声,信噪比从10dB到40dB之间随机取值;同时加入5次谐波和3次谐波的叠加干扰。这样虽然样本还是不完美,但模型的鲁棒性会好很多。再进一步,可以用对抗验证的方式,把仿真数据和实测数据的特征分布做对比,确认特征分布重叠后,再整批训练。
6. 这套数据集还能往哪些方向延伸
如果说故障分类是这套数据最基础的应用,那再往前走一步就是故障测距。四类故障数据如果包含了故障距离标注,就可以用行波法或阻抗法训练测距模型。特别是行波法,对采样率要求很高,需要1MHz级别——如果你手头的数据只有10kHz以下,那就只能走阻抗法测距,精度在一个档距(约400到500米)级别,适合做区段定位。
另一个方向是保护逻辑验证。用四类故障数据去测试距离保护、零序保护的逻辑判据,尤其是测试它们在过渡电阻较大、故障特征较弱时的动作边界。我做过一次对比:欠量保护在金属性短路下动作可靠,但过渡电阻超过100欧姆的单相接地故障,灵敏度明显不足。这类结论用数据一测就清楚,比纯理论分析直观得多。
还有一个我最近在调研的方向是故障严重程度评估。同一类故障,过渡电阻不同、故障位置不同,对系统的冲击差异很大。如果数据集的标注够细,完全可以在分类的基础上多输出一个回归量——预测故障对系统稳定性的影响权重。这样一套数据就不再只是"分类任务专用数据集",而是可以做多任务学习了。
用过几套数据集之后,我的体会是:数据本身不会骗人,但数据怎么采集、怎么标注、怎么切片,里面的门道直接影响你能得出什么结论。拿到一套四类故障齐全的数据集,先别急着跑模型,花一天时间把数据分布、标注格式、采样参数搞清楚,后面能省下几周的返工时间。这套数据集的底子做得比较完整,如果你正好在做线路故障诊断相关的项目,值得拿它作为基准数据,好好打磨一套属于自己的处理流水线。