Average of all points in a bunch of 1D waves

Hopefully this will be useful to somebody. This function will get a bunch of 1D waves (number of points not relevant) and find the average value (mean or median) of all points in each wave and put the average into a point in a new wave.

//This function will find the average of all points for each 1D wave in a batch of waves and then put the result
//into a new wave. So n waves will give a wave n points.
//It requires a sensible root naming convention, e.g. cell1_veh_0, cell1_veh_1...
//Use "opt" to specific "mean" or "median".
Function AvgWaves(root,opt) //call example AvgWaves("cell1_veh","mean")
    String root
    String opt
   
    String rootstar=root + "*"
    String wavenames=wavelist(rootstar,";","") //gets the wavelist of batch of waves
   
    String ResultWave="W_" + opt + "_" + root  
    String LabelWave="T_" + opt + "_" + root
    Variable nwaves =ItemsInList(wavenames)
    Make /O/N=(nwaves) $ResultWave  //average values will go in this wave
    Make /O/T/N=(nwaves) $LabelWave //wave names will go in this textwave
    Wave w0 = $ResultWave
    Wave/T wT = $LabelWave
   
    Variable i
    Variable tempvar
    String name
   
    if (stringmatch(opt,"mean")==1)
   
    For (i = 0; i < nwaves; i += 1)
        name = StringFromList(i,wavenames)
        Wave /z w1 = $name
        Duplicate /o w1 tempwave            //not required
        WaveTransform zapnans, tempwave //not required
        tempvar=mean(tempwave)
        w0[i]=tempvar
        wT[i]=name
        Killwaves tempwave
    endfor
   
    elseif (stringmatch(opt,"median")==1)
   
    For (i = 0; i < nwaves; i += 1)
        name = StringFromList(i,wavenames)
        Wave /z w1 = $name
        Duplicate /o w1 tempwave
        WaveTransform zapnans, tempwave
        tempvar=StatsMedian(tempwave)
        w0[i]=tempvar
        wT[i]=name
        Killwaves tempwave
    endfor
   
    else    //error message
        Print "Select mean or median (in quotes) for opt"
        return 0
    Endif
End

Forum

Support

Gallery

Igor Pro 8

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More