Generatore CSV T e ΔT

Genera un CSV con la temperatura T di un sensore IR e la differenza ΔT = T − T_amb, con rumore, quantizzazione e jitter dei tempi simili a un sensore reale. T parte dalla temperatura ambiente, sale con i gradini di riscaldamento e ridiscende fino a T_amb.

Requisiti e ambiente

Python ≥ 3.11 con numpy e matplotlib (quest'ultimo solo per il grafico), in un ambiente virtuale .venv nella cartella del progetto. Lo si crea con uv, più veloce di venv + pip:

uv venv .venv
uv pip install numpy matplotlib
source .venv/bin/activate        # poi si usa `python ...`; senza attivare: `.venv/bin/python ...`

.venv/ è ignorato da git. Con venv classico: python -m venv .venv && .venv/bin/pip install numpy matplotlib.

Installare uv

curl -LsSf https://astral.sh/uv/install.sh | sh          # Linux e macOS
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"   # Windows
pip install uv                                           # alternativa, se hai già Python

Apri un nuovo terminale e verifica con uv --version. Altre opzioni (Homebrew, WinGet, ecc.) sono nella guida ufficiale.

Uso

Con l'ambiente .venv attivo (altrimenti sostituisci python con .venv/bin/python):

python genera.py config.toml                      # scrive output/gen_<seed>.csv, seed casuale
python genera.py config.toml --seed 42            # riproducibile: output/gen_42.csv
python genera.py config.toml -o dati/prova.csv    # percorso a scelta (cartelle create se mancano)
python genera.py config.toml -o - > out.csv       # su stdout
Opzione Descrizione
config file di configurazione TOML (obbligatorio)
-o, --output file di uscita; default output/gen_<seed>.csv; - = stdout
--seed seme del generatore; se omesso è casuale e viene stampato su stderr

Stesso seed e stessa configurazione danno sempre lo stesso file. La cartella output/ è ignorata da git.

Grafico

python grafico.py                          # apre il grafico dell'ultimo CSV in output/
python grafico.py output/gen_42.csv        # un CSV preciso
python grafico.py -o grafico.png           # salva l'immagine (png, pdf, svg) invece di aprire la finestra

Mostra T e ΔT in funzione del tempo. grafico.py ha le sue dipendenze (numpy, matplotlib), vedi sopra; senza schermo usa -o.

Pulizia

./pulisci.sh                               # svuota la cartella output/

Output

t_ms,T_C,dT_C
151,22.90,0.20
301,22.63,0.03

t_ms è intero; T_C e dT_C hanno due decimali. ΔT è calcolato dopo rumore e quantizzazione di entrambi i canali.

Configurazione

Tutti i valori numerici sono in config.toml (nessuno è scritto nello script). Le unità sono nei suffissi delle chiavi: _s secondi, _ms millisecondi, _c gradi C, _hz 1/s. Una chiave mancante è un errore (exit 1, messaggio in italiano), così come t_impulsi_s e dT_impulsi_c di lunghezza diversa.

Per cambiare il profilo di riscaldamento si modificano t_impulsi_s e dT_impulsi_c (un gradino per elemento; [] = nessun riscaldamento) e k_raffreddamento_hz. durata_s deve essere abbastanza lunga perché T torni a T_amb. Per ricalibrare il rumore si possono usare come riferimento le misure reali in dati.csv.

Documentazione

Elenco completo delle funzionalità in docs/FUNZIONALITA.md. Modello, passi di calcolo, controlli di accettazione e limiti sono in docs/SPEC.md.

S
Description
Generatore di dati sintetici per EquationMiner: CSV t_ms,T_C,dT_C di un sensore IR che si scalda e si raffredda, con rumore, quantizzazione e jitter realistici, riproducibile per seed.
Readme
92 KiB
0 Stars 1 Watchers 0 Forks
Languages
Python 95%
Shell 5%