##// END OF EJS Templates
Bugs fixed:...
Miguel Valdez -
r660:5880e83e7e4e
parent child
Show More
@@ -200,9 +200,9 class VoltageProc(ProcessingUnit):
200 """
200 """
201 Si la data es obtenida por bloques, dimension = [nChannels, nProfiles, nHeis]
201 Si la data es obtenida por bloques, dimension = [nChannels, nProfiles, nHeis]
202 """
202 """
203 data = self.dataOut.data[:,minIndex:maxIndex,:]
203 data = self.dataOut.data[:,:, minIndex:maxIndex]
204 else:
204 else:
205 data = self.dataOut.data[:,minIndex:maxIndex]
205 data = self.dataOut.data[:, minIndex:maxIndex]
206
206
207 # firstHeight = self.dataOut.heightList[minIndex]
207 # firstHeight = self.dataOut.heightList[minIndex]
208
208
@@ -566,6 +566,13 class Decoder(Operation):
566 print 'IOError: Number of heights (%d) should be greater than number of bauds (%d)' %(self.__nHeis, self.nBaud)
566 print 'IOError: Number of heights (%d) should be greater than number of bauds (%d)' %(self.__nHeis, self.nBaud)
567 raise IOError, 'Number of heights (%d) should be greater than number of bauds (%d)' %(self.__nHeis, self.nBaud)
567 raise IOError, 'Number of heights (%d) should be greater than number of bauds (%d)' %(self.__nHeis, self.nBaud)
568
568
569 #Frequency
570 __codeBuffer = numpy.zeros((self.nCode, self.__nHeis), dtype=numpy.complex)
571
572 __codeBuffer[:,0:self.nBaud] = self.code
573
574 self.fft_code = numpy.conj(numpy.fft.fft(__codeBuffer, axis=1))
575
569 if dataOut.flagDataAsBlock:
576 if dataOut.flagDataAsBlock:
570
577
571 self.ndatadec = self.__nHeis #- self.nBaud + 1
578 self.ndatadec = self.__nHeis #- self.nBaud + 1
@@ -573,18 +580,13 class Decoder(Operation):
573 self.datadecTime = numpy.zeros((self.__nChannels, self.__nProfiles, self.ndatadec), dtype=numpy.complex)
580 self.datadecTime = numpy.zeros((self.__nChannels, self.__nProfiles, self.ndatadec), dtype=numpy.complex)
574
581
575 else:
582 else:
576
577 __codeBuffer = numpy.zeros((self.nCode, self.__nHeis), dtype=numpy.complex)
578
579 __codeBuffer[:,0:self.nBaud] = self.code
580
581 self.fft_code = numpy.conj(numpy.fft.fft(__codeBuffer, axis=1))
582
583
584 #Time
583 self.ndatadec = self.__nHeis #- self.nBaud + 1
585 self.ndatadec = self.__nHeis #- self.nBaud + 1
584
586
585 self.datadecTime = numpy.zeros((self.__nChannels, self.ndatadec), dtype=numpy.complex)
587 self.datadecTime = numpy.zeros((self.__nChannels, self.ndatadec), dtype=numpy.complex)
586
588
587 def convolutionInFreq(self, data):
589 def __convolutionInFreq(self, data):
588
590
589 fft_code = self.fft_code[self.__profIndex].reshape(1,-1)
591 fft_code = self.fft_code[self.__profIndex].reshape(1,-1)
590
592
@@ -594,11 +596,9 class Decoder(Operation):
594
596
595 data = numpy.fft.ifft(conv,axis=1)
597 data = numpy.fft.ifft(conv,axis=1)
596
598
597 datadec = data#[:,:]
599 return data
598
600
599 return datadec
601 def __convolutionInFreqOpt(self, data):
600
601 def convolutionInFreqOpt(self, data):
602
602
603 raise NotImplementedError
603 raise NotImplementedError
604
604
@@ -610,7 +610,7 class Decoder(Operation):
610 #
610 #
611 # return datadec
611 # return datadec
612
612
613 def convolutionInTime(self, data):
613 def __convolutionInTime(self, data):
614
614
615 code = self.code[self.__profIndex]
615 code = self.code[self.__profIndex]
616
616
@@ -619,7 +619,7 class Decoder(Operation):
619
619
620 return self.datadecTime
620 return self.datadecTime
621
621
622 def convolutionByBlockInTime(self, data):
622 def __convolutionByBlockInTime(self, data):
623
623
624 repetitions = self.__nProfiles / self.nCode
624 repetitions = self.__nProfiles / self.nCode
625
625
@@ -629,10 +629,22 class Decoder(Operation):
629
629
630 for i in range(self.__nChannels):
630 for i in range(self.__nChannels):
631 for j in range(self.__nProfiles):
631 for j in range(self.__nProfiles):
632 self.datadecTime[i,j,:] = numpy.correlate(data[i,j,:], code_block[j,:], mode='same')
632 self.datadecTime[i,j,:] = numpy.correlate(data[i,j,:], code_block[j,:], mode='full')[self.nBaud-1:]
633
633
634 return self.datadecTime
634 return self.datadecTime
635
635
636 def __convolutionByBlockInFreq(self, data):
637
638 fft_code = self.fft_code[self.__profIndex].reshape(1,-1)
639
640 fft_data = numpy.fft.fft(data, axis=2)
641
642 conv = fft_data*fft_code
643
644 data = numpy.fft.ifft(conv,axis=2)
645
646 return data
647
636 def run(self, dataOut, code=None, nCode=None, nBaud=None, mode = 0, osamp=None, times=None):
648 def run(self, dataOut, code=None, nCode=None, nBaud=None, mode = 0, osamp=None, times=None):
637
649
638 if dataOut.flagDecodeData:
650 if dataOut.flagDecodeData:
@@ -652,25 +664,32 class Decoder(Operation):
652 if self.code is None:
664 if self.code is None:
653 print "Fail decoding: Code is not defined."
665 print "Fail decoding: Code is not defined."
654 return
666 return
655
667
668 datadec = None
669
656 if dataOut.flagDataAsBlock:
670 if dataOut.flagDataAsBlock:
657 """
671 """
658 Decoding when data have been read as block,
672 Decoding when data have been read as block,
659 """
673 """
660 datadec = self.convolutionByBlockInTime(dataOut.data)
674 if mode == 0:
661
675 datadec = self.__convolutionByBlockInTime(dataOut.data)
676 if mode == 1:
677 datadec = self.__convolutionByBlockInFreq(dataOut.data)
662 else:
678 else:
663 """
679 """
664 Decoding when data have been read profile by profile
680 Decoding when data have been read profile by profile
665 """
681 """
666 if mode == 0:
682 if mode == 0:
667 datadec = self.convolutionInTime(dataOut.data)
683 datadec = self.__convolutionInTime(dataOut.data)
668
684
669 if mode == 1:
685 if mode == 1:
670 datadec = self.convolutionInFreq(dataOut.data)
686 datadec = self.__convolutionInFreq(dataOut.data)
671
687
672 if mode == 2:
688 if mode == 2:
673 datadec = self.convolutionInFreqOpt(dataOut.data)
689 datadec = self.__convolutionInFreqOpt(dataOut.data)
690
691 if datadec is None:
692 raise ValueError, "Codification mode selected is not valid: mode=%d. Try selecting 0 or 1" %mode
674
693
675 dataOut.code = self.code
694 dataOut.code = self.code
676 dataOut.nCode = self.nCode
695 dataOut.nCode = self.nCode
@@ -678,7 +697,7 class Decoder(Operation):
678
697
679 dataOut.data = datadec
698 dataOut.data = datadec
680
699
681 dataOut.heightList = dataOut.heightList[0:self.ndatadec]
700 dataOut.heightList = dataOut.heightList[0:datadec.shape[-1]]
682
701
683 dataOut.flagDecodeData = True #asumo q la data esta decodificada
702 dataOut.flagDecodeData = True #asumo q la data esta decodificada
684
703
@@ -794,11 +813,6 class ProfileSelector(Operation):
794
813
795 dataOut.flagNoData = True
814 dataOut.flagNoData = True
796
815
797 if nProfiles:
798 self.nProfiles = dataOut.nProfiles
799 else:
800 self.nProfiles = nProfiles
801
802 if dataOut.flagDataAsBlock:
816 if dataOut.flagDataAsBlock:
803 """
817 """
804 data dimension = [nChannels, nProfiles, nHeis]
818 data dimension = [nChannels, nProfiles, nHeis]
@@ -823,77 +837,81 class ProfileSelector(Operation):
823
837
824 return True
838 return True
825
839
840 """
841 data dimension = [nChannels, nHeis]
842 """
843
844 if nProfiles:
845 self.nProfiles = nProfiles
826 else:
846 else:
827 """
847 self.nProfiles = dataOut.nProfiles
828 data dimension = [nChannels, nHeis]
848
849 if profileList != None:
829
850
830 """
851 dataOut.nProfiles = len(profileList)
831 if profileList != None:
832
833 dataOut.nProfiles = len(profileList)
834
835 if self.isThisProfileInList(dataOut.profileIndex, profileList):
836 dataOut.flagNoData = False
837 dataOut.profileIndex = self.profileIndex
838
839 self.incIndex()
840 return True
841
842
852
843 if profileRangeList != None:
853 if self.isThisProfileInList(dataOut.profileIndex, profileList):
844
854 dataOut.flagNoData = False
845 minIndex = profileRangeList[0]
855 dataOut.profileIndex = self.profileIndex
846 maxIndex = profileRangeList[1]
847
848 dataOut.nProfiles = maxIndex - minIndex + 1
849
856
850 if self.isThisProfileInRange(dataOut.profileIndex, minIndex, maxIndex):
857 self.incIndex()
851 dataOut.flagNoData = False
858 return True
852 dataOut.profileIndex = self.profileIndex
859
853
860 if profileRangeList != None:
854 self.incIndex()
855 return True
856
861
857 if rangeList != None:
862 minIndex = profileRangeList[0]
858
863 maxIndex = profileRangeList[1]
859 nProfiles = 0
864
860
865 dataOut.nProfiles = maxIndex - minIndex + 1
861 for thisRange in rangeList:
866
862 minIndex = thisRange[0]
867 if self.isThisProfileInRange(dataOut.profileIndex, minIndex, maxIndex):
863 maxIndex = thisRange[1]
868 dataOut.flagNoData = False
864
869 dataOut.profileIndex = self.profileIndex
865 nProfiles += maxIndex - minIndex + 1
866
870
867 dataOut.nProfiles = nProfiles
871 self.incIndex()
872 return True
873
874 if rangeList != None:
875
876 nProfiles = 0
877
878 for thisRange in rangeList:
879 minIndex = thisRange[0]
880 maxIndex = thisRange[1]
881
882 nProfiles += maxIndex - minIndex + 1
883
884 dataOut.nProfiles = nProfiles
885
886 for thisRange in rangeList:
868
887
869 for thisRange in rangeList:
888 minIndex = thisRange[0]
889 maxIndex = thisRange[1]
890
891 if self.isThisProfileInRange(dataOut.profileIndex, minIndex, maxIndex):
870
892
871 minIndex = thisRange[0]
872 maxIndex = thisRange[1]
873
874 if self.isThisProfileInRange(dataOut.profileIndex, minIndex, maxIndex):
875
876 # print "profileIndex = ", dataOut.profileIndex
893 # print "profileIndex = ", dataOut.profileIndex
877
878 dataOut.flagNoData = False
879 dataOut.profileIndex = self.profileIndex
880
881 self.incIndex()
882 break
883 return True
884
894
885
886 if beam != None: #beam is only for AMISR data
887 if self.isThisProfileInList(dataOut.profileIndex, dataOut.beamRangeDict[beam]):
888 dataOut.flagNoData = False
895 dataOut.flagNoData = False
889 dataOut.profileIndex = self.profileIndex
896 dataOut.profileIndex = self.profileIndex
890
897
891 self.incIndex()
898 self.incIndex()
892 return 1
899 break
900 return True
901
902
903 if beam != None: #beam is only for AMISR data
904 if self.isThisProfileInList(dataOut.profileIndex, dataOut.beamRangeDict[beam]):
905 dataOut.flagNoData = False
906 dataOut.profileIndex = self.profileIndex
907
908 self.incIndex()
909
910 return True
893
911
894 raise ValueError, "ProfileSelector needs profileList, profileRangeList or rangeList parameter"
912 raise ValueError, "ProfileSelector needs profileList, profileRangeList or rangeList parameter"
895
913
896 return 0
914 return False
897
915
898
916
899
917
General Comments 0
You need to be logged in to leave comments. Login now