import os import pandas as pd # Path settings input_file = r'G:\Users\Chipistil\Desktop\High-throughput-T2NP-Memristor-based-Dual-clock-edge-sampling-TRNG\Data Conversion\tdelay+tr.txt' output_file = r'G:\Users\Chipistil\Desktop\High-throughput-T2NP-Memristor-based-Dual-clock-edge-sampling-TRNG\Data Conversion\tr.xlsx' data = [] with open(input_file, 'r') as f: for line in f: line = line.strip() if line: cols = line.split() if len(cols) >= 3: col1 = round(float(cols[0]), 4) col2 = round(float(cols[1]), 4) col3 = round(float(cols[2]), 4) data.append((col1, col2, col3)) tr_list = [] n = len(data) i = 0 def find_rg_cluster(start_idx): in_cluster = False consecutive_230 = 0 for j in range(start_idx, n): current = data[j][2] if not in_cluster: if current == 2.30: if j + 10 <= n: next_10_values = [data[k][2] for k in range(j+1, j+11)] if all(val < 2.30 for val in next_10_values): in_cluster = True rg0 = j consecutive_230 = 0 else: if current == 2.30: consecutive_230 += 1 if consecutive_230 >= 6: cluster_end = j - consecutive_230 + 1 return (rg0, cluster_end), cluster_end + 1 else: consecutive_230 = 0 if in_cluster: return (rg0, n-1), n return None, n def locate_key_points(start, end): rg0 = start rg1 = None for j in range(rg0 + 1, min(n, end + 1000)): if data[j][2] == 0.00: rg1 = j break if rg1 is None: return None, None t1 = (data[rg1][0] + data[rg0][0]) / 2 rg2 = None rg3 = None started = False for j in range(rg0 + 1, min(n, end + 1000)): if not started: if data[j][1] > 2.9: started = True rg2 = j else: if data[j][1] > 2.9: rg2 = j elif data[j][1] < 0.5: rg3 = j break if rg2 is None or rg3 is None: return t1, None t2 = (data[rg3][0] + data[rg2][0]) / 2 return t1, t2 while i < n: rg_range, new_i = find_rg_cluster(i) if rg_range: start, end = rg_range t1, t2 = locate_key_points(start, end) if all([t1, t2]): tr = round(t2 - t1, 4) tr_list.append((tr, round(t1, 4), round(t2, 4))) i = new_i else: i += 1 if tr_list: df = pd.DataFrame(tr_list, columns=['tr', 't1', 't2']) df.to_excel(output_file, index=False) print(f"Processing completed, found {len(tr_list)} valid tr values, written to Excel file") else: print("No valid tr values found")