66 lines
4.8 KiB
Markdown
66 lines
4.8 KiB
Markdown
# 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:
|
||
|
||
1. **Domini**: divide il tempo in tratti omogenei (riposo, riscaldamento, raffreddamento).
|
||
2. **Equazioni**: in ogni tratto fitta i modelli adatti con minimi quadrati non lineari e sceglie il migliore con una regola fissa.
|
||
3. **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](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](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](test.md)).
|
||
|
||
## Dove andare avanti
|
||
|
||
| Per… | Leggi |
|
||
|---|---|
|
||
| lanciare i comandi, correggere i domini a mano | [uso.md](uso.md) |
|
||
| capire cosa si dà per vero e cosa succede se non lo è | [assunzioni.md](assunzioni.md) |
|
||
| sapere come funzionano rilevamento, fit e scelta, con le formule | [algoritmi.md](algoritmi.md) |
|
||
| orientarsi nel codice (un modulo alla volta) | [moduli.md](moduli.md) |
|
||
| cambiare un valore (ogni chiave di `config.toml`) | [configurazione.md](configurazione.md) |
|
||
| leggere i file prodotti e i grafici | [output.md](output.md) |
|
||
| eseguire e capire i test | [test.md](test.md) |
|
||
| conoscere limiti noti e possibili estensioni | [limiti.md](limiti.md) |
|