import json import base64 import numpy as np import scipy.fft as fft import matplotlib.pyplot as plt class DataDecoder: def __init__(self, filename): self.data = '' with open(filename, 'r') as file: self.data = file.read() self.structed_data = json.loads(self.data) def getRawData(self, averaging_num=0, data_num=0, channel_num=0): for items in self.structed_data: if(items['averaging_num'] == averaging_num and items['data_num'] == data_num): for channel_data in items['channel_data']: if(channel_data['channel_num'] == channel_num): return channel_data['channel_data'] return None def getDataDecoded(self, averaging_num=0, data_num=0, channel_num=0, points=10): rawData = self.getRawData(averaging_num, data_num, channel_num) edata = base64.b64decode(rawData.encode('utf-8')) arr = np.frombuffer(edata, dtype=np.int16, count=points, offset=0) return arr def getDataScaled(self, averaging_num=0, data_num=0, channel_num=0, points=10, range=5.0): decodedData = self.getDataDecoded(averaging_num, data_num, channel_num, points) return range * decodedData / 32768 def getDataRate(self, averaging_num=0, data_num=0): for items in self.structed_data: if(items['averaging_num'] == averaging_num and items['data_num'] == data_num): return items['measurement_rate'] def getDataSpectrum(self, averaging_num=0, data_num=0, channel_num=0, points=10, range=5.0, zero_fill=0): scaledData = self.getDataScaled(averaging_num, data_num, channel_num, points, range) zerofilledData = np.append(scaledData, np.zeros(zero_fill)) rate = self.getDataRate() transferedData = fft.rfft(zerofilledData) * 2 / points freqs = fft.rfftfreq(points+zero_fill, 1/rate) spectrum = np.abs(transferedData) phases = np.angle(transferedData) spect_dict = {'freqs': freqs, 'phases': phases, 'spectrum': spectrum} return spect_dict def getDataPoints(self, averaging_num=0, data_num=0, channel_num=0): for items in self.structed_data: if(items['averaging_num'] == averaging_num and items['data_num'] == data_num): return items['measurement_points'][channel_num] #dec = DataDecoder('saved_new.json') #print('getRawData(0, 0, 1):') #print(dec.getRawData(0, 0, 1)) # ::getRawData(averagingIndex, dataTriggerIndex, channelIndex) #print('\n') #print('getDataDecoded(0, 0, 0, 100):') #a = dec.getDataDecoded(0, 0, 0, 100) #print(a[0:100]) # ::getDataDecoded(averagingIndex, dataTriggerIndex, channelIndex, count) #print('\n') #print('getDataScaled(0, 1, 1, 100, 5.0):') #a = dec.getDataScaled(0, 1, 1, 100, 5.0) #print(a[0:100]) #print('\n') #print('getDataSpectrum(0, 1, 1, max_points, 5.0, max_points):') #points = dec.getDataPoints(0, 1, 1) #spect_dict = dec.getDataSpectrum(0, 1, 1, points, 5.0, 10000) #print('\n')