def tsPhasePow(freqs,tseries,width=5,resample=None,keepBuffer=False, verbose=False,to_return='both',freqDimName='freq'): """ Calculate phase and/or power on an TimeSeries, returning new TimeSeries instances. """ if (to_return != 'both') and (to_return != 'pow') and (to_return != 'phase'): raise ValueError("to_return must be \'pow\', \'phase\', or \'both\' to\ specify whether power, phase, or both should be returned. Invalid\ value for to_return: %s " % to_return) # first get the phase and power as desired res = calcPhasePow(freqs,tseries.data,tseries.samplerate,axis=tseries.tdim, width=width,verbose=verbose,to_return=to_return) # handle the dims tsdims = tseries.dims.copy() # add in frequency dimension freqDim = Dim(freqDimName,freqs,'Hz') tsdims.insert(0,freqDim) # turn them into timeseries if to_return == 'pow' or to_return == 'both': # turn into a timeseries powerAll = TimeSeries(res,tsdims, tseries.samplerate,unit='XXX get pow unit', tdim=-1,buf_samp=tseries.buf_samp) powerAll.data[powerAll.data<=0] = N.finfo(powerAll.data.dtype).eps # see if resample if resample: # must take log before the resample powerAll.data = N.log10(powerAll.data) powerAll.resample(resample) powerAll.data = N.power(10,powerAll.data) # see if remove buffer if not keepBuffer: powerAll.removeBuf() if to_return == 'phase' or to_return == 'both': # get the phase matrix phaseAll = TimeSeries(res,tsdims, tseries.samplerate,unit='radians', tdim=-1,buf_samp=tseries.buf_samp) if resample: # must unwrap before resampling phaseAll.data = N.unwrap(phaseAll.data) phaseAll.resample(resample) phaseAll.data = N.mod(phaseAll.data+N.pi,2*N.pi)-N.pi; # see if remove buffer if not keepBuffer: phaseAll.removeBuf() # see what to return if to_return == 'pow': return powerAll elif to_return == 'phase': return phaseAll elif to_return == 'both': return phaseAll,powerAll