
Wave Folding

Sandbo
This small snippet allows one to efficiently fold and average a 1D wave containing periodic data, for instances, a wave of 100 points containing ten cycles of 10-point data.
The end result is a 10-point 1D wave containing the averaged results of the ten cycles originally contained by the 100-point 1D wave.
function foldWave(foldedWave, waveToFold) wave foldedWave, waveToFold variable numRowfW = numpnts(foldedWave) variable numRowwTF = numpnts(waveToFold) variable numFold = floor(numRowwTF/numRowfw) duplicate/o/R=[0,numFold*numRowfW] waveToFold, fWMatrix redimension/N=(numRowfW, numFold,0,0) fWMatrix multithread foldedWave = meanRow(fwMatrix,p) end threadsafe static Function MeanRow (wave2D, whichRow) wave wave2D variable whichRow MatrixOP/O/free w=row(wave2D,whichRow)^t return mean(w) End

Forum

Support

Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More
Two quick suggestions:
1. You may want to add /FREE to your duplicate command. This should clean out the fWMatrix which you should not really need when execution completes.
2. You could simplify
multithread foldedWave = meanRow(fwMatrix,p)
using:
MatrixOP/O/FREE aa=averageCols(fwMatrix^t)^t
A.G.
January 18, 2019 at 02:49 pm - Permalink