#pragma rtGlobals=1 // Use modern global access method. Function makeSineWave(freq) Variable freq setdatafolder "root:" Make/O/N=8192/D taxis //2^13 SetScale/I x 0,100,"s", taxis taxis = x/100 * 2*pi //create a 2Hz sine wave String sineWaveName = "sine" + num2str(freq) + "Hz" Duplicate/O taxis, $sineWaveName Wave sineWave = $sineWaveName sineWave = 6*sin(2*pi * freq * taxis) //create wave that is is phase shifted by +45deg relative to the first one @ ~double freq., smaller amplitude String sineWave45Name = "sine" + num2str(freq*2) + "Hz_45deg" Duplicate/O taxis, $sineWave45Name Wave sineWave45 = $sineWave45Name sineWave45 = 4*sin(2*pi * 2*freq * taxis - pi/4) String sineWaveInterpName = "sine" + num2str(freq) + "Hz_interp" Duplicate/O sineWave, $sineWaveInterpName Wave sineWaveInterp = $sineWaveInterpName WaveStats taxis SetScale/I x V_min, V_max, sineWaveInterp sineWaveInterp = interp(x, taxis, sineWave) String sineWave45InterpName = "sine" + num2str(freq*2) + "Hz_45deg_interp" Duplicate/O sineWave45, $sineWave45InterpName Wave sineWave45Interp = $sineWave45InterpName SetScale/I x V_min, V_max, "s", sineWave45Interp sineWave45Interp = interp(x, taxis, sineWave45) //create superpos of the 2 waves String superposInterpName = "superpos" + num2str(freq) + "Hz_interp" Duplicate/O sineWave, $superposInterpName Wave superposInterp = $superposInterpName SetScale/I x V_min, V_max, "s", superposInterp superposInterp = sineWaveInterp + sineWave45Interp End Function createIFFT(superposWave) Wave superposWave String superposFFT = wavename("",5,4) + "_FFT" Duplicate/O superposWave, $superposFFT FFT/OUT=1/DEST=$superposFFT superposWave End Function extractPeak(fftWave,startPt,endPt) Wave fftWave Variable startPt,endPt //create subset of the wave with the wanted peak only, auto routes to time domain String fftPeakName = wavename("",6,4) + "_Pk" Duplicate/O/R=(startPt,endPt) fftWave, $fftPeakName String ifftWave = wavename("",6,4) + "_Pk_IFFT" Duplicate $fftPeakName $ifftWave IFFT/DEST=$fftPeakName $ifftWave End