如何从输入向量计算滚动平均值,偏度,峰度,RMS和其他一些统计特征? [英] How can I calculate the rolling mean, skewness, kurtosis, RMS and few other statistical features from an input vector?

查看:195
本文介绍了如何从输入向量计算滚动平均值,偏度,峰度,RMS和其他一些统计特征?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我以40 Hz的频率每秒采集一次信号,持续3个小时,数据长度为432,000.我想计算每分钟的均值,偏度,峰度和其他一些统计特征.从某种意义上说,我想计算前40个数据点和后40个数据点的平均值,依此类推.最后,我希望有一个长度为180点的向量.如果有人可以共享一个脚本来做到这一点,那将是很好的.预先感谢.

解决方案

function [M, S, A, E] = slideStats( x, window, step)
% sliding: M-mean, S-std,  A-skewness, E-kurtosis

n=fix((length(x)-window)/step+1);
M=zeros(n,1);
S=zeros(n,1);
E=zeros(n,1);
A=zeros(n,1);

sum=0;
mean=0;
mean2=0;
mean3=0;
mean4=0;

for i=1:window
    sum = x(i);
    mean = mean + sum;
    sum = sum * x(i);
    mean2 = mean2 + sum;
    sum = sum * x(i);
    mean3 = mean3 + sum;
    sum = sum * x(i);
    mean4 = mean4 + sum;
end
mean=mean/window;
mean2=mean2/window;
mean3=mean3/window;
mean4=mean4/window;

M(1)= mean;
S(1)= (mean2-mean*mean)^0.5;
A(1)= (mean3-3*mean2*mean+2*mean*mean*mean) /S(1)^3;
E(1)= (mean4-4*mean3*mean+6*mean2*mean*mean-3*mean*mean*mean*mean) /S(1)^4 -3;

for i=0:n-2
    for k=1:step
        stepInd = i*step;    
        first = stepInd+k;
        last = stepInd+k+window;

    % recalculating means without previous element
        sum = x(first)/window;
        mean  = mean - sum;
        sum = sum*x(first);
        mean2 = mean2 - sum;
        sum = sum*x(first);
        mean3 = mean3 - sum;
        sum = sum*x(first);
        mean4 = mean4 - sum;

    % recalculating means with next element
        sum = x(last)/window;
        mean = mean + sum;
        sum = sum * x(last);
        mean2 = mean2 + sum;
        sum = sum * x(last);
        mean3 = mean3 + sum;
        sum = sum * x(last);
        mean4 = mean4 + sum;
    end

    M(i+2)= mean;
    S(i+2)= (mean2-mean*mean)^0.5;
    A(i+2)= (mean3-3*mean2*mean+2*mean*mean*mean) /S(i+2)^3;
    E(i+2)= (mean4-4*mean3*mean+6*mean2*mean*mean-3*mean*mean*mean*mean) /S(i+2)^4 -3;
end

end

I have a signal collected every second for 3 hours at the rate of 40 Hz and the data length is 432,000. I want to calculate mean, skewness, kurtosis and few other statistical features for every minute. In the sense, I want to calculate the mean of first 40 data points and the second 40 data points and so on. In the end I wish to have a vector of length 180 points. It would be great if someone can share a script for doing this. Thanks in advance.

解决方案

function [M, S, A, E] = slideStats( x, window, step)
% sliding: M-mean, S-std,  A-skewness, E-kurtosis

n=fix((length(x)-window)/step+1);
M=zeros(n,1);
S=zeros(n,1);
E=zeros(n,1);
A=zeros(n,1);

sum=0;
mean=0;
mean2=0;
mean3=0;
mean4=0;

for i=1:window
    sum = x(i);
    mean = mean + sum;
    sum = sum * x(i);
    mean2 = mean2 + sum;
    sum = sum * x(i);
    mean3 = mean3 + sum;
    sum = sum * x(i);
    mean4 = mean4 + sum;
end
mean=mean/window;
mean2=mean2/window;
mean3=mean3/window;
mean4=mean4/window;

M(1)= mean;
S(1)= (mean2-mean*mean)^0.5;
A(1)= (mean3-3*mean2*mean+2*mean*mean*mean) /S(1)^3;
E(1)= (mean4-4*mean3*mean+6*mean2*mean*mean-3*mean*mean*mean*mean) /S(1)^4 -3;

for i=0:n-2
    for k=1:step
        stepInd = i*step;    
        first = stepInd+k;
        last = stepInd+k+window;

    % recalculating means without previous element
        sum = x(first)/window;
        mean  = mean - sum;
        sum = sum*x(first);
        mean2 = mean2 - sum;
        sum = sum*x(first);
        mean3 = mean3 - sum;
        sum = sum*x(first);
        mean4 = mean4 - sum;

    % recalculating means with next element
        sum = x(last)/window;
        mean = mean + sum;
        sum = sum * x(last);
        mean2 = mean2 + sum;
        sum = sum * x(last);
        mean3 = mean3 + sum;
        sum = sum * x(last);
        mean4 = mean4 + sum;
    end

    M(i+2)= mean;
    S(i+2)= (mean2-mean*mean)^0.5;
    A(i+2)= (mean3-3*mean2*mean+2*mean*mean*mean) /S(i+2)^3;
    E(i+2)= (mean4-4*mean3*mean+6*mean2*mean*mean-3*mean*mean*mean*mean) /S(i+2)^4 -3;
end

end

这篇关于如何从输入向量计算滚动平均值,偏度,峰度,RMS和其他一些统计特征?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆