I have a code that creates this plot , but I don’t know how to remove the first data from “channel 1” - the red line, and the last data from “channel 3” - the blue line, these vertical lines. There are 266,336 entries in both channels, can you help? The red vertical line is the first record, and the blue is the last.
import iodata as io
import matplotlib.pyplot as plt
import numpy as np
import time
testInstance = io.InputConverter()
start = time.time()
conversionError = io.ConversionError()
f = testInstance.convert(r"/Users/Hugo/20160401", "201604010000",
conversionError)
end = time.time()
print("time elapsed " + str(end - start))
if(conversionError.conversionSucces):
print("Conversion succesful")
if(conversionError.conversionSucces == False):
print("Conversion failed: " + conversionError.conversionErrorLog)
print "Done!"
a = np.amin(f.f)
filename = 'C:/Users/Hugo/20160401/201604010000.dat'
d = open(filename,'rb')
t = u"\u00b0"
headersize = 64
header = d.read(headersize)
ax1 = plt.subplot(211)
ax1.set_title(header[:16] + ', ' +
'Canals: '+header[32:33]+' and '+header[34:35]+ ', '
+'Temp'+header[38:43]+t+'C'
+', '+'Time:'+header[26:32]+', '+'Date'+' '+header[16:26])
plt.ylabel('Pico Tesle [pT]')
plt.xlabel('Time [ms]')
plt.plot(f.f[0,], label='Canal 1', color='r', linewidth=0.75, linestyle="-")
plt.plot(f.f[1,], label='Canal 3', color='b', linewidth=0.75, linestyle="-")
plt.legend(loc='upper right', frameon=False)
plt.grid()
plt.subplot(212)
plt.title('Fast Fourier Transform')
plt.ylabel('Power [a.u.]')
plt.xlabel('Frequency Hz')
FFTdata = np.sqrt(f.f[0,]*f.f[0,]+f.f[1,]*f.f[1,])**1
samples = FFTdata.size
duration = 300
Fs = float(samples)/duration
delta_t = 1.0/Fs
t = np.arange(0, samples, 1)*delta_t
FFTdata_freq = np.abs(np.fft.rfft(FFTdata))**2
freq = np.fft.rfftfreq(samples, d=delta_t)
plt.semilogy(freq, FFTdata_freq)
plt.grid()
'tight')
plt.show()
Content f.f:
>>> print f.f[0,]
[ -59.57011259 -74.20675537 -90.53224156 ..., -1676.9703173 -1676.9703173 -1676.9703173 ]
>>> print f.f[1,]
[ 1.48413511e+00 4.96417605e+00 8.39303992e+00 ..., -1.67697032e+03 -1.67697032e+03 -1.67697032e+03]
Iodata Code:
import struct
import numpy as np
class ConversionError:
def __init__(self):
self.conversionSucces = True
self.conversionErrorLog = "Correct"
def reportFailure(self, errorlog):
self.conversionSucces = False
self.conversionErrorLog = errorlog
class DataStruct:
def __init__(self,f,initTime,headerString):
self.f = f
self.initTime = initTime
self.headerString = headerString
class InputConverter:
def __init__(self):
self.midAdc = 65536/2
self.convFactor = 19.54
def convert(self,filePath,fileName,conversionLog):
try:
d_file = open(filePath + "/" + fileName + ".dat", mode='rb')
except IOError as e:
conversionLog.reportFailure(e.strerror)
file = d_file.read()
datalen = len(file)
headerString = file[:43]
initime, = struct.unpack('>H', file[48:50])
expectedMatrixWidth = (datalen - 72)/4
outputMatrix = np.zeros((2, expectedMatrixWidth))
index = 0;
print "Processing..."
for i in range(64, datalen-8, 4):
e1, e2 = struct.unpack('>HH',file[i:i+4])
outputMatrix[0, index] = (e1 - self.midAdc)/self.convFactor
outputMatrix[1, index] = (e2 - self.midAdc)/self.convFactor
index += 1
return DataStruct(outputMatrix,initime,headerString)