3.4 KiB
3.4 KiB
Funzionalità
Elenco di ciò che il programma sa fare. Per l'uso passo per passo vedi il README; per il modello e i controlli di accettazione vedi SPEC.md.
Generazione dei dati — genera.py
- Profilo di temperatura:
Tparte dalla temperatura ambiente, sale con uno o più gradini di riscaldamento e ridiscende con raffreddamento esponenziale fino aT_amb. - Gradini configurabili: numero, istanti e ampiezze (
t_impulsi_s,dT_impulsi_c); lista vuota = nessun riscaldamento. Costante di raffreddamento ink_raffreddamento_hz. - Variabilità tra corse: istanti, ampiezze e costante di raffreddamento dei gradini sono perturbati a caso a ogni seed (
impulsi_jitter_*,k_jitter_rel; 0 = disattivata). - Salti stocastici: scarti casuali con rientro esponenziale, sia durante il riscaldamento (
salti_risc_*, nei due versi) sia durante il raffreddamento (salti_*, solo conTmolto sopra l'ambiente), come i gradini irregolari di un sensore reale. - Ambiente realistico:
T_ambassestata con andamento esponenziale, con rumore e quantizzazione propri (amb_*). Non compare nel CSV, serve perΔTe come baseline diT. - Tempi con jitter: intervallo medio
dt_mscon variazione uniforme ±jitter_ms, fino adurata_s. - Risposta del sensore: filtro del primo ordine (
tau_sensore_s) calcolato su griglia fine da 5 ms e interpolato ai tempi di campionamento. - Rumore di
T: componente bianca gaussiana, più forte quandoTè molto sopra l'ambiente (sigma_c→sigma_caldo_c), più una deriva lenta di tipo Ornstein-Uhlenbeck (wander_*). - Quantizzazione:
TeΔTapasso_T_c, ambiente aamb_passo_c.ΔTè calcolato dopo rumore e quantizzazione di entrambi i canali. - Riproducibilità:
--seedfissa il risultato (stesso seed e stessa configurazione ⇒ file identico); senza seed ne viene scelto uno casuale e stampato su stderr. - Uscita flessibile: per default
output/gen_<seed>.csv(cartella creata se manca);-o percorsoper un file a scelta;-o -per stdout. - Configurazione senza valori nascosti: tutti i valori stanno in un TOML; una chiave mancante, un TOML non valido o gradini di lunghezza diversa terminano con exit 1 e un messaggio in italiano. Lo stesso avviene se il file di uscita non è scrivibile.
Formato dell'uscita: t_ms,T_C,dT_C (t_ms intero, gli altri a due decimali).
Visualizzazione — grafico.py
- Disegna
TeΔTin funzione del tempo in due pannelli con asse comune. - Senza argomenti usa l'ultimo CSV modificato in
output/; oppure si indica il file. - Apre una finestra, oppure con
-osalva l'immagine (png, pdf, svg) e funziona anche senza schermo. - Errore chiaro (exit 1) se non ci sono CSV, se il file non si legge o se il formato non è
t_ms,T_C,dT_C.
Pulizia — pulisci.sh
- Svuota la cartella
output/(la cartella resta). Non tocca altro. - Se
output/non esiste lo segnala senza errore.
Ambiente
- Gli script girano in un ambiente
.venvnel progetto (creato con uv:numpy, piùmatplotlibper il grafico). Le dipendenze sono dichiarate anche nello script (PEP 723), quindiuv runfunziona comunque. - La cartella
output/è ignorata da git.
Limiti noti
Elencati in SPEC.md §6: un solo tempo di raffreddamento, gradini istantanei, ambiente che non sale col riscaldamento, nessun glitch di campionamento, rumore tarato su un solo sensore.