你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

匝间短路故障学习历程(六) -- 批处理问题

2021/11/11 10:36:53

在上边的处理过程中都是通过对单个样本进行的操作,比如说对正常样本或者故障样本进行加噪去噪或者说进行小波变换,但是在想进行故障诊断的时候需要同时对大量样本进行操作,那么这样的话就需要进行批处理操作,才能不使得数据处理起来太麻烦。

在进行批处理的时候如果用的是python的话,写个for循环,然后将数据以矩阵的形式或者向量的形式进行迭代读取,然后对每种信号进行统一的操作就行了,但是如果你用的是MATLAB进行操作的话可能就会遇到一些常见的问题,然后可能网上也没有很好的解决办法或者说,没有很明确的方法能够解决这个问题,那么刚好通过这个来记录一下怎么用MATLAB做信号分析的批处理操作。

大体思路是这样:

(1)将整个数据集分为很多个列矢量,因为信号处理的时候是需要将数据变为列矢量,才能通过小波函数进行操作。

(2)将列矢量保存到一个文件夹中,然后进行挨个读取。

(3)对每读取的一个列矢量进行小波变换,小波基的选择和分解层数的选择之前就已经做过了。

(4)对每一层系数进行提取特征。

(5)对提取出来的特征进行降维或者叫进行特征矢量的选择来表征原始信号的特征。

(6)对提取完的特征进行保存,保存为矩阵的形式,方便进行神经网络的训练。

首先第一步,就是将所用到的数据集进行导入,然后在MATLAB上进行变为列矢量,上边有直接转换的方法。然后他会将所有的列矢量当做变量保存在工作区,然后对没一个进行单独的保存(我还没有找到很好的办法可以一次性的保存所有的变量),结果就和下边图一样。

 第二步就是将这些所有的mat文件进行读取,网上有很多别的文件的读取方式,见得最多的就是一些声音或者图片的读取,就是CSV格式的或者img格式的,这些网上很多有教程,但是对于这种信号的我去搜了搜,没看见一个说的很详细的。所以我就去查了下文档,然后自己摸索的过程中发现了一种方法可以进行读取。

info = dir('C:\Users\\模拟数据\*.mat')
%读取这个文件夹里所有的文件%

for ii = 1:length(info)%一共有多少个文件,就会进行循环多少次,保证每一个文件都会被读取到%
    name = info(ii).name;%因为读取之后的文件是一个struct结构体的变量,这样的话是不能进行操作的,所以我们要进行想办法将每一个文件的数据进行读取%
    file = fullfile('C:\Users\s\模拟数据\',name);%通过索引每一个文件的名字来进行读取,因为每一个文件的名字是不一样的,也可以通过别的进行索引,上边结构体的返回医用会有六种属性:    name 、 folder、 date、bytes、isdir、datenum%
     x = importdata(file);%这一步是最关键的一步,就是通过这个importdata函数进行读取每一个文件的数据内容,而且读取之后会保存为一个数组,不是struct类型的数组,而是一般的数组,这样的话就可以对这个变量进行小波函数的操作%

...%在这里你就可以对你的信号可以做一些你想要做的操作,而且每一个操作都会是对每一个文件都会操作的%

end

第三步就是对信号进行小波变换,这之前其实已经做过了,大体说一下注意的点,在对每一种进行操作的时候要注意保存得我情况。因为你想要的是没处理完一次数据就会进行一次的保存,所以在设定变量的时候就需要一点点小操作。

分解的时候还不需要进行操作,因为我们需要的是对每一层的小波系数进行取值,在取值的时候就需要进行保存,比如说

   

% 计算分解信号的能量值
    E(ii) = sum(x.^2);

    Ea1(ii) = sum(a1^2);
    Ea2(ii) = sum(a2.^2);
    Ea3(ii) = sum(a3.^2);
    Ea4(ii) = sum(a4.^2);
%在这里,E(ii)就是对每一个信号进行取值操作,而下边的就是对每一层系数进行取值,然后保存的时候会按照ii的不同保存到不同的变量中就可以进行每一个样本的保存了%

在处理完这个之后会形成一个一维的矩阵,这个矩阵里边的值的顺序就是对应这你这些操作的顺序。

接下来几步就可以针对你做完的特征提取进行操作了,比如说降维,就可以用到主成分分析的方法,存取数据就可以直接将变量里边的保存。

注:这里会提醒你一个问题就是变量预分配内存的问题,大体意思就是你如果不把这些变量进行预分配的话会占用很多的内存并且会导致计算速度变慢,因为你这些内存是在每一次的循环过程中都是进行变化的,所以要针对这个问题将变量预分配内存。具体的可以看下边这个链接:

预分配 - MATLAB & Simulink - MathWorks 中国

MATLAB 如何分配内存 - MATLAB & Simulink - MathWorks 中国