简介这份资源面向从事电力设备状态监测与故障诊断的研究者、高校学生及工程技术人员提供变压器故障谐波信号数据可用于神经网络的训练与测试。数据围绕电压系列展开配合BP神经网络实现变压器故障检测适合作为模式识别、信号分析与深度学习入门到进阶的实验素材。压缩包内共2个文件包含1个txt说明文档与1个m脚本文件前者用于交代数据背景与使用方式后者为可直接运行的MATLAB代码整体约5KB体量轻便便于快速加载与调试。目前已有470人学习下载说明其在相关实验与课程设计中具有一定参考价值。读者可借助该数据搭建故障分类模型验证谐波特征提取效果并在此基础上调整网络结构与参数完成从数据读取、特征分析到模型评估的完整流程为变压器故障诊断研究提供可复用的实验基础。1. 变压器故障谐波信号数据从哪来、怎么用、为什么值得做变压器故障谐波信号数据指的是变压器在正常运行与各类故障状态下其电压、电流波形中谐波成分的时序采样集合。它和常见的振动信号、油色谱数据、局放信号并列是电力设备状态监测里门槛较低但信息密度很高的一类数据。之所以值得单独拿出来做是因为铁芯饱和、绕组匝间短路、局部过热这些典型故障都会在谐波幅值、相位、总谐波畸变率上留下可量化的痕迹而这些痕迹用一台带谐波分析功能的录波装置就能采到不需要停机也不需要额外加装昂贵传感器。适合读这篇的人有三类一是做电力设备在线监测的工程师手里有录波数据但不知道怎么把谐波特征喂给模型二是做故障诊断算法研究的学生或算法工程师需要一套能复现的数据处理链路三是现场运维人员想搞明白录波仪导出的那堆谐波报表到底能看出什么。这篇不讨论某一份具体数据集的文件结构而是把「拿到谐波数据之后怎么一步步变成可用的故障诊断输入」这条链路讲透包括采样参数怎么定、特征怎么算、模型怎么选、坑在哪。2. 谐波数据从采集到可用的完整链路2.1 采样率、窗长与谐波次数的硬约束谐波分析的第一道门槛是采样参数。按奈奎斯特准则要分析到 50 次谐波50Hz 系统对应 2500Hz采样率至少要 5000Hz但工程上我一般取 12800Hz 或 25600Hz留出抗混叠滤波的过渡带。窗长决定频率分辨率用 10 个工频周期50Hz 系统即 200ms做 FFT分辨率是 5Hz刚好把基波和各次谐波分开如果只取 5 个周期分辨率降到 10Hz2 次和 3 次谐波之间的泄漏会明显加重。这里有个容易被忽略的点谐波次数不是越高越好。变压器故障特征主要集中在 2、3、5、7 次以及高频段的 11、13 次。把 50 次全塞进特征向量维度高、冗余大反而稀释了关键特征的权重。我通常只保留前 25 次再单独把总谐波畸变率THD和奇偶次谐波比作为两个汇总特征。注意如果原始数据是录波装置导出的 COMTRADE 格式先确认采样率字段别直接拿默认值算不同厂家配置差异很大。2.2 用 Python 算出一组可用的谐波特征下面这段代码演示从一段单相电流时序到谐波特征向量的最小流程。输入假设是 numpy 数组采样率已知。import numpy as np def harmonic_features(signal, fs, f050.0, max_order25, cycles10): signal: 一维时序数组单相电流或电压 fs: 采样率 Hz f0: 基波频率 Hz max_order: 保留的最高谐波次数 cycles: 用于分析的工频周期数 n int(fs / f0 * cycles) # 窗长采样点数 seg signal[:n] * np.hanning(n) # 加汉宁窗抑制泄漏 spec np.fft.rfft(seg) freqs np.fft.rfftfreq(n, d1.0/fs) mag np.abs(spec) / (n / 2) # 幅值归一化 feats {} fund_idx np.argmin(np.abs(freqs - f0)) fund mag[fund_idx] 1e-12 # 防止除零 for k in range(2, max_order 1): idx np.argmin(np.abs(freqs - k * f0)) feats[fh{k}_ratio] mag[idx] / fund # 相对基波的幅值比 # 总谐波畸变率 harm_sum_sq sum(feats[fh{k}_ratio]**2 for k in range(2, max_order1)) feats[thd] np.sqrt(harm_sum_sq) # 奇偶次谐波能量比 odd sum(feats[fh{k}_ratio]**2 for k in range(3, max_order1, 2)) even sum(feats[fh{k}_ratio]**2 for k in range(2, max_order1, 2)) feats[odd_even_ratio] odd / (even 1e-12) return feats逻辑说明先按工频周期数截窗加汉宁窗是为了压制非整周期截断带来的频谱泄漏这是谐波分析里最常见的翻车点。幅值归一化除以 n/2 是为了让基波幅值接近真实峰值。每个谐波特征用「相对基波的比值」而不是绝对值是因为绝对值受负载电流大小影响比值才能反映故障引起的波形畸变程度。参数说明cycles取 10 是分辨率和实时性的折中做离线分析可以取 20max_order取 25 覆盖了绝大多数变压器故障特征频段f0如果现场频率波动大建议先用过零检测估出实际基频再代入否则谐波峰值会偏到相邻 bin 上。2.3 特征怎么组织成模型输入单次采样的谐波特征是一个一维向量但故障诊断往往要看时序演化。常见做法是把连续 M 个窗的特征拼成 M×D 的矩阵M 取 20 到 50D 就是上面算出的特征维度。如果做的是匝间短路这类突变故障M 可以小一些重点抓突变点前后的对比如果做的是过热这类缓变故障M 要拉长到几百让趋势特征显现出来。标签方面如果手里没有标注好的故障数据一个可靠的替代方案是用仿真补在 PSCAD 或 MATLAB/Simulink 里搭一个变压器模型人为设置匝间短路比例、铁芯饱和程度批量生成带标签的谐波数据再用现场正常数据做域适应。这条路我走过仿真数据和现场数据的分布差异主要在高频段前 13 次谐波的一致性通常够用。3. 故障诊断模型选型从阈值法到时序网络3.1 什么情况下别上深度学习如果故障类型少比如只区分正常、匝间短路、铁芯饱和三类且特征工程做得扎实一个带核函数的 SVM 或者梯度提升树就能做到 95% 以上的准确率训练时间以秒计现场部署也简单。我见过不少项目一上来就堆 LSTM结果数据量只有几百条模型过拟合到验证集上好看、现场一跑就崩。判断标准很简单标注样本少于 2000 条、故障类别少于 5 类优先用树模型或 SVM 打基线。3.2 时序模型的输入构造与训练要点当故障是渐变的、或者需要提前预警时时序模型才有优势。下面是一个用一维卷积加 GRU 做谐波时序分类的最小示例输入形状是样本数时间步特征数。import torch import torch.nn as nn class HarmonicNet(nn.Module): def __init__(self, feat_dim, num_classes): super().__init__() self.conv nn.Conv1d(feat_dim, 64, kernel_size3, padding1) self.relu nn.ReLU() self.gru nn.GRU(64, 32, batch_firstTrue) self.fc nn.Linear(32, num_classes) def forward(self, x): # x: (batch, time, feat) - conv 需要 (batch, feat, time) x x.permute(0, 2, 1) x self.relu(self.conv(x)) x x.permute(0, 2, 1) _, h self.gru(x) return self.fc(h.squeeze(0))逻辑说明卷积层先在特征维度上做局部加权把相邻谐波之间的关联提取出来再交给 GRU 捕捉时间演化。这个结构比纯 LSTM 收敛快因为卷积已经压缩了输入维度。参数说明feat_dim就是 2.2 节算出的特征数时间步建议 30 到 50如果样本很少把 GRU 隐藏单元降到 16并在卷积后加 Dropout 0.3。训练时用加权交叉熵处理类别不平衡故障样本少的时候这一步比调网络结构更管用。3.3 验证集怎么切才不骗自己谐波数据有个特点同一台变压器、同一段时间采的数据高度相似。如果随机切训练集和验证集验证集里会有大量和训练集几乎一样的样本准确率虚高。正确做法是按时间段切前 70% 时间的数据做训练后 30% 做验证。更严格一点按变压器台号切用 A 变压器的数据训练、B 变压器的数据验证这样测出来的泛化能力才接近现场部署的真实水平。4. 避坑与排查谐波数据处理里最容易翻车的五件事4.1 频谱泄漏导致谐波幅值忽大忽小现象同一段稳态信号换一个截窗起点5 次谐波幅值能差 20% 以上。原因截窗没有对齐整周期FFT 假设信号周期延拓不连续处产生泄漏。解决要么加汉宁窗要么用整周期同步采样。现场数据做不到严格同步时加窗是必须的代价是幅值要乘一个窗函数修正系数汉宁窗的幅值修正系数是 2.0。4.2 基频偏移让谐波峰值跑偏现象算出来的 3 次谐波比 2 次还小和理论不符。原因电网频率在 49.8 到 50.2Hz 之间波动FFT 的 bin 是固定的基频一偏各次谐波峰值就落到相邻 bin 上幅值被低估。解决先做过零检测或相位差分估出实际基频再用实际基频去定位各次谐波的 bin或者直接用重采样把信号拉到严格 50Hz。4.3 把正常工况的谐波当故障特征现象模型在测试集上表现很好现场却频繁误报。原因变压器在轻载和重载下的谐波含量本身就不同轻载时铁芯饱和度低、3 次谐波小重载时 3 次谐波自然升高模型把负载变化学成了故障。解决特征里必须包含负载率或者用相对基波的比值特征并且在训练集里覆盖各种负载工况。4.4 不同录波装置的相位基准不一致现象多台变压器的谐波相位特征对不齐做横向对比时完全没法用。原因各装置 CT/PT 接线极性、采样触发时刻不同相位基准不统一。解决如果模型只用了幅值特征这个问题不影响一旦要用相位特征必须先做相位归一化以基波相位为参考把各次谐波相位折算成相对值。4.5 仿真数据训练、现场数据测试的分布鸿沟现象仿真集上 99% 准确率现场数据上掉到 70%。原因仿真模型的铁芯饱和特性、绕组参数和真实变压器有差异高频段尤其明显。解决只用前 13 次谐波做跨域特征或者在仿真数据里加入随机噪声和参数扰动做数据增强再拿少量现场标注数据做微调。别指望仿真数据直接落地。5. 把谐波特征用出增量价值的两个进阶技巧第一个技巧是谐波趋势的斜率特征。单看某一时刻的 THD 意义有限但 THD 在 24 小时内的上升斜率很有价值。我一般对每个谐波特征算一个滑动窗口的线性回归斜率窗口取 2 小时把斜率作为额外特征喂给模型。这个做法在早期匝间短路的预警上比单点阈值灵敏得多因为故障初期 THD 绝对值可能还在正常范围内但斜率已经明显偏离基线。第二个技巧是用正常数据的重构误差做异常评分。拿大量正常工况的谐波特征训练一个自编码器现场数据输入后看重构误差误差超过正常分布 3 倍标准差就报警。这个方法的优势是不需要故障标注适合故障样本稀缺的场景。自编码器的隐层维度取特征维度的三分之一左右太小会欠拟合正常数据的多样性太大会把异常也重构出来。验证这套流程是否可靠我习惯用一个笨办法把已知故障时间段的数据单独留出来看模型报警时刻和实际故障时刻的时间差。如果报警总是滞后于故障发生说明特征里缺少早期征兆得回头检查是不是只用了幅值、漏掉了相位或斜率信息。这个习惯帮我省过很多次后悔药。做谐波故障诊断这些年最大的教训是别迷信模型复杂度先把采样、加窗、基频校正这三步做扎实比换什么网络都管用。希望帮到你。本文还有配套的精品资源点击获取