ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

基于概率神经网络和电流特征的串联电弧故障检测方法

基于概率神经网络和电流特征的串联电弧故障检测方法 简介这份资源是一篇关于基于概率神经网络PNN的串联电弧故障检测技术PDF论文面向电气工程、深度学习及故障诊断方向的研究人员和学生。文章针对传统傅里叶变换忽略时域信息、BP神经网络收敛慢且易陷入局部最小值等问题提出以小波变换提取电流波形特征值输入PNN模型进行故障半周期数判定从而实现对串联电弧故障的准确识别。PDF全文共1个文件大小约1.45MB内容包含概率神经网络理论、实验数据与测试结果结构清晰适合作为电气安全检测与神经网络应用方向的参考。目前已有153人学习该资源对想了解电弧故障检测前沿方法、PNN建模流程及小波特征提取应用的读者具有较好的参考价值。1. 串联电弧故障检测的难点在于“看不见”概率神经网络解决的是“怎么认出来”串联电弧和并联电弧的区别很多人一开始就搞反。并联电弧是绝缘击穿后形成的大电流弧光过流保护和剩余电流保护都能动作危害来得快也暴露得快而串联电弧发生在回路中的接触不良点比如接线端子松动、线芯断裂却还贴着一点电弧和负载串联故障电流被负载压住幅值上根本触发不了断路器的过流阈值。它真正危险的地方是持续放电产生局部高温隔着外壳看不到等发现时常是已经引燃了周围可燃物。检测这类故障的问题是信号太弱、特征太杂而概率神经网络PNN这种训练成本低、判决依据清晰的分类器正好适合在这种“样本不多、特征维度不高、但必须快速迭代”的故障诊断任务里落地。下面按“特征—模型—实现—验证—部署”的顺序把整条链路打通。2. 概率神经网络的判定逻辑从电弧波形到贝叶斯后验2.1 串联电弧的电气特征零休、宽频噪声与随机性做串联电弧故障检测第一步不是选模型而是想清楚到底从电流波形里看什么。串联电弧在电流过零附近最容易熄灭也最容易重燃所以电流波形在过零处会出现一个明显的“零休”时段也就是电流贴着零轴停留的时间比正常正弦波更长。纯阻性负载时这个特征非常清楚但换成开关电源、调光灯这类非线性负载波形本来就存在畸变和谐波零休现象天然就有单靠这一条做判据误报率会高到没法用。第二个可用的特征是宽频噪声。电弧本质上是一个随机放电过程每次放电都向线路注入宽频的脉冲电流频谱能量集中在几十kHz到数MHz区间。这个频段在家用电器的正常电流里很少出现所以通过对采样电流做带通滤波然后计算包络能量得到的“高频带能量”指标对负载类型不敏感是区分串联电弧和正常非线性负载的核心依据。第三个特征是随机性。电弧的起弧、熄灭、重燃和触点的微观状态强相关相位和幅值都在漂移。于是相邻工频周波之间波形相似度明显下降。把连续几个周波做互相关正常负载的相关性通常很稳定而电弧存在时相关系数波动大。这三个特征组合起来就构成了一条完整的证据链零休说明弧隙在低压区徘徊高频能量说明存在电离放电低重复性说明放电过程不稳定。三者同时出现时判定串联电弧的把握就很大了。2.2 PNN 的四层结构与贝叶斯判别概率神经网络结构上非常直观从输入到输出一共四层输入层原样接收特征向量模式层每个神经元对应一个训练样本输出该样本与当前输入的高斯距离求和层把同一个类别下的模式层输出取平均输出层把每类的平均响应做归一化当作该类别的后验概率最后选取最大值对应的类别作为判决结果。数学视角更本质PNN 是在用 Parzen 窗方法估计每个类别的概率密度函数。设某类c下共有n个样本特征维数是D那么当前特征向量x属于类别c的概率密度估计值是f_c(x) 1 / ( n * (2π)^(D/2) * σ^D ) * Σ_i exp( -||x - c_i||² / (2σ²) )分子上的累加项就是高斯核展开。等式里唯一需要人工设置的参数是平滑因子σ也有人叫 spread。σ决定高斯核的“宽度”σ过小分类器只认训练样本泛化能力差σ过大概率密度被抹平不同类别的差异被抹掉。下表把这四层各自的角色列出来便于对照后面的代码实现。层名称每个神经元的输入输出计算权重来源输入层归一化特征向量原样透传无模式层特征向量 xexp(-‖x - c_i‖² / 2σ²)训练样本 c_i求和层某类所有模式层输出求平均类别标签输出层各类求和层输出最大化概率无2.3 为什么是 PNN而不是 BP 网络或 SVM电弧检测项目里常见的坑是一上来就上卷积神经网络或者 LSTM但如果只有几千个带标注的样本数据量撑不起深度模型。BP 网络需要反复迭代调权重对学习率、初始化敏感还容易陷进局部最优里SVM 在核函数选择上比较讲究而且在线增量更新时要重新求解对偶问题代价偏高。PNN 的训练过程基本没有“学习”可言它只是把训练样本原封不动地存成模式层的中心不需要反向传播也不存在迭代收敛问题。新增一条样本直接往模式层里追加一个神经元就可以这在需要现场补充数据、抑制新负载误报的场景里非常方便。代价是推理时要逐样本算距离训练集太大后计算量会线性上涨。因此工程上通常会把这条链路设计成滤波器做特征提取、PCA降维、再用聚类将模式层中心压缩到几百个以内。这个权衡后面第 6 章会展开讲。3. 特征工程把电流波形变成一张能训练的向量表3.1 先定采样率再定特征参数串联电弧的高频成分上限通常在数 MHz 级别但工程上普遍选择 1 MHz 采样率做录波兼顾高频频段覆盖和存储开销。如果硬件条件受限200 kHz 也能跑通只是 200 kHz 以上频带的信息拿不到。无论采样率多少特征提取都必须在整工频周期上做50 Hz 系统就是 20 ms 一个窗口60 Hz 系统则按 16.67 ms 切分。半周期特征会丢失燃弧和熄灭的完整过程不建议采用。常用的特征参数表如下这些特征计算量都很小适合在 MCU 上周期执行。特征名计算公式区分度负载敏感性零休时间比半波内 |i(t)| 0.1·I_pk 的时长占比中敏感电流峰值因子I_pk / I_rms低敏感高频带能量20~200 kHz 带通滤波后 RMS 值高不敏感周波重复系数连续两个工频波形的 Pearson 相关系数高低零休后脉冲个数零休结束后 2 ms 内高频包络过阈值次数高中需要注意最后一行参考文献里经常出现“零休后脉冲计数”这个指标它刻画的是重燃瞬间的高频冲击强度。捕获这个现象需要在零休结束的位置开一个短时窗再做阈值比较。3.2 用 Python 提取特征的最小实现下面这段代码以一段双周波电流数组seg为输入输出上述特征向量。采样率按 1 MHz 设计提取过程注意把带通滤波和高频包络解耦开便于在线部署时对每个特征单独验证。import numpy as np from scipy.signal import butter, filtfilt def extract_arc_features(seg, fs1_000_000): # seg: 连续两个工频周期(40ms50Hz)电流采样形状为 (int(fs*0.04),) n len(seg) half n // 2 cycle1 seg[:half] cycle2 seg[half:] i_pk max(np.max(np.abs(cycle1)), np.max(np.abs(cycle2))) i_rms np.sqrt(np.mean(seg**2)) # 特征1: 零休时间比阈值为10%峰值电流 thr 0.1 * i_pk zero_time_ratio np.mean(np.abs(seg) thr) # 特征2: 峰值因子 crest_factor i_pk / (i_rms 1e-9) # 特征3: 高频带能量通带20kHz~200kHz low 20_000.0 / (fs / 2) high 200_000.0 / (fs / 2) b, a butter(4, [low, high], btypebandpass) hf_sig filtfilt(b, a, seg) hf_energy np.sqrt(np.mean(hf_sig**2)) # 特征4: 周波重复性两个周期做相关系数 c1 cycle1 - np.mean(cycle1) c2 cycle2 - np.mean(cycle2) repeatability np.sum(c1 * c2) / (np.linalg.norm(c1) * np.linalg.norm(c2) 1e-9) # 特征5: 零休结束后的高频脉冲个数包络阈值取3倍高频均方根 env np.abs(hf_sig) thr_env 3.0 * np.sqrt(np.mean(hf_sig**2)) zero_idx np.abs(seg) thr pulses 0 for i in range(1, len(zero_idx) - 1): # 统计零休结束沿并在其后2ms窗口内检测高频包络尖峰 if zero_idx[i-1] and not zero_idx[i]: win env[i:iint(fs*0.002)] pulses int(np.sum(win thr_env)) return np.array([zero_time_ratio, crest_factor, hf_energy, repeatability, pulses])这段代码里butter的参数fs是按 1 MHz 采样率折算到 0~1 的归一化频率带通上下限分别对应 20 kHz 与 200 kHz最高端避开了采样率一半的奈奎斯特边界。filtfilt做零相位滤波比lfilter多一次反向处理防止相位偏移破坏时域对齐。零休后的脉冲搜索是从零休结束的上升沿出发检查其后 2 ms 窗口内的高频包络是否越过 3 倍均方根阈值能捕捉重燃瞬间的击穿冲击。注意每个特征的值域差异很大训练 PNN 前必须做标准化否则距离计算会被幅值大的特征主导。3.3 特征质量检查与降维拿到特征后先别急着训练。我一般会把正常负载和电弧故障两类的特征矩阵分别拿出来用均值±标准差的方式逐个特征可视化看两类分布的重叠程度。零休时间比在非线性负载上和故障样本几乎没有区分度此时就需要把它降权或去掉。更系统化的方法是直接用 PCA 降到 2 维画出散点图观察两类样本是否大致分开如果混成一团回到原始录波数据检查滤波参数和特征计算的边界条件。常见的问题出在窗函数切周波窗时不要在采样点序号上硬切应该用过零检测定位每个周波的起始点否则相位偏移会让相邻周波的对齐误差累加重复性指标会系统性失真。4. 手写一个概率神经网络分类器训练零迭代调参只剩一个 sigma4.1 用 NumPy 实现 PNN 的矩阵化推理PNN 的实现难点不是网络本身而是怎么把模式层距离计算写快。在不借助深度学习框架的情况下把训练集当成矩阵输入向量与全部中心计算欧氏距离并指数化可以用广播和矩阵运算一次性完成。下面给出一个可以直接放进项目的 PNN 类也定义了和 scikit-learn 兼容的接口方便接进GridSearchCV或cross_val_score。import numpy as np class PNNClassifier: def __init__(self, sigma0.1): self.sigma sigma self.centers None # 模式层中心矩阵(n_samples, n_features) self.y None # 每个中心的类别标签 self.classes_ None # 去重后的类别列表 def fit(self, X, y): # PNN的训练就是存样本: 模式层神经元直接使用训练样本 self.centers np.asarray(X, dtypenp.float64) self.y np.asarray(y) self.classes_ np.unique(self.y) return self def _activate(self, x): # x: (n_features,) - 返回与该类别所有中心的核激活值 diff self.centers - x # (n_samples, n_features) sq_dist np.sum(diff ** 2, axis1) # (n_samples,) return np.exp(-sq_dist / (2 * self.sigma ** 2)) def predict(self, X): X np.asarray(X, dtypenp.float64) preds [] for x in X: acts self._activate(x) class_scores [] for cls in self.classes_: mask (self.y cls) # 平均而不是求和避免样本数多的类别天然得分高 class_scores.append(np.mean(acts[mask])) preds.append(self.classes_[int(np.argmax(class_scores))]) return np.array(preds)fit中把传入的X直接复制为centers没有迭代训练也没有可学习权重。预测阶段的_activate用向量化距离计算替代 for 循环逐样本求距离在 Python 层面只循环测试样本训练集规模在几千量级时性能可以接受。求和层用np.mean而不是np.sum这对于样本量不平衡的数据集非常重要否则样本数多的类别在求和层天然占优。如果只做二分类还可以修改predict让它返回概率值便于后面做 ROC 曲线分析。4.2 唯一的超参数 sigma怎么用交叉验证搜索σ 选多大直接影响边界的平滑程度。经验上先对特征做标准归一化让每个特征均值为 0、方差为 1然后 σ 的合理搜索区间是 0.01 到 1.0按对数刻度取网格。推荐的手法是五折交叉验证把准确率均值最高的那组值固定下来。下面的代码直接在 sklearn 框架里完成。from sklearn.model_selection import GridSearchCV, StratifiedKFold from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline pipe Pipeline([ (scaler, StandardScaler()), (pnn, PNNClassifier()) ]) param_grid {pnn__sigma: np.logspace(-2, 0, 20)} cv StratifiedKFold(n_splits5, shuffleTrue, random_state42) grid GridSearchCV(pipe, param_grid, cvcv, scoringaccuracy) grid.fit(X_train, y_train) print(best sigma:, grid.best_params_[pnn__sigma])StandardScaler放在管道里确保每一折交叉验证的均值和标准差只从训练折上计算避免数据泄漏。σ 从 0.01 到 1.0 取 20 个点做对数均匀分布如果最优值落在边界上就扩大搜索范围重跑。若训练折数少还可以加上scoringf1从漏报角度筛选。4.3 训练集规模与类别不平衡的工程处理PNN 的模式层数量等于训练集样本数。1000 条样本、8 维特征时单次预测要做 1000 次欧氏距离计算在工控机上微秒级完成没有问题。但当样本集扩张到数万条预测延迟开始显现。此时常用两种压缩方式一是用 KMeans 对每个类别的样本分别聚类用聚类中心替换原始样本作为模式层神经元二是先用随机森林的特征重要性筛选特征把维度降到 6 维以内再重新训练 PNN推理时间的下降非常明显。类别不平衡问题在电弧检测中很常见正常运行时间远大于故障时间采样后正常样本可能是故障样本的十倍。除了求和层用平均之外更稳妥的做法是对故障样本做重采样或者在交叉验证里增加类别权重的评估指标。5. 在 Simulink 中仿真串联电弧跑通“数据采集—特征提取—PNN 判决”闭环5.1 用 Mayr 模型搭串联电弧负载回路做算法验证最理想的办法是拿实测录波数据。没有实测条件时仿真电弧是快速迭代的可行替代。常见做法是在 Simulink 中搭单相交流回路电源通过线路阻抗串联一个电弧模型再接到负载。电弧模型选 Mayr 模型因为串联电弧电流相对小Mayr 在电流过零附近的表现比 Cassie 模型更接近真实电弧物理过程。Mayr 模型的状态方程用离散时间形式描述可以在 MATLAB Function 模块里写成如下形式然后配合一个单位延迟模块打断代数环function g mayr_step(u_arc, i_arc, tau, P, dt, g_prev) % 输入: % u_arc: 电弧电压(V), i_arc: 电弧电流(A) % tau: 时间常数(s), P: 散热功率(W) % g_prev: 上一时刻电导(S) % 输出: % g: 当前时刻电弧电导(S) dg (g_prev / tau) * (u_arc * i_arc / P - 1); g max(g_prev dg * dt, 1e-6); end这个模块的物理意义是当电弧瞬时功率u_arc * i_arc大于散热功率 P 时电导增大弧道变强反之电导衰减趋向熄灭。g_prev / tau * (...)的形式源自 Mayr 方程推导max(g, 1e-6)是防止电导变成负值导致仿真发散。整个回路的收敛取决于dt的选取建议仿真步长设为 0.1 μs与 1 MHz 采样率匹配。用受控电压源承载电弧电压电流测量模块把 i_arc 反馈给电弧函数再用 1/z 延迟打断环路就能稳定仿真。5.2 批量生成训练样本组合负载与故障相位仿真平台搭好后下一步是生成足够多的训练样本。标准方法是把负载分成三组纯阻性负载电热炉、白炽灯、感性负载异步电机带载、非线性负载开关电源、调光灯每组分别在正常和串联电弧两种状态下记录电流波形。故障注入的时机也要错开电弧随机出现在工频相位的 30°、60°、90°、120° 等多个位置燃弧持续时间和重燃强度通过调整 Mayr 模型的tau和P来覆盖不同的放电强度区间。把仿真输出保存成 CSV 后用前面第 3 章的extract_arc_features函数把每条电流记录转成特征向量再打上标签。数据划分时注意不要按样本随机切分而是按“负载类型”分组切分。比如训练集只包含阻性和感性负载测试集放非线性负载检验模型在新负载类型上的泛化能力。很多论文里 99% 的准确率就是这么缺了含金量同类负载的数据混在一起特征分布重叠度太高。5.3 评估指标不能只看准确率用混淆矩阵和漏报率说话串联电弧检测是典型的宁可少报不可乱报的场景吗实际倒过来。漏报意味着放任电弧持续发热可能引发火灾误报意味着频繁跳闸用户会关掉保护功能。因此指标上重点看两个值故障样本被正确检出的比例即召回率也就是漏报的互补量正常样本被正确放行的比例即特异性对应误报大小。下表给出一组虚构测试结果用来演示如何读评估输出。负载类型准确率召回率特异性阻性负载0.970.950.99感性负载0.930.880.97非线性负载0.710.520.89非线性负载组明显出现性能悬崖说明零休类特征和新负载的正常波形撞车了。此时不要急着调 σ而是回到特征层把高频能量的权重提上来或者对非线性负载的正常数据做单类建模用密度估计替代二分类。PNN 这时体现出优势收集到新负载的误报样本后把正常样本追加进模式层不需要重新训练整个网络模型就能学会区分新负载的正常状态。6. 部署到在线检测系统要迈过的三道坎6.1 滑窗判决与报警确认在线检测不能对每个周波单独判一次一次误报就跳闸用户真会拆掉你的设备。常见做法是滑动窗加确认机制窗口长度取 10 个工频周期即 200 ms窗口每次滑过一个周波模型输出的决策序列里连续两次判为“故障”才触发报警。这样单周波偶发的滤波尖峰不会被当成电弧。6.2 模型体积压缩与嵌入式移植PNN 的推理在嵌入式平台上主要是 exp 运算和距离累加。先把模式层中心用 KMeans 压缩到每类 20 到 50 个准确率通常只掉 1 到 2 个百分点。σ 的 exp 计算用查表替代表项按 0.01 间隔均匀采样误差控制在 1% 以内即可。模型的全部参数就是一组浮点数组加一个 σ完全可以固化成 C 语言头文件直接编译进固件。6.3 采样率变更后必须同步更新滤波器系数最后一个容易踩的坑是采样率重构。调试时用 1 MHz部署到低功耗硬件后发现吞吐率不够改成 200 kHz 重新跑但带通滤波器的butter参数没有同步更新高频能量特征直接失效。所有涉及fs的系数都要从配置表读取然后跟着采样率版本一起写入模型快照而不是散落在各个函数的硬编码里。把 σ、归一化均值、标准差、滤波器系数集中到一个结构体里固化以后现场复现问题会少走很多弯路。本文还有配套的精品资源点击获取
返回列表