In questo quaderno viene presentata la procedura che permette di utilizzare i dati letti dall'oscilloscopio nel contesto delle linee di trasmissione.
In questo caso nella stessa cartella in cui si trova questo quaderno è presente una cartella "dati" al cui interno si trovano tutti i files esportati dall'oscilloscopio
import numpy as np
import os
from matplotlib import pyplot as plt
# Definisco la directory dei dati
dataPath = r"./dati"
# Cerco i set di dati esistenti
lstFiles = []
for e in os.scandir(dataPath):
lstFiles.append(e.name.split(".")[0])
"""
Il comando set mi permette di ottenere gli elementi unici, ovvero di eliminare la
degenerazione di ordine 3 dovuta alla presenza di 3 files per ciascuna misura
"""
lstFiles = set(lstFiles)
print(lstFiles)
{'step2_20MHz', 'cs_rs10kohm', 'rho_10Mohm', 'step4_1MHz', 'step3_1MHz', 'step3_20MHz', 'step1_square', '20MHz', 'step1_20MHz', 'step1_1MHz', 'step4_square', 'step4_20MHz', '1MHz', 'rho_25ohm', 'rho_0ohm', 'step2_square', 'step3_square', 'rho_50ohm', 'step2_1MHz', 'step0_square'}
# Dizionario dei dati
dictDati = {}
# Costruisco i vettori
for myFile in lstFiles:
# Carico i coefficienti del file info
xincr,ymult1,yoff1,ymult2,yoff2 = np.loadtxt(dataPath + "\\" + myFile + ".info")
# Carico i dati
tmpLst = []
with open(dataPath + "\\" + myFile + ".dat", "r") as f:
for line in f:
# Se è la linea che contiene i dati la salvo (togliendo il prefisso)
if line[:6] == ":CURVE":
tmpLst.append(line[6:])
# So per certo che ci saranno due linee di dati, separate da virgole
a = np.array(tmpLst[0].split(","), dtype = float)
b = np.array(tmpLst[1].split(","), dtype = float)
# Creo effettivamente i dati
time = np.linspace(0.5, 2500.5, 2500) * xincr
v1=(a-yoff1)*ymult1
v2=(b-yoff2)*ymult2
# Li impacchetto
myMatrix = np.concatenate((time[:, np.newaxis], v1[:, np.newaxis], v2[:, np.newaxis]), axis = 1)
# Li salvo nel dizionario chiamato come il file
dictDati[myFile] = myMatrix
A questo punto nell'insieme lstFiles
sono contenuti tutte le possibili stringhe relative alle misure effettuate. Un insieme è quasi come una lista, nel senso che è iterabile
for e in lstFiles:
print(e)
tuttavia non ha un ordinamento, pertanto una scrittura come lstFiles[3]
non avrebbe senso.
Gli elementi di lstFiles
sono le chiavi del dizionario dictDati
, il cui valore corrispondente è una matrice $2500\times 3$: la prima colonna sono i tempi, la seconda colonna le ampiezze del primo canale e la terza colonna le ampiezze del secondo canale.
nome = "step4_20MHz"
fig, ax = plt.subplots()
ax.plot(dictDati[nome][:,0], dictDati[nome][:,1], label = "Ch 1")
ax.plot(dictDati[nome][:,0], dictDati[nome][:,2], label = "Ch 2")
ax.legend(fontsize = 14)
ax.set_xlabel("Tempo (s)", fontsize = 14)
ax.set_ylabel("Ampiezza (V)", fontsize = 14)
ax.set_title(nome, fontsize = 16)
ax.grid(True)
plt.show()
fig, ax = plt.subplots(2,2, figsize = (12,5))
fig.subplots_adjust(wspace = .25, hspace = .7)
ax = ax.flatten()
for i in range(4):
nome = f"step{i+1}_20MHz"
ax[i].plot(dictDati[nome][:,0], dictDati[nome][:,1], label = "Ch 1")
ax[i].plot(dictDati[nome][:,0], dictDati[nome][:,2], label = "Ch 2")
ax[i].legend(fontsize = 14)
ax[i].set_xlabel("Tempo (s)", fontsize = 14)
ax[i].set_ylabel("Ampiezza (V)", fontsize = 14)
ax[i].set_title(nome, fontsize = 16)
ax[i].grid(True)
plt.show()