4.8 KiB
Panoramica
Cosa fa
fitseg prende la serie temporale di un sensore IR che si scalda e si raffredda (CSV t_ms,T_C,dT_C) e per ogni tratto del segnale
trova l'equazione che lo descrive meglio. Il lavoro è in tre passi:
- Domini: divide il tempo in tratti omogenei (riposo, riscaldamento, raffreddamento).
- Equazioni: in ogni tratto fitta i modelli adatti con minimi quadrati non lineari e sceglie il migliore con una regola fissa.
- Sovrapposizione e report: confronta i dati grezzi con le equazioni trovate e scrive un report con grafici e formule.
Tutto è deterministico: stessi dati e stessa configurazione danno gli stessi risultati. Non c'è nessun modello linguistico né nessuna parte casuale.
Il segnale
Il sensore parte dalla temperatura ambiente (riposo). Poi il campione viene scaldato a gradini: la temperatura sale in una frazione di secondo (pochi campioni, riscaldamento) e subito dopo decade verso l'ambiente (raffreddamento). Con più gradini ravvicinati (2–4 s) il decadimento di ognuno è interrotto dal successivo; dopo l'ultimo gradino il raffreddamento prosegue fino all'ambiente.
Figura: dati reali di input/gen_7.csv (serie T_C, seed 7 di gen_data) con i domini riconosciuti da fitseg e le equazioni trovate. In alto il segnale completo, al
centro lo zoom sui tre gradini, in basso la tabella che associa a ogni numero tipo, intervallo ed equazione. Il riscaldamento è rosso, il riposo grigio e
ogni raffreddamento ha un colore diverso. Con 3 gradini i domini sono 1 + 2\cdot 3 = 7.
Il generatore dei dati di prova è il repository gen_data (clonato in extern/gen_data con ./scarica_gen_data.sh) (modello e parametri: extern/gen_data/docs/SPEC.md): a ogni seed sorteggia numero
dei gradini (1–3), costante di tempo, rumore e disturbi, quindi ogni file ha una struttura diversa. Le sue caratteristiche che contano per fitseg sono
elencate in assunzioni.md, sezione «Origine dei dati di prova».
Concetti
| Termine | Significato |
|---|---|
| serie | una colonna del CSV da approssimare (T_C temperatura, dT_C differenza dall'ambiente). Tutte le serie condividono gli stessi domini |
| gradino | salita positiva di temperatura, distribuita su 2–4 campioni, la cui salita complessiva supera soglia_gradino_c |
| dominio | tratto contiguo di campioni con un tipo: riposo, riscaldamento o raffreddamento |
| riscaldamento | la salita rapida di un gradino (2–4 campioni): troppo breve per un fit, è descritta come salto (\Delta, da → a, durata) |
| raffreddamento | il decadimento dopo un gradino, fino al gradino successivo o alla fine; modello esponenziale |
| raffreddamento finale / intermedio | il finale è l'ultimo dominio (il più lungo, parametri liberi); gli intermedi stanno tra due gradini (corti) e ricevono c e \tau dal finale |
| modello | una famiglia di equazioni (costante, lineare, esp_decad); vedi algoritmi.md §5.1 |
| parametro fisso | parametro tenuto costante nel fit (non conta nei gradi di libertà); marcato «(fisso)» nel report |
| indeterminato | nessun modello valido, oppure dominio con meno di n_min_punti campioni |
| non adeguato | modello scelto ma con \hat\sigma_\text{res} > 1.5\,\sigma (scala robusta dei residui, che ignora gli scarti casuali): il modello non spiega i dati |
| tempo del dominio | t' = t - t_0, con t_0 il tempo del primo campione del dominio |
Esempio (seed 7 di gen_data)
La figura sopra è il risultato di fitseg analizza input/gen_7.csv su T_C: sul raffreddamento finale \tau = 12.12 \pm 0.04 s, c = 23.92 °C, A = 163.2 °C;
i due raffreddamenti intermedi usano gli stessi c e \tau e stimano solo A (76.7 e 124.5 °C); i tre riscaldamenti sono salti di +79.7, +71.4 e +90.2 °C.
I valori veri del seed 7 sono \tau = 1/k = 12.07 s e salti di 79.6, 71.1 e 89.4 °C: il fit li recupera entro lo 0.5 % (\tau) e l'1 % (salti).
Su 60 seed diversi l'errore su \tau resta sotto il 2 % (test.md).
Dove andare avanti
| Per… | Leggi |
|---|---|
| lanciare i comandi, correggere i domini a mano | uso.md |
| capire cosa si dà per vero e cosa succede se non lo è | assunzioni.md |
| sapere come funzionano rilevamento, fit e scelta, con le formule | algoritmi.md |
| orientarsi nel codice (un modulo alla volta) | moduli.md |
cambiare un valore (ogni chiave di config.toml) |
configurazione.md |
| leggere i file prodotti e i grafici | output.md |
| eseguire e capire i test | test.md |
| conoscere limiti noti e possibili estensioni | limiti.md |
