3.matlab的smooth研究

上次使用smooth(data,50),进行传参数

SMOOTH  Smooth data.
    Z = SMOOTH(Y) smooths data Y using a 5-point moving average.
 
    Z = SMOOTH(Y,SPAN) smooths data Y using SPAN as the number of points used
    to compute each element of Z.
 
    Z = SMOOTH(Y,SPAN,METHOD) smooths data Y with specified METHOD. The
    available methods are: 
 
            'moving'   - Moving average (default)
            'lowess'   - Lowess (linear fit)
            'loess'    - Loess (quadratic fit)
            'sgolay'   - Savitzky-Golay
            'rlowess'  - Robust Lowess (linear fit)
            'rloess'   - Robust Loess (quadratic fit)
 
    Z = SMOOTH(Y,METHOD) uses the default SPAN 5.
 
    Z = SMOOTH(Y,SPAN,'sgolay',DEGREE) and Z = SMOOTH(Y,'sgolay',DEGREE)
    additionally specify the degree of the polynomial to be used in the
    Savitzky-Golay method. The default DEGREE is 2. DEGREE must be smaller
    than SPAN.
 
    Z = SMOOTH(X,Y,...) additionally specifies the X coordinates.  If X is
    not provided, methods that require X coordinates assume X = 1:N, where
    N is the length of Y.
 
    Notes:
    1. When X is given and X is not uniformly distributed, the default method
    is 'lowess'.  The 'moving' method is not recommended.
 
    2. For the 'moving' and 'sgolay' methods, SPAN must be odd.
    If an even SPAN is specified, it is reduced by 1. 
 
    3. If SPAN is greater than the length of Y, it is reduced to the
    length of Y.
 
    4. In the case of (robust) lowess and (robust) loess, it is also
    possible to specify the SPAN as a percentage of the total number
    of data points. When SPAN is less than or equal to 1, it is
    treated as a percentage.
 
    For example:
 
    Z = SMOOTH(Y) uses the moving average method with span 5 and
    X=1:length(Y).
 
    Z = SMOOTH(Y,7) uses the moving average method with span 7 and 采用跨度为7的移动平均法
    X=1:length(Y).
 
    Z = SMOOTH(Y,'sgolay') uses the Savitzky-Golay method with DEGREE=2,
    SPAN = 5, X = 1:length(Y).
 
    Z = SMOOTH(X,Y,'lowess') uses the lowess method with SPAN=5.
 
    Z = SMOOTH(X,Y,SPAN,'rloess') uses the robust loess method.
 
    Z = SMOOTH(X,Y) where X is unevenly distributed uses the
    'lowess' method with span 5.
 
    Z = SMOOTH(X,Y,8,'sgolay') uses the Savitzky-Golay method with
    span 7 (8 is reduced by 1 to make it odd).
 
    Z = SMOOTH(X,Y,0.3,'loess') uses the loess method where span is
    30% of the data, i.e. span = ceil(0.3*length(Y)).
 
    See also SPLINE.

寻找到的可能可以使用吧,如下:作为平滑smooth


void smooth(double *input_data, unsigned int len, double *output_data, unsigned int span){
    unsigned int i = 0,
            j = 0;
    unsigned int pn = 0,
            n = 0;
    double sum = 0.0;
    
    if (span % 2 == 1){
        n = (span - 1) / 2;
    } else{
        n = (span - 2) / 2;
    }
    
    for (i = 0; i < len; ++i){
        pn = n;
        
        if (i < n){
            pn = i;
        } else if ((len - 1 - i) < n){
            pn = len - i - 1;
        }
        
        sum = 0.0;
        for (j = i - pn; j <= i + pn; ++j){
            sum += input_data[j];
        }
        
        output_data[i] = sum / (pn * 2 + 1);
    }
}

猜你喜欢

转载自blog.csdn.net/dongxinddd123/article/details/84986841