def process(self): ret = self.rawDataRingBuf.getOldest() if ret != False: rawDataBuf, retreiveLock = ret # this immediate lock release is *probably* a bad idea, but as long as the buffer doesn't get almost entirely full, it should be OK. # It will also prevent blockages in the output buffer from propigating back to the input buffer. retreiveLock.release() # seqNum, dataDict = tmp["data"] # samples, triggers = dataDict["data"], dataDict["triggers"] # print(len(samples)) # samples = fft.fft(samples) # print "Doing FFT", seqNum samples = SignalHound.fastDecodeArray(rawDataBuf, SignalHound.rawSweepArrSize, np.short) for x in range(self.chunksPerAcq * self.overlap - 1): # Create byte-aligned array for efficent FFT, and copy the data we're interested into it. rets = pyfftw.n_byte_align_empty(self.outputSize, 16, dtype=np.complex64) dat = samples[x * (self.fftChunkSize / self.overlap): (x * (self.fftChunkSize / self.overlap)) + self.fftChunkSize] * self.window self.fftFunc(dat, rets) fftArr = self.fftFunc.get_output_array() # # log.warning("Buf = %s, arrSize = %s, dtype=%s, as floats = %s", processedDataBuf, fftArr.shape, fftArr.dtype, fftArr.view(dtype=np.float32).shape) # try: # processedDataBuf, addLock = self.fftDataRingBuf.getAddArray() # processedDataBuf[:] = fftArr.view(dtype=np.float32) # finally: # addLock.release() x += 1 return 1 return 0
def process(self): ret = self.rawDataRingBuf.getOldest() if ret != False: rawDataBuf, retreiveLock = ret # this immediate lock release is *probably* a bad idea, but as long as the buffer doesn't get almost entirely full, it should be OK. # It will also prevent blockages in the output buffer from propigating back to the input buffer. retreiveLock.release() # seqNum, dataDict = tmp["data"] # samples, triggers = dataDict["data"], dataDict["triggers"] # print(len(samples)) # samples = fft.fft(samples) # print "Doing FFT", seqNum samples = SignalHound.fastDecodeArray(rawDataBuf, SignalHound.rawSweepArrSize, np.short) for x in range(self.chunksPerAcq*self.overlap-1): # Create byte-aligned array for efficent FFT, and copy the data we're interested into it. rets = pyfftw.n_byte_align_empty(self.outputSize, 16, dtype=np.complex64) dat = samples[x*(self.fftChunkSize/self.overlap):(x*(self.fftChunkSize/self.overlap))+self.fftChunkSize] * self.window self.fftFunc(dat, rets) fftArr = self.fftFunc.get_output_array() # # log.warning("Buf = %s, arrSize = %s, dtype=%s, as floats = %s", processedDataBuf, fftArr.shape, fftArr.dtype, fftArr.view(dtype=np.float32).shape) # try: # processedDataBuf, addLock = self.fftDataRingBuf.getAddArray() # processedDataBuf[:] = fftArr.view(dtype=np.float32) # finally: # addLock.release() x += 1 return 1 return 0