smooth

 

Description

Smooth a curve or a numeric vector using Adjacent Averaging, FFT, Savitzky-Golay or Median filter.

Syntax

bool smooth( vector & vY, int imethod = 0, int ileftpts = 3, int irightpts = 3, int ipolydeg = 2 )
bool smooth(Curve &crv, int imethod = 0, int ileftpts = 3, int irightpts = 3, int ipolydeg = 2)

Parameters

vY
[modify] input data to be smoothed.
imethod
[input] method: Adjacent Averaging (default 0), FFT (1), Savitzky-Golay (2), or Median(3).
ileftpts
[input] left points (default is 3).
irightpts
[input] right points (default is 3, Savitzky-Golay only).
ipolydeg
[input] degree of polynomial (default is 2, Savitzky-Golay only).

crv
[modify] Origin C Curve object
imethod
[input] method: Adjacent Averaging (default 0), FFT (1), Savitzky-Golay (2), or Median(3).
ileftpts
[input] left points (default is 3).
irightpts
[input] right points (default is 3, Savitzky-Golay only).
ipolydeg
[input] degree of polynomial (default is 2, Savitzky-Golay only).

Return

Returns TRUE on success and FALSE on failure.

Examples

EX1

// This example will return the result like following:
//    Smoothing on Data4_B succeeded.
//    Method=0, LeftPts=2
// And the data in the 3rd column will be :
/*
0.097
0.25288
0.37823
0.32324
0.45531
0.44601
0.44514
*/
void smooth_ex1()
{
    int Method, ADJAV = 0 , FFT = 1 , SG = 2; // Method types
    int LPts;     // Points at left
    int RPts, PolyDeg ; // Paramethers only for S-G
    BOOL rc;
 
    Worksheet wks;
    wks.Create();
    String wksName=wks.GetPage().GetName();
    Dataset myXDs(wks,0);
    Dataset myYDs(wks,1);
    String strYName = myYDs.GetName();
    wks.AddCol("Smoothed");     // Add a column to backup the original
    Dataset mySmooth(wks,2);    // Target of smoothing operation
 
    //******* Create sample data *****************
    myXDs.SetSize(7);
    myYDs.SetSize(7);
    mySmooth.SetSize(7);
    myXDs[0]=1;    myYDs[0]=0.097;     mySmooth[0]=myYDs[0];
    myXDs[1]=2;    myYDs[1]=0.41256;    mySmooth[1]=myYDs[1];
    myXDs[2]=3;    myYDs[2]=0.24909;    mySmooth[2]=myYDs[2];
    myXDs[3]=4;    myYDs[3]=0.47304;    mySmooth[3]=myYDs[3];
    myXDs[4]=5;    myYDs[4]=0.2476;    mySmooth[4]=myYDs[4];
    myXDs[5]=6;    myYDs[5]=0.64529;    mySmooth[5]=myYDs[5];
    myXDs[6]=7;    myYDs[6]=0.44514;    mySmooth[6]=myYDs[6];
    //******** End of Sample Data Creation *******
 
    Method=ADJAV;
    LPts=2; 
    RPts=0;
    PolyDeg=0;
    Curve myCrv(wks,0,2);

    rc = smooth(myCrv, Method, LPts, RPts, PolyDeg);  // Demonstration of smooth
 
    if(rc)
    {
        if(Method==SG)
            printf("Smoothing on %s succeeded.\n  Method=%d, LeftPts=%d, RightPts=%d, PolyOrder=%d\n",
                strYName, Method, LPts, RPts, PolyDeg);
        else 
            printf("Smoothing on %s succeeded.\n  Method=%d, LeftPts=%d\n",
                strYName, Method, LPts);
    }
    else
        printf("Error: Smoothing failed.\n",rc);
}

EX2

// This example will return the result like following:
/*
Smoothing successfully, with result as :
0.097000
0.252883
0.378230
0.323243
0.455310
0.446010
0.445140
*/
void smooth_ex2()
{
    //******* Create sample data *****************
    vector vY;
    vY.SetSize(7);
    vY[0]=0.097;
    vY[1]=0.41256;
    vY[2]=0.24909;
    vY[3]=0.47304;
    vY[4]=0.2476;
    vY[5]=0.64529;
    vY[6]=0.44514;;
    //******** End of Sample Data Creation *******
    int Method = 0; //Adjacent Averaging
    int LPts=2; // Points at left
    int RPts=0;// Paramethers only for S-G
    int PolyDeg=0;
  
    bool bRet = smooth(vY, Method, LPts, RPts, PolyDeg);  // Demonstration of smooth
    if ( bRet )
    {
        out_str("Smoothing successfully, with result as :");
        for ( int ii = 0; ii < vY.GetSize(); ii++ )
        {
                printf("%lf\n", vY[ii]);
        }
    }
    else
        out_str("Smoothing fails.");
    
}

Remark

Smooth a vector using Adjacent Averaging, FFT, Savitzky-Golay or Median filter.

See Also

header to Include

origin.h

Reference