【问题标题】:How can I calculate the rolling mean, skewness, kurtosis, RMS and few other statistical features from an input vector?如何从输入向量中计算滚动平均值、偏度、峰度、RMS 和其他一些统计特征?
【发布时间】:2017-05-25 21:50:47
【问题描述】:

我以 40 Hz 的速率每秒收集一个信号,持续 3 小时,数据长度为 432,000。我想计算每分钟的平均值、偏度、峰度和其他一些统计特征。从某种意义上说,我想计算前 40 个数据点和后 40 个数据点的平均值,依此类推。最后我希望有一个长度为 180 点的向量。如果有人可以共享执行此操作的脚本,那就太好了。提前致谢。

【问题讨论】:

    标签: matlab signals signal-processing


    【解决方案1】:
    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
    

    【讨论】:

    • 感谢分享脚本。这个脚本中的步骤是什么?请原谅我的无知,再次感谢
    • 步长可以视为抽取整数。每个step 计数,您都会在window 长度的区间内计算一些值。
    • 另请参阅与关于起源的时刻的关系en.wikipedia.org/wiki/Central_moment
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2013-01-19
    • 2014-02-21
    • 2019-04-01
    • 2013-03-28
    • 1970-01-01
    • 2012-01-07
    相关资源
    最近更新 更多