Il motivo per cui abbiamo fatto in modo che LeggiOnda scrivesse su
file i risultati è che vogliamo poi processare ulteriormente questi
dati per determinare l'ampiezza e la fase della sinusoide di risposta.
Infatti, applicando il metodo delle impedenze complesse, sappiamo
che ad una forzante
Siccome il valore di
misurato dall'oscilloscopio
sarà affetto da errori di misura, possiamo dare la migliore stima
di
e
con una minimizzazione di
, ovvero
trovando la coppia di parametri che rende minima la somma dei quadrati
delle differenze tra le quantità misurate e la funzione attesa, pesando
ogni punto con il suo errore:
Scritto in questo modo il
non è lineare nei parametri
da determinare, ma può essere linearizzato osservando che l'eq. (3)
può anche essere scritta
Si deriva facilmente che il minimo si ha per il vettore di parametri
L'altra proprietà interessante è che la matrice di covarianza dei
parametri è data da:
Siccome in C non è comodo passare matrici, si consiglia di effettuare
direttamente il calcolo del vettore di 2 elementi
e della matrice
che, essendo
, è facilmente
invertibile, anziché calcolare separatamente tutte le matrici e fare
le moltiplicazioni alla fine.
Una volta ricavati i valori dei parametri, questi si possono convertire
nelle quantità fisiche che ci interessanto
e
usando
le relazioni
Passiamo ora a discutere praticamente come arrivare a queste determinazioni.
Determinare l'errore di misura dell'oscilloscopio confrontando i valori di una funzione d'onda misurata con una funzione d'onda nota (ad esempio, siccome sappiamo esattamente come è fatta la forzante, possiamo usare la lettura del canale 1 per fare questo confronto).
Implementare la minimizzazione di
. Verificare
che funzioni con una forma d'onda nota (anche in questo caso si può
utilizzare la forzante) e che gli errori calcolati siano ragionevoli.
Per farlo si suggerisce di definire una funzione di ROOT che abbia
come argomenti il nome di un file da leggere e la frequenza da usare.
In particolare si faccia attenzione alla fase: siccome l'oscilloscopio
ha frequenze di campionamento più o meno fisse, il momento del trigger,
che corrisponde a
usando la (1) in realtà
è noto con una precisione non superiore a
,
dove
è la frequenza di campionamento. Dato
che si accumulano 2500 punti in 10 divisioni,
è uguale a 250 diviso la larghezza di una divisione. Come
si traduce questo errore sul tempo del trigger in un errore sulla
fase?
Inoltre si ricorda che in (1)
va da 1 a 2500
e non, come sembrerebbe ovvio in C, da 0 a 2499.
Alternativamente alla procedura in due passi con
lineare descritta in questa sezione, si può implemetare un
non lineare, seguendo quando descritto nella sezione 6 della simulazione
dello spettrometro a prisma[2].
Fare un grafico della sinusoide determinata e sovrapporla alla funzione d'onda misurata dall'oscilloscopio, controllare la qualità della minimizzazione facendo un istogramma delle differenze tra i valori di tensione misurati e quelli della sinusoide ricostruita.