[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/tools/IQ_Analyzer/src/IQ_Utils.py b/mcu/tools/IQ_Analyzer/src/IQ_Utils.py
new file mode 100644
index 0000000..7a6fb4b
--- /dev/null
+++ b/mcu/tools/IQ_Analyzer/src/IQ_Utils.py
@@ -0,0 +1,180 @@
+import math
+import numpy as np
+
+class L:
+ fw = None
+ @staticmethod
+ def logopen(f_path):
+ L.fw = open(f_path,"w")
+
+ @staticmethod
+ def info(infostr):
+ print infostr
+ file_string = infostr + '\n'
+ L.fw.write(file_string)
+ @staticmethod
+ def logclose():
+ L.fw.close()
+ L.fw = None
+
+def bi2de(binary):
+ decValue = int(binary, 2)
+
+ return decValue
+
+def twos_comp(val, bits):
+
+ """compute the 2's compliment of int value val"""
+ if (val & (1 << (bits - 1))) != 0: # if sign bit is set e.g., 8bit: 128-255
+ val = val - (1 << bits) # compute negative value
+ return val
+
+
+def readTimeInfoFile(time_file_path):
+
+ print "\n"
+ print "Opening Time Info File...."
+
+ # Determine number of time stamps in the file
+ fr_TIME = open(time_file_path,"r+")
+ time_file_line_count = 0
+ while True:
+ time_file_line_count = time_file_line_count + 1
+ if fr_TIME.readline() == '':
+ time_file_line_count = time_file_line_count - 1
+ break
+
+ # Read and store all time stamps
+ fr_TIME = open(time_file_path,"r+")
+ file_mat = [0 for y in range(time_file_line_count)]
+ for kk in xrange(0,time_file_line_count):
+ file_mat[kk] = fr_TIME.readline()
+
+ #Determine FRC capture time boundaries
+ startFRC = file_mat[0]
+ endingFRC = file_mat[-1]
+
+ print "Time info file contains starting FRC:",
+ print str(int(math.floor(int(startFRC.partition(' ')[0],16) / 64))) + "(64us)"
+ print "Time info file contains ending FRC:",
+ print str(int(math.floor(int(endingFRC.partition(' ')[0],16) / 64))) + "(64us)"
+
+ return file_mat
+
+
+
+def det_iqPairCount(inputTimeMat,frc_):
+
+ frc_64 = frc_ * 64
+
+ print "\n"
+ print "Input FRC:" + str(frc_) + "(64us)"
+ print "Identifying SIB PCC Packet Data from input FRC...."
+
+ #Covert inputFile FRC column to int
+ FRC_col_int = [0] * len(inputTimeMat)
+ for kk in xrange(0,len(inputTimeMat)):
+ line_string = inputTimeMat[kk]
+ FRC_col_int[kk] = int(line_string.partition(' ')[0],16)
+
+ #Find packet idx in Time Info File
+ min_FRC_idx = np.argmin([np.absolute(x-frc_64) for x in FRC_col_int])
+
+ #Accumulate packed sizes until min_FRC_idx time row
+ line_add = 0
+ for jj in xrange(0,min_FRC_idx):
+ line_string = inputTimeMat[jj]
+ line_split = line_string.split()
+ line_add = line_add + int(line_split[3],16)
+ #print [line_split[3], int(line_split[3],16), line_add]
+
+ print "Found input FRC in packet with FRC_Time:" + str(FRC_col_int[min_FRC_idx]/64) + "(64us) - {id: " + hex(FRC_col_int[min_FRC_idx]) + "}"
+ #print [min_FRC_idx, FRC_col_int[min_FRC_idx], frc_64]
+
+ line_split = inputTimeMat[min_FRC_idx].split()
+ line_split_next = inputTimeMat[min_FRC_idx+1].split()
+
+ packet_size = 4 * int(line_split[3],16) #Fetch packet size
+ packet_frc = int(line_split[0],16) #Fetch packet start
+ packet_frc_next = int(line_split_next[0],16) #Fetch next packet start
+
+ frc_diff1 = frc_64 - packet_frc #Determine start and input FRC difference
+ frc_diff2 = packet_frc_next - packet_frc #Determine start and next(packet) FRC difference
+
+ t_diff_ratio = frc_diff1 / float(frc_diff2)
+ packet_fraction = int(t_diff_ratio * packet_size)
+
+# print [packet_frc, frc_64, frc_diff1]
+# print [packet_frc, packet_frc_next, frc_diff2]
+# print [packet_size, t_diff_ratio, packet_fraction]
+
+ iqPair_count = 4 * line_add + packet_fraction
+ return iqPair_count
+
+
+def CFO_stats_print( inst_CFO, cumm_CFO, cfo_count):
+
+ fw = L.fw
+ print ""
+ print "CFO Report (Instantaneous)"
+ print "--------------------------"
+ fw.write('\n')
+ fw.write("CFO Report (Instantaneous)")
+ fw.write("--------------------------")
+ fw.write('\n')
+ for kk in xrange(0,5):
+
+ print "Subframe %d (Hz):" % kk,
+ string = "Subframe " + str(kk) + " (Hz):"
+ fw.write(string)
+ if (kk<4):
+ v_ = inst_CFO[:,4*kk:4*kk+4]
+ print "{:10.4f} {:10.4f} {:10.4f} {:10.4f}".format(float(v_[:,0]),float(v_[:,1]),float(v_[:,2]),float(v_[:,3]))
+ string = "{:10.4f} {:10.4f} {:10.4f} {:10.4f}".format(float(v_[:,0]),float(v_[:,1]),float(v_[:,2]),float(v_[:,3]))
+ string = string + '\n'
+ fw.write(string)
+ else:
+ v_ = inst_CFO[:,4*kk:]
+ print "{:10.4f} {:10.4f} {:10.4f}".format(float(v_[:,0]),float(v_[:,1]),float(v_[:,2]))
+ string = "{:10.4f} {:10.4f} {:10.4f}".format(float(v_[:,0]),float(v_[:,1]),float(v_[:,2]))
+ string = string + '\n'
+ fw.write(string)
+ print ""
+
+ print ""
+ print "CFO Report (Avg)"
+ print "--------------------------"
+ fw.write('\n')
+ fw.write("CFO Report (Avg)")
+ fw.write("--------------------------")
+ fw.write('\n')
+ for kk in xrange(0,5):
+ print "Subframe %d (Hz): " % kk,
+ string = "Subframe " + str(kk) + " (Hz):"
+ fw.write(string)
+ if (kk<4):
+ v_ = cumm_CFO[:,4*kk:4*kk+4]
+ print "{:10.4f} {:10.4f} {:10.4f} {:10.4f}".format(float(v_[:,0]),float(v_[:,1]),float(v_[:,2]),float(v_[:,3]))
+ string = "{:10.4f} {:10.4f} {:10.4f} {:10.4f}".format(float(v_[:,0]),float(v_[:,1]),float(v_[:,2]),float(v_[:,3]))
+ string = string + '\n'
+ fw.write(string)
+ else:
+ v_ = cumm_CFO[:,4*kk:]
+ print "{:10.4f} {:10.4f} {:10.4f}".format(float(v_[:,0]),float(v_[:,1]),float(v_[:,2]))
+ string = "{:10.4f} {:10.4f} {:10.4f}".format(float(v_[:,0]),float(v_[:,1]),float(v_[:,2]))
+ string = string + '\n'
+ fw.write(string)
+ print ""
+ fw.write('\n')
+
+def xor(a,b):
+ xor_result=[0]*len(a)
+ for i in range(len(a)):
+ temp = (int(a[i])^int(b[i]))
+ xor_result[i] = temp
+ return xor_result
+
+
+def diff_stable(first, second):
+ second = set(second)
+ return [item for item in first if item not in second]
\ No newline at end of file