123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- import itertools as itt
- import sys
- import re
- import time
- import datetime
- import serial
- import win32event
- import win32file
- import win32api
- import pywintypes
- import subprocess
- import matplotlib
- import numpy as np
- from sklearn.linear_model import LinearRegression
- from scipy.signal import butter, filtfilt
- freq = 3000000
- sample_rate = 2000000
- amp = 1
- xgain = 35
- rf_filename = "test_linreg.bin"
- port = 11
- adc_filename = "pico_params.xml"
- below_trigger = False
- sync_filename = "Sync_param.xml"
- pico_rate = 80e6
- # sample rate - 1st element
- # period - 2nd element
- # inverse duty cycle - 3rd element
- # number - 4th element
- def load_csv(file_path):
- try:
- with open(file_path, 'r', encoding='utf-8') as f:
- cleaned_lines = []
- for line in f:
- line = line.strip()
- if line.endswith(','):
- line = line[:-1]
- cleaned_lines.append(line)
- f.close()
- loaded_array = np.loadtxt(cleaned_lines, delimiter=',')
- if loaded_array.ndim == 1:
- loaded_array = loaded_array.reshape(-1, 1)
- return loaded_array
- except Exception as e:
- print(f"Could not load file:\n{e}")
- return -1
- ls_tup = [
- list(item)
- for item in itt.product(
- range(1, 5),
- range(1, 8),
- range(1, 6),
- range(1, 5)
- )
- ]
- ls_ls = []
- for tup in ls_tup:
- ls_ls.append(list(tup))
- for x in ls_ls:
- if x[0] == 1: # sr in MHz
- x[0] = 2
- elif x[0] == 2:
- x[0] = 8
- elif x[0] == 3:
- x[0] = 10
- elif x[0] == 4:
- x[0] = 20
- if x[1] == 1: # period in ms
- x[1] = 0.24
- elif x[1] == 2:
- x[1] = 0.48
- elif x[1] == 3:
- x[1] = 0.96
- elif x[1] == 4:
- x[1] = 1.92
- elif x[1] == 5:
- x[1] = 3.84
- elif x[1] == 6:
- x[1] = 7.68
- elif x[1] == 7:
- x[1] = 11.52
- if x[2] == 1: # idc
- x[2] = 1.5
- elif x[2] == 2:
- x[2] = 2
- elif x[2] == 3:
- x[2] = 4
- elif x[2] == 4:
- x[2] = 8
- elif x[2] == 5:
- x[2] = 10
- if x[3] == 1: # time in sec
- x[3] = 100
- elif x[3] == 2:
- x[3] = 200
- elif x[3] == 3:
- x[3] = 400
- elif x[3] == 4:
- x[3] = 800
- x.append(x[1]*x[3])
- print(f"Num mes: {len(ls_ls) * 3}")
- res = 0
- y = np.array([])
- with open('delays.txt', 'r', encoding='utf-8') as f:
- cleaned_lines = []
- for line in f:
- res = re.split(r'[=;\n ]', line)
- for item in res:
- if item == 'delay':
- print(f'Delay: {float(res[4]) / 2}')
- y = np.append(y, [float(res[4]) / 2])
- f.close()
- for i in range(0, len(ls_ls)):
- with open('delays_updated.txt', 'a', encoding='utf-8') as f:
- f.write(f'sr = {ls_ls[i][0]} MHz; period = {ls_ls[i][1]} ms; idc = {ls_ls[i][2]}; time = {ls_ls[i][3]} s;\ndelay = {y[i]} nS;\n')
- f.close()
- print(np.size(y))
- reg = LinearRegression().fit(np.array(ls_ls), y)
- scr = reg.score(np.array(ls_ls), y)
- print('Coef: ', reg.coef_)
- print('Intercept: ', reg.intercept_)
- with open('regression5.txt', 'w', encoding='utf-8') as f:
- f.write(f'score = {scr};\nsr_coef = {reg.coef_[0]};\nperiod_coef = {reg.coef_[1]} ns/ms;\nidc_coef = {reg.coef_[2]};\nnum_coef = {reg.coef_[3]} ns/num;time_coef = {reg.coef_[4]} ns/ms;\nintercept = {reg.intercept_}\n\n')
- f.close()
|