From c56217e15a4c81413e04655f8dcd809f155a381f 2012-12-22 02:31:34 From: Miguel Valdez Date: 2012-12-22 02:31:34 Subject: [PATCH] Se anadio el modulo cfunctions donde se agrego la funcion optimizada para decodificar --- diff --git a/schainpy/model/cfunctions.pyx b/schainpy/model/cfunctions.pyx new file mode 100644 index 0000000..ebd7da4 --- /dev/null +++ b/schainpy/model/cfunctions.pyx @@ -0,0 +1,10 @@ +import numpy +cimport numpy + +def decoder(numpy.ndarray[numpy.float32_t, ndim=2] fft_code, numpy.ndarray[numpy.float32_t, ndim=2] data): + + fft_data = numpy.fft.fft(data, axis=1) + conv = fft_data*fft_code + data = numpy.fft.ifft(conv, axis=1) + + return data \ No newline at end of file diff --git a/schainpy/model/jroprocessing.py b/schainpy/model/jroprocessing.py index dc07f3c..df250e2 100644 --- a/schainpy/model/jroprocessing.py +++ b/schainpy/model/jroprocessing.py @@ -12,6 +12,11 @@ from jrodata import * from jrodataIO import * from jroplot import * +try: + import cfunctions +except: + pass + class ProcessingUnit: """ @@ -591,9 +596,9 @@ class Decoder(Operation): self.__nChannels, self.__nHeis = shape - self.__codeBuffer = numpy.zeros((self.nCode, self.__nHeis)) + self.__codeBuffer = numpy.zeros((self.nCode, self.__nHeis), dtype=numpy.float) - self.__codeBuffer[:,0:self.nBaud] = self.code[:,:] + self.__codeBuffer[:,0:self.nBaud] = self.code self.fft_code = numpy.conj(numpy.fft.fft(self.__codeBuffer, axis=1)) @@ -623,7 +628,23 @@ class Decoder(Operation): return ndatadec, datadec + def convolutionInFreqOpt(self, data): + + fft_code = self.fft_code[self.__profIndex].reshape(1,-1) + + data = cfunctions.decoder(fft_code, data) + datadec = data[:,:-self.nBaud+1] + ndatadec = self.__nHeis - self.nBaud + 1 + + if self.__profIndex == self.nCode-1: + self.__profIndex = 0 + return ndatadec, datadec + + self.__profIndex += 1 + + return ndatadec, datadec + def convolutionInTime(self, data): self.__nChannels, self.__nHeis = data.shape diff --git a/schainpy/model/setup.py b/schainpy/model/setup.py new file mode 100644 index 0000000..f680492 --- /dev/null +++ b/schainpy/model/setup.py @@ -0,0 +1,6 @@ +from distutils.core import setup +from distutils.extension import Extension +from Cython.Distutils import build_ext +setup( + cmdclass = {'build_ext': build_ext}, + ext_modules = [Extension("cfunctions", ["cfunctions.pyx"])] ) \ No newline at end of file