gitting project in git
This commit is contained in:
113
python/read_data_file.py
Executable file
113
python/read_data_file.py
Executable file
@@ -0,0 +1,113 @@
|
||||
import ctypes
|
||||
import os.path
|
||||
import time
|
||||
import numpy as np
|
||||
from matplotlib import pyplot as plt
|
||||
import socket
|
||||
|
||||
import data_structures
|
||||
import radar_manager
|
||||
from data_recorder import DataRecorder
|
||||
|
||||
|
||||
def db20(x):
|
||||
return 20*np.log10(np.abs(x))
|
||||
|
||||
|
||||
def db20n(x):
|
||||
x = db20(x)
|
||||
x = x - np.max(x)
|
||||
return x
|
||||
|
||||
|
||||
def main():
|
||||
print('Hello')
|
||||
|
||||
clk = 187.5e6
|
||||
|
||||
# Parse Data
|
||||
headers = []
|
||||
offset = 0
|
||||
|
||||
file = 'test0.bin'
|
||||
fid = open(file, 'rb')
|
||||
|
||||
# Find header, recording buffer could have wrapped depending on data rate and how long we ran for
|
||||
hdr_sync = False
|
||||
while not hdr_sync:
|
||||
# data = recorder.buffer[offset:offset + 4]
|
||||
data = fid.read(4)
|
||||
sync_word = np.frombuffer(data, dtype=np.uint32)[0]
|
||||
if sync_word == 0xAABBCCDD:
|
||||
hdr_sync = True
|
||||
print('Header found at offset', offset)
|
||||
fid.seek(-4, 1)
|
||||
|
||||
# Get the first header
|
||||
header = fid.read(ctypes.sizeof(data_structures.CpiHeader))
|
||||
header = data_structures.CpiHeader.from_buffer_copy(header)
|
||||
fid.seek(-ctypes.sizeof(data_structures.CpiHeader), 1)
|
||||
|
||||
|
||||
# CPI Parameters (timing values are in clk ticks)
|
||||
num_pulses = header.num_pulses
|
||||
num_samples = header.num_samples
|
||||
pri = header.pri
|
||||
inter_cpi = header.inter_cpi
|
||||
data_size = num_pulses * num_samples * 4
|
||||
|
||||
file_size = os.path.getsize(file)
|
||||
expected_num_cpis = int(file_size / (ctypes.sizeof(data_structures.CpiHeader) + data_size))
|
||||
print('Expected CPIS:', expected_num_cpis)
|
||||
|
||||
|
||||
for i in range(expected_num_cpis):
|
||||
# Get Header
|
||||
data = fid.read(ctypes.sizeof(data_structures.CpiHeader))
|
||||
headers.append(data_structures.CpiHeader.from_buffer_copy(data))
|
||||
|
||||
# Get CPI
|
||||
data = fid.read(data_size)
|
||||
|
||||
# Check some header fields
|
||||
cpi_times = np.array([x.system_time for x in headers]) / 187.5e6
|
||||
pps_frac = np.array([x.pps_frac_sec for x in headers]) / 187.5e6
|
||||
pps_sec = np.array([x.pps_sec for x in headers])
|
||||
utc_time = pps_sec + pps_frac
|
||||
print(pri, inter_cpi, num_pulses * pri + inter_cpi)
|
||||
print(cpi_times - cpi_times[0])
|
||||
print(pps_frac)
|
||||
print(pps_sec - pps_sec[0])
|
||||
|
||||
# Plot last CPI
|
||||
data2 = np.frombuffer(data, dtype=np.int16)
|
||||
i = data2[0::2]
|
||||
q = data2[1::2]
|
||||
iq = i + 1j * q
|
||||
iq = iq.reshape(-1, num_samples)
|
||||
iq = iq + 1e-15
|
||||
|
||||
vmin = -60
|
||||
vmax = 0
|
||||
|
||||
plt.figure()
|
||||
plt.plot(np.diff(cpi_times))
|
||||
|
||||
plt.figure()
|
||||
plt.plot(iq.T.real, '.-')
|
||||
plt.plot(iq.T.imag, '--.')
|
||||
plt.grid()
|
||||
|
||||
plt.figure()
|
||||
plt.imshow(db20n(iq), aspect='auto', interpolation='nearest', vmin=vmin, vmax=vmax)
|
||||
plt.ylabel('Pulse Count')
|
||||
plt.xlabel('Sample Count')
|
||||
plt.colorbar()
|
||||
|
||||
|
||||
plt.show()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
main()
|
||||
Reference in New Issue
Block a user