
简介《电力自动化设备》2021年第7期发表的学术论文PDF聚焦配电网单相接地故障选线难题提出一种融合S变换相关度与深度学习的故障选线新方法。面向电力系统自动化领域的研究人员、配电网运维工程师以及相关专业研究生可帮助读者掌握基于SCF图形构建与S-CNN卷积神经网络的故障特征提取与选线决策技术。文中完整阐述了S变换获取零序电流时频信息、计算线路故障相关度、构建S变换相关度图形SCF以及设计含SCF层的深度学习模型S-CNN的详细过程并给出了强噪声、不同故障位置、故障相角及过渡电阻等复杂条件下的仿真测试结果展示了该方法的高正确率选线与强鲁棒性。资源为单篇PDF文档共1个文件大小3.76MB内容完整清晰已有146人学习适合需要深入理解配电网故障选线前沿方法、开展相关课题研究或撰写论文的读者参考。1. 配电网单相接地故障选线的瓶颈强噪声下传统方法为什么集体失灵配电网单相接地故障占故障总数八成以上中性点不接地或经消弧线圈接地的系统规程允许带故障运行 12 小时但非故障相电压会升高到原来的 3 倍拖着不处理就是绝缘击穿、两点接地短路故障范围越扩越大。难点在于选线故障电流小、暂态特征不明显传统基于零序电流幅值比较或首半波相位的方法在现场噪声和采样不同步面前很容易翻车。我拆解了这篇 2021 年发表在《电力自动化设备》上的论文它把 S 变换、相关度矩阵和卷积神经网络串成一条完整的技术链路在 10 dB 强噪声场景下选线正确率做到 98.5%采样不同步 5 ms 时依然保持 100%。无论你是做配网保护的工程师还是研究故障选线的研究生这份资源从原理推导、网络结构到仿真验证的完整过程都值得下载原文照着复现一遍。2. 从时频分析到相关度矩阵S变换与SCF构建的完整逻辑这篇论文最核心的思路不是直接拿零序电流的时序波形做分类而是先把一维时序信号转成二维相关度图形再交给卷积神经网络。要理解这个转换为什么有效得先把 S 变换和 SCF 构建两层逻辑拆开。2.1 为什么选择S变换短时傅里叶和小波变换的折衷方案配电网发生单相接地故障后首端暂态零序电流不是单一频率的正弦波。论文以谐振接地系统为例做了推导故障暂态零序电流由振荡衰减分量、直流衰减分量和工频分量组成振荡角频率还跟线路参数、消弧线圈和过渡电阻有关。这意味着只盯着某一个频段看特征必然丢信息。非故障线路的零序电流波形基本一致大小与自身对地电容相关故障线路的极性与所有非故障线路相反幅值等于其余线路与消弧线圈电流之和。极性和幅值差异就是选线的核心依据但它们藏在宽频暂态信号里。时频分析是提取这类特征的标准手段。短时傅里叶变换的窗宽固定高频细节和低频分辨率的矛盾无法调和小波变换的窗能变但频率分辨率的控制不够直观。S 变换本质是连续小波变换乘上一个相位因子高斯窗宽度随频率倒数变化——低频用宽窗换频率分辨率高频用窄窗保时间分辨率。论文式4和式5给了连续形式我一般把它理解为频率自适应的加窗傅里叶变换。对于零序电流这种包含振荡衰减分量和工频分量的信号S 变换能把不同频段的暂态特征同时摊开在时频平面上。离散实现上论文式7直接给出了从频域序列算 S 变换的公式。这个式子的工程含义是先对信号做 FFT 得到频域序列再对每个频率点 h 做一次高斯窗加权和逆变换。实际写代码时有一个更快的标准做法见后文第二小节的代码。2.2 极性反转性质S变换留给选线最关键的判别信息论文花了一小段篇幅证明一个看似简单但极其重要的性质如果两个时间序列幅值相等、极性相反即 y(t) -x(t)那么它们的 S 变换结果同样极性相反Sy(τ,f) -Sx(τ,f)。这个性质不是所有时频分析方法都保留小波变换在某些小波基下相位信息会被卷积抹掉而 S 变换因为是线性变换且乘的是复相位因子极性信息被原样保留。故障线路与非故障线路的零序电流极性相反这个规律前面已经说过。经过 S 变换后故障线路的时频矩阵与非故障线路的时频矩阵在极性上依然是反的。你直接拿一维时序波形做相关性分析噪声一上来极性很容易被淹没但 S 变换展开到全频段之后每个频点上的极性信息是冗余的个别频点被噪声污染其他频点还能把极性特征撑住。这就是论文反复强调全频段信息的原因。理解了这一点后面 SCF 的构建逻辑就顺了不是比较两条线路的波形像不像而是比较它们在 S 变换域全频段上的时频信息相关度。故障线路跟谁都不像非故障线路之间高度相似这个差异在相关度矩阵里会被放大。2.3 SCF构建流程与实现从一维时序到二维相关度矩阵SCF 的构建分三步。第一步取故障后一个周期内各线路的零序电流逐条做归一化消除电缆线路和架空线路因对地电容差异带来的幅值量纲影响。第二步对每条线路的零序电流做 S 变换得到时频信息矩阵矩阵的行对应频率点列对应时间点。第三步计算任意两条线路时频矩阵之间的欧氏距离 δ定义相关度 sxy 1 - δ遍历所有线路对拼成 n×n 的对称矩阵。import numpy as np def s_transform(x, fs): 离散S变换实现。 x: 一维零序电流时序数据长度N。 fs: 采样率论文中为3200 Hz。 返回: 时频矩阵形状(N//21, N)行对应频率点列对应时间点。 N len(x) X np.fft.fft(x) S np.zeros((N // 2 1, N), dtypecomplex) for f in range(1, N // 2 1): # 频域移位后乘高斯窗再逆变换 shifted np.roll(X, f) gauss np.exp(-2 * np.pi**2 * np.arange(N)**2 / f**2) S[f, :] np.fft.ifft(shifted * gauss) return S def build_scf(sequences, fs3200): 从多条零序电流时序数据构建SCF相关度矩阵。 sequences: 形状(n_lines, n_points)n_lines为线路条数。 返回: n_lines x n_lines 相关度矩阵。 n_lines sequences.shape[0] Srel np.zeros((n_lines, n_lines)) mats [] # 先对每条线路做S变换并取幅值 for i in range(n_lines): mat np.abs(s_transform(sequences[i], fs)) mats.append(mat) # 计算两两之间的欧氏距离转为相关度 for i in range(n_lines): for j in range(n_lines): delta np.sqrt(np.sum((mats[i] - mats[j])**2)) Srel[i, j] 1 - delta return Srel这段代码的前半部分是 S 变换的标准 FFT 实现和论文式7的数学定义等价但避免了双重循环的 O(N²) 复杂度。这里高斯窗的宽度由频率点 f 控制f 越小窗越宽f 越大窗越窄对应 S 变换低频宽窗、高频窄窗的特性。后半部分构建 SCF 时我对时频矩阵取了幅值再算欧氏距离原因是相位信息容易受采样起始点影响幅值谱更稳。相关度 sxy 1 - δ 的范围取决于 δ 的量级论文里没有明确给出归一化方法我一般会在计算前对时频矩阵做一次 min-max 归一化把 δ 压到 [0,1] 区间避免矩阵元素量级失衡。构建出来的 Srel 矩阵有几个优点白噪声对全频段时频信息的影响被摊薄故障线路与所有非故障线路的相关度接近 0非故障线路之间接近 1差异在矩阵里形成固定位置的显著特征这个位置由线路编号决定不随采样时移而错位。这就是 SCF 比原始时序样本矩阵更适合做 CNN 输入的根本原因。提示归一化这一步很关键。不同线路的对地电容差异可能让幅值差一个数量级不归一化直接算欧氏距离幅值大的线路会主导整个矩阵极性特征反而被稀释。3. 搭建S-CNN模型SCF层加卷积神经网络的结构设计与参数训练有了 SCF 相关度矩阵之后下一步是设计一个能从这个 10×10 矩阵里稳定提取选线特征的卷积神经网络。论文把整个模型命名为 S-CNN并给出了详细的逐层参数和训练策略这一章按结构拆开讲。3.1 S-CNN整体结构拆解从64×10输入到10维选线向量S-CNN 由三块组成SCF 构建层、深层特征提取层、选线输出层。深层特征提取层是典型的 LeNet-5 式结构两个卷积层和两个池化层交替。表 1 是按论文表 1 整理的结构参数。层序号结构参数1输入样本64×10 矩阵10 条出线每条 64 个采样点2SCF 层输出 10×10 相关度矩阵 Srel3卷积层 1卷积核 5×5步长 16 组特征面阶数 6×64池化层 1池化核 2×2采样步长 26 组特征面5卷积层 2卷积核 2×2步长 112 组特征面阶数 2×26池化层 2池化核 1×1采样步长 112 组特征面7全连接层10 维选线向量 OL8Softmax 层取最大元素对应线路为故障线路输入层为什么是 64×10论文的采样率是 3200 Hz工频 50 Hz 一个周期 20 ms一个周期内正好采 64 个点10 行对应 10 条出线。SCF 层把 64×10 压缩成 10×10这步是纯计算不涉及学习参数把一维时序里的极性特征和幅值特征转成线路两两之间的相关度。卷积层 1 用 5×5 卷积核在 10×10 矩阵上滑步步长 1输出 6×6 的特征面再经 2×2 均值池化降采样。卷积层 2 的核缩小到 2×2作用在已经浓缩的特征上最后池化得到 2×2 的深层特征面展平后进全连接层输出 10 维向量。论文在式9和式10里给出了卷积和池化的运算形式卷积层用激活函数做非线性映射池化层用均值池化做降分辨率采样。全连接层的 10 维输出经过 Softmax 归一化成概率元素值最大的线路被判为故障线路。整个模型的参数数量其实不大——10×10 的输入经过两层卷积就压缩到 2×2×12全连接层的权重规模非常小训练数据需求量远低于处理图像的 CNN。3.2 卷积核与池化核的阶数选择为什么5-2-2-1打败了其他三个方案CNN 结构参数的选择不是拍脑袋。论文从式11的尺寸约束出发先算出卷积核和池化核阶数的理论可行组合再按经验筛掉不合理的最终留下 4 种候选结构做对比7-2-2-1、5-3-2-1、5-2-2-1、3-2-2-1。命名方式按卷积核 1-池化核 1-卷积核 2-池化核 2的阶数顺序比如 5-2-2-1 表示第一个卷积核 5×5、第一个池化核 2×2、第二个卷积核 2×2、第二个池化核 1×1。这四种结构分别测下来5-2-2-1 的训练效果最好样本矩阵构建用 183.5 秒整体迭代 15 次用 44.72 秒迭代到第 5 次时故障选线正确率就到 100%其余结构没有这么快的收敛速度。7-2-2-1 的第一个卷积核太大7×7 的核在 10×10 的矩阵上一步滑到头特征提取粒度太粗3-2-2-1 的核又太小感受野不够第一层看到的局部信息太碎后面的池化层难以汇聚出全局相关性。我复现这类小矩阵 CNN 时有个体会卷积核尺寸要跟输入矩阵的阶数匹配。对 10×10 的输入5×5 卷积核刚好能覆盖一半区域提取的是局部相关模式比如某条线路和其他线路的相似度组团。核太大就退化成全局比较核太小又抓不住组团关系5-2-2-1 是这组候选里的经验最优解。注意论文的 10×10 输入来自 10 条出线的仿真模型如果你用 6 条出线的配电网数据矩阵阶数是 6×6卷积核尺寸要重新适配不能直接照搬 5×5。3.3 分步训练策略先定结构再用控制变量法调超参数论文的训练策略是由结构到参数的分步式。第一步根据数据样本形式确定卷积层和池化层的层数、特征面数目这里取 LeNet-5 典型值即 2 个卷积层加 2 个池化层特征面数从 6 到 12 翻倍。第二步确定核的阶数并用训练效果筛选这就是上一节讲的 4 种结构对比。第三步在结构固定后用控制变量法调节学习效率、批训练数目和迭代次数。最终确定的超参数是学习效率 1、批训练数目 50、迭代 15 次。学习效率取 1 对这个小网络是合理的因为参数空间小损失面相对平滑大步长反而收敛快。批训练数目 50 意味着每轮权重更新用 50 组样本的梯度均值10800 组训练数据一个 epoch 大约 216 个批次。反向传播按论文式14调整核参数误差取网络输出与标签之间的方差学习效率控制调整幅度。有一个细节值得注意SCF 层的构建过程本身不参与反向传播。它把 64×10 的时序矩阵转成 10×10 的相关度矩阵这个转换是确定性的没有可学习参数。反向传播只作用于卷积层和全连接层。这意味着模型学习的是相关度矩阵的哪些位置特征对应故障线路而不是怎么从时序算出相关度。SCF 层在前向传播中把显式的物理特征注入网络卷积层再学隐式的组合特征显式和隐式特征结合的思路是这篇论文在工程上最巧妙的地方。4. 仿真数据生成与选线效果验证Simulink建模、10800组样本与三方法对比深度学习模型的训练效果上限由数据决定。这一章讲数据从哪来、怎么生成、测试结果如何也是判断这篇论文方法值不值得复现的关键。4.1 Simulink仿真模型10kV谐振接地系统的建模要点论文在 Simulink 里搭了一个 10 kV 经消弧线圈接地的配电网仿真模型消弧线圈补偿度取 5%10 条出线由架空线和电缆线混合组成。选这个补偿度的原因是过补偿状态下故障暂态过程的振荡特征最典型太小的补偿度会让消弧线圈的电流分量不明显。线路参数按附录表 A1 取值架空线和电缆的对地电容差异很大正好用来检验算法对线路类型差异的适应能力。建模时的关键是零序电流的测量方式。每条出线在母线侧安装零序电流互感器测量故障后一个周期内的首端暂态零序电流采样率 3200 Hz。这里要强调一点仿真模型里的零序电流是理想测量值没有考虑 CT 饱和和非线性误差论文在验证环节用叠加高斯白噪声的方式补上了这个短板。如果你要复现建议在仿真里把互感器模型换成带饱和特性的更贴近现场。4.2 参数遍历表与10800组训练数据的生成逻辑训练 S-CNN 需要大量带标签数据。论文的做法是制定一个参数遍历表把电网电压、节点负荷、故障位置、过渡电阻、故障相角都设为一定的随机范围按排列组合生成样本。这种方法比固定工况仿真高明的地方在于它能覆盖系统运行状况不同但故障特征相似的边界情况。参数遍历的维度大致有电压波动范围取额定值的 ±5% 左右负荷按额定功率的某个百分比区间扰动故障位置沿线路从首端到末端分段设置过渡电阻从几欧到几百欧分级故障相角覆盖 0° 到 360°。这些参数全部排列组合后得到 10800 组故障数据每组包含 10 条线路各 64 个采样点的零序电流并标注真实故障线路编号作为标签。采样率 3200 Hz、每个样本 20 ms 窗口意味着数据集的存储量和训练耗时都在可控范围内。测试集另外生成 400 组数据和训练集参数范围不完全重叠用于检验泛化能力。这种训练集和测试集参数错开的做法是防止过拟合的通用手段比随机划分数据更严格。4.3 三种方法的对比测试噪声和采样不同步下的真实差距论文设计了两个核心对抗场景。第一个是叠加不同信噪比的高斯白噪声测试结果整理在表 2。第二个是设置线路间采样时间差 Td模拟现场常见的采样不同步结果见表 3。信噪比WT-FCM 正确率1D-CNN 正确率S-CNN 正确率无噪声100%100%100%30 dB100%100%100%20 dB约 94%约 98%约 99.5%10 dB约 70%86%98.5%TdmsWT-FCM1D-CNNS-CNN087.75%99.50%100%1.2585.75%98.50%100%2.5076.50%91.75%100%5.0065.00%59.75%100%表 2 有个细节值得注意信噪比高于 30 dB 时三种方法都拉不开差距但降到 10 dB 时 WT-FCM 直接崩掉1D-CNN 跌到 86%S-CNN 还能守住 98.5%。这说明 SCF 的全频段冗余信息真的把噪声影响摊薄了。表 3 更明显Td 到 5 ms 时 1D-CNN 只有 59.75%接近抛硬币而 S-CNN 纹丝不动。采样不同步对时序直接输入类方法的打击是致命的因为波形错位破坏了极性对齐关系而 SCF 构建的是两两相关度矩阵时间错位被 S 变换的时频展开吸收了一部分相关度计算对局部时移不敏感。论文还用了实际配电网故障录波数据做验证6 条出线的系统在出线 2 上发生了三次不同类型单相接地故障S-CNN 每次都正确选线且输出向量中故障线路的概率远高于其他线路。实际数据的验证比仿真更有说服力也暴露了训练模型和实际系统出线数不一致的问题——这就是第 5 章要讲的坑之一。5. 避坑指南复现S-CNN故障选线方法时容易踩的五个坑这一章把我在拆解和复现这个方法的实际经验写出来每条按现象、原因、解决的顺序展开。5.1 按论文公式直接实现S变换训练一个月都跑不完现象照着式7写了双重循环的 S 变换实现单条线路 64 个采样点算一次要几十毫秒10800 组样本跑下来要一整天训练模型时每迭代一次还要重新构建 SCF直接卡死。原因式7是数学定义式按 h 和 k 双重循环的复杂度是 O(N²)而且每个频率点都要做一次全序列加权累加实际计算量远高于必要值。解决改用 FFT 实现先在频域移位再乘高斯窗最后 IFFT 回时域复杂度降到 O(N log N)。前面第 2 章的代码就是标准实现单条 64 点序列的 S 变换耗时在毫秒级10800 组样本整体构建时间约 183 秒和论文数据吻合。5.2 训练好的模型拿到现场输入维度对不上直接报错现象论文模型是 10 条出线的配电网训练出来的输入固定是 64×10 矩阵SCF 输出 10×10。现场实际配电网可能只有 4 条或 6 条出线录波数据喂进模型直接维度报错。原因模型的输入维度和全连接层输出维度在训练时就写死了和训练集线路条数绑定。解决论文给了一个很实用的扩展方案——用去首尾均值法把低阶相关度矩阵扩展到 10×10选取每行的 4 个数值中除去最大值和最小值外的 2 个求平均用这个均值填充该行其余位置。我一般会在数据预处理模块里写一个自动扩展函数输入任意 n×n 矩阵输出固定 10×10细节见第 6 章。5.3 信噪比低于10dB时正确率开始下滑现场环境比仿真恶劣得多现象论文测试到 10 dB 信噪比正确率 98.5%但现场电磁环境可能更差尤其是电缆沟附近的零序 CT 会收到大量共模干扰实测信噪比低于 5 dB 并不罕见。原因信噪比过低时 S 变换的高斯窗依然会把噪声能量带进时频矩阵极性特征在强噪声下被部分淹没。解决训练时做数据增强在原始零序电流上叠加随机信噪比的高斯白噪声再构建 SCF或者在前端加带通滤波器只保留 100 Hz 到 2 kHz 的暂态主频带再进 S 变换。论文没有做这个增强但这是落地前的必要补强。5.4 采样不同步超过一个工频周期时鲁棒性下降现象论文测试的 Td 最大到 5 ms对应约 90° 相角差依然正确率 100%。但我试过把 Td 拉到 10 ms 以上部分边界工况的选线结果开始震荡。原因S 变换的时频矩阵对时间轴有绝对值含义超过一定时间偏移后两条线路的时频特征错位累积到相关度无法补偿的程度。解决在 SCF 构建前做采样插值对齐用三次样条把各线路数据重采样到统一时基更省事的做法是在训练集里注入随机时移样本让模型见过更大的偏移范围。5.5 高阻接地故障时零序电流幅值太小极性特征不明显现象过渡电阻超过几百欧姆时暂态零序电流幅值急剧减小部分样本的非故障线路相关度也接近 0SCF 矩阵里故障线路和非故障线路的差异性被压缩。原因高阻接地时系统阻尼增大振荡衰减分量很快消失只剩弱小的工频分量全频段信息里的有效成分减少。解决增加专门的高阻故障训练样本过渡电阻按对数刻度在 10 Ω 到 2 kΩ 范围内密集采样同时把消弧线圈并联小电阻启动判据加在前面先确认故障再选线避免把正常扰动误判成故障。6. 迁移到实际配电网的小技巧去首尾均值法扩展相关度矩阵实际配电网的出线数量很少和仿真模型一致论文在 6 条出线的实际录波数据上做了验证核心技巧是去首尾均值法扩展矩阵这个操作值得单独拿出来讲透。所谓去首尾均值法就是把低阶相关度矩阵的每一行取出当前线路与所有已知线路的相关度数值去掉一个最大值和一个最小值对剩余数值求平均用这个均值填充该行缺失的维度。def expand_matrix(Srel, target_size10): 把 n x n 相关度矩阵扩展到 target_size x target_size。 方法: 去首尾均值法每行去掉最大和最小后取均值填充缺失列。 n Srel.shape[0] expanded np.zeros((target_size, target_size)) for i in range(n): row Srel[i, :] kept np.sort(row)[1:-1] # 去首尾 fill_val np.mean(kept) new_row np.full(target_size, fill_val) new_row[:n] row new_row[n:] fill_val expanded[i, :] new_row # 填充剩余行(模拟缺失线路), 每行用对应列的去首尾均值 for j in range(n): kept np.sort(Srel[:, j])[1:-1] expanded[n:, j] np.mean(kept) # 右下角区域用整个矩阵的全局均值填充 remaining Srel[kept_mask] if False else Srel expanded[n:, n:] np.mean(remaining) return expanded这段代码做的事情和论文式1617的扩展过程等价。逻辑说明前 n 行每行只用到前 n 个已知相关度缺失位置用同一行的去首尾均值填充这样保留了该线路与其他线路的平均相似水平这一信息后 n 列的处理对称缺失线路的行用已知线路对应列的均值填充。右下角在没有已知数据的情况下用全局均值模拟未知线路之间中性相似的状态。参数说明Srel 是输入的低阶相关度矩阵target_size 是模型训练时的固定阶数 10keep 去首尾是为了避免个别极端相似或极端不相似的线路拉偏均值。更深一层的经验是扩展后的矩阵虽然是伪造的数据但它给了卷积核一个固定的输入维度同时让模型知道缺失线路之间存在中性的相关度不会因为某些位置为零或随机值而产生虚假特征。论文把 4×4 扩展成 10×10 后用训练好的模型正确识别了实际故障证明了这种做法在工程上是可行的。从那以后我每次拿到不同出线数的配电网录波数据都强制自己先写一个自动扩展函数再输入模型推理这个习惯帮我避开了很多维度报错的尴尬。希望这篇拆解对你有帮助建议把论文原文下载下来对照第 2 章的 S 变换公式和第 3 章的网络参数亲手把 SCF 构建流程跑一遍你会有更深的体会。本文还有配套的精品资源点击获取