コード例 #1
0
ファイル: fftWorker.py プロジェクト: doyke/SignalHoundSA
    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
コード例 #2
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