Matlab实现数据分析的流程与技巧

前言

本算法是在一组数据中取当前时间前相同间隔(T_iner)的一组数(length),然后算出这组数的平均数,方差,超过A1,A2的比率。做完处理后继续更新数组,将新采的数取代旧数。每更替一次做一次数据分析。

一、Simulink模型

Matlab作数据分析 matlab如何进行数据分析_simulink


模型还是比较简单的,开关的上面接入是需要处理的源数据,中间接入的是state,state为1是,源数据有效,state为0时,源数据无效记0.所以中间添加了一个开关模块。中间有一个模块是matlab function模块,是为了处理源数据。输出端接了一个示波器,验证处理效果。

二、Matlab function具体代码讲解

function [Mean,Var,Over1,Over2 ]= fcn(data)

function中[]个数代表输出个数和数据,fcn中()是输入个数和数据,本例中就是单输入,多输出。

length=30;           %数组长度
sample_time = 0.005; %采样时间
T_iner = 0.25;       %多少秒进行一次数据处理
                     %Mean 平均数
Sum = single(0);     % Sum 总和
Var0 = single(0);    %Var 数据的方差
A1=0.08;             %Over1 超过A1的比率
A2=0.1;              %Over2 超过A2的比率
Counter1=0;          % 超过a1的个数
Counter2=0;          % 超过a2的个数

数据处理的一些基本设置,本算法是在一组数据中取当前时间前相同间隔(T_iner)的一组数(length),然后算出这组数的平均数,方差,超过A1,A2的比率。做完处理后继续更新数组,将新采的数取代旧数。每更替一次做一次数据分析。

persistent Array_buff;
if isempty(Array_buff)     %初始化方法
    Array_buff = single(zeros(length,1));  %定义0数组,多行一列的数组类型
end
persistent counter;
if isempty(counter)        %初始化方法
    counter = single(0);
end
counter =counter +1;      %循环次数,每加一做一次处理

persistent: 相当于C++中的Static,定义静态变量;
persistent只被定义persistent的函数所知晓/访问,其他函数无法访问或改变它的值。当m文件被从内存中清除或m文件改变时,persistent变量才会被清除。如果要让m文件在matlab退出前一直在内存中保留,则使用mlock。如果persistent变量中第一次使用时未进行初始化赋值,则初始化为空矩阵。
如果workspace中已经有同名变量,则声明persistent变量会出错。
注意,不可使用继承来引用persistent变量。

%% main fun

if counter ==T_iner/sample_time 
    for i = 1:1:(length-1)                     %假设length=10,该for循环就是将数组的后9个数往前平移一次,然后
        Array_buff(i,1) = Array_buff(i+1,1);   %把新采的数放在第10位,这样就达成了更新数组的目的。
        Array_buff(length,1)= data;
    end
    counter = single(0);                       %每更新一次数组,counter清零。
end
% length*T_iner 秒后才能将第一轮数组数据填满
for i=1:1:length
    Sum=Sum+Array_buff(i,1);
end
Mean=Sum/length;

for i=1:1:length
    Var0=Var0+(Array_buff(i,1)-Mean)*(Array_buff(i,1)-Mean);
end
Var=Var0/length;

for i=1:1:length
    if Array_buff(i,1)>A1
        Counter1=Counter1+1;
    end
end

for i=1:1:length
    if Array_buff(i,1)>A2
        Counter2=Counter2+1;
    end
end
Over1=Counter1/length;
Over2=Counter2/length;

以上就是一些求数组平均数的简单算法。

源代码

function [Mean,Var,Over1,Over2 ]= fcn(data)

length=30;                 %数组长度
sample_time = 0.005;       %采样时间
T_iner = 0.25;     %多少秒进行一次数据处理
                   %Mean 平均数
Sum = single(0);   % Sum 总和
Var0 = single(0);  %Var 数据的方差
A1=0.08;           %Over1 超过A1的比率
A2=0.1;            %Over2 超过A2的比率
Counter1=0;      % 超过a1的个数
Counter2=0;      % 超过a2的个数
%%

persistent Array_buff;
if isempty(Array_buff)     %初始化方法
    Array_buff = single(zeros(length,1)); %定义0数组,多行一列的数组类型
end

persistent counter;
if isempty(counter)     %初始化方法
    counter = single(0);
end

counter =counter +1;

%% main fun   

if counter ==T_iner/sample_time
    for i = 1:1:(length-1)
        Array_buff(i,1) = Array_buff(i+1,1);   %假设length=10,该for循环就是将数组的后9个数往前平移一次,然后
        Array_buff(length,1)= data;            %把新采的数放在第10位,这样就达成了更新数组的目的。
    end
    counter = single(0);                       %每更新一次数组,counter清零。
end
% length*T_iner 秒后才能将第一轮数组数据填满

%% 处理模块

for i=1:1:length
    Sum=Sum+Array_buff(i,1);
end
Mean=Sum/length;

for i=1:1:length
    Var0=Var0+(Array_buff(i,1)-Mean)*(Array_buff(i,1)-Mean);
end
Var=Var0/length;

for i=1:1:length
    if Array_buff(i,1)>A1
        Counter1=Counter1+1;
    end
end

for i=1:1:length
    if Array_buff(i,1)>A2
        Counter2=Counter2+1;
    end
end
Over1=Counter1/length;
Over2=Counter2/length;
end
   


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空