基于FFT + CNN -Transformer时域、频域特征融合的电能质量扰动识别模型

目录

往期精彩内容:

​模型整体结构

1 快速傅里叶变换FFT原理介绍

第一步,导入部分数据,扰动信号可视化

第二·步,扰动·信号经过FFT可视化

2 电能质量扰动数据的预处理

2.1 导入数据

2.2 制作数据集

3 基于FFT+CNN-Transformer的轴承故障识别模型

3.1 网络定义模型

3.2 设置参数,训练模型

3.3 模型评估

代码、数据如下


往期精彩内容:

电能质量扰动信号数据介绍与分类-Python实现-CSDN博客

Python电能质量扰动信号分类(一)基于LSTM模型的一维信号分类-CSDN博客

Python电能质量扰动信号分类(二)基于CNN模型的一维信号分类-CSDN博客

Python电能质量扰动信号分类(三)基于Transformer的一维信号分类模型-CSDN博客

Python电能质量扰动信号分类(四)基于CNN-BiLSTM的一维信号分类模型-CSDN博客

Python电能质量扰动信号分类(五)基于CNN-Transformer的一维信号分类模型-CSDN博客

前言

本文基于Python仿真的电能质量扰动信号,进行快速傅里叶变换(FFT)的介绍与数据预处理,最后通过Python实现基于FFT的CNN-Transformer融合模型对电能质量扰动信号的分类。Python仿真电能质量扰动信号的详细介绍可以参考下文(文末附10分类数据集):

电能质量扰动信号数据介绍与分类-Python实现_python给电压数据做分类-CSDN博客

部分扰动信号类型波形图如下所示:

模型整体结构

模型整体结构如下所示,一维故障信号经过FFT变换的频域特征以及信号本身的时域特征分别经过CNN卷积池化操作,提取全局特征,然后再经过Transformer提取时序特征,增强融合特征,最后经过全连接层和softmax输出分类结果。

1 快速傅里叶变换FFT原理介绍

傅里叶变换是一种信号处理和频谱分析的工具,用于将一个信号从时间域转换到频率域。而快速傅里叶变换(FFT)是一种高效实现傅里叶变换的算法,特别适用于离散信号的处理。

第一步,导入部分数据,扰动信号可视化

第二·步,扰动·信号经过FFT可视化

2 电能质量扰动数据的预处理

2.1 导入数据

在参考IEEE Std1159-2019电能质量检测标准与相关文献的基础上构建了扰动信号的模型,生成包括正常信号在内的10中单一信号和多种复合扰动信号。参考之前的文章,进行扰动信号10分类的预处理:

第一步,按照公式模型生成单一信号

单一扰动信号可视化:

2.2 制作数据集

制作数据集与分类标签

3 基于FFT+CNN-Transformer的轴承故障识别模型

3.1 网络定义模型

注意:输入扰动信号数据形状为 [64, 1024], batch_size=64,  ,1024代表序列长度。

3.2 设置参数,训练模型

50个epoch,准确率将近100%,用FFT+CNN-Transformer融合网络模型分类效果显著,模型能够充分提取轴承故障信号的空间和时序特征和频域特征,收敛速度快,性能优越,迄今为止,是目前往期文章方法中精度最高的方法。

注意调整参数:

  • 可以适当增加 CNN层数和隐藏层维度数,微调学习率;

  • 改变Transformer隐藏维度和层数,增加更多的 epoch (注意防止过拟合)

  • 可以改变一维信号堆叠的形状(设置合适的长度和维度)

3.3 模型评估

准确率、精确率、召回率、F1 Score

十分类混淆矩阵:

代码、数据如下

对数据集和代码感兴趣的,可以关注最后一行

# 加载数据
import torch
from joblib import dump, load
import torch.utils.data as Data
import numpy as np
import pandas as pd
import torch
import torch.nn as nn
# 参数与配置
torch.manual_seed(100)  # 设置随机种子,以使实验结果具有可重复性
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
 
#代码和数据集:https://mbd.pub/o/works/555897

  • 17
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
电能质量扰动信号模型的代码如下: ```matlab % 生成电能质量扰动信号模型 fs = 10000; % 采样频率 T = 1/fs; % 采样时间间隔 t = 0:T:0.1; % 信号时间序列 N = length(t); % 信号长度 % 生成正弦波信号 f0 = 50; % 基频频率 A0 = 220; % 基频幅值 s1 = A0*sin(2*pi*f0*t); % 生成谐波信号 f2 = 2*f0; % 二次谐波频率 A2 = 0.2*A0; % 二次谐波幅值 s2 = A2*sin(2*pi*f2*t); f3 = 3*f0; % 三次谐波频率 A3 = 0.1*A0; % 三次谐波幅值 s3 = A3*sin(2*pi*f3*t); % 生成电压闪变信号 sigma = 0.2; % 闪变指数 V = 220; % 电压基准值 sa = 0.8*V; % 闪变幅值 t1 = 2*T; % 闪变持续时间 t2 = 5*T; % 闪变间隔时间 s4 = zeros(1,N); for i = 1:N if mod(i-1,(t1+t2)/T) < t1/T s4(i) = sa*exp(-((i-1)/fs)^2/(2*sigma^2)); end end % 生成电压谐波含量不平衡信号 f4 = 4*f0; % 四次谐波频率 A4 = 0.3*A0; % 四次谐波幅值 s5 = A4*sin(2*pi*f4*t); f5 = 5*f0; % 五次谐波频率 A5 = 0.2*A0; % 五次谐波幅值 s6 = A5*sin(2*pi*f5*t); % 组合各个信号 s = s1 + s2 + s3 + s4 + s5 + s6; % 绘制信号波形图 figure; plot(t,s); xlabel('时间/s'); ylabel('电压/V'); title('电能质量扰动信号波形图'); % 绘制信号频谱图 NFFT = 2^nextpow2(N); Y = fft(s,NFFT)/N; f = fs/2*linspace(0,1,NFFT/2+1); figure; plot(f,2*abs(Y(1:NFFT/2+1))); xlabel('频率/Hz'); ylabel('幅值'); title('电能质量扰动信号频谱图'); ``` 这段代码可以生成包含正弦波、谐波、电压闪变和电压谐波含量不平衡等多种扰动信号电能质量扰动信号模型,并绘制信号波形图和频谱图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

建模先锋

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值