Gradini variabili, disturbi a salto stocastici, fasi di raffreddamento più lunghe; rimosso dati.csv
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4592f5f87b
commit
33c99afe6a
6 files changed
+75
-16
No files matched your search
@@ -6,6 +6,8 @@ Elenco di ciò che il programma sa fare. Per l'uso passo per passo vedi il [READ
|
||||
|
||||
- **Profilo di temperatura**: `T` parte dalla temperatura ambiente, sale con uno o più gradini di riscaldamento e ridiscende con raffreddamento esponenziale fino a `T_amb`.
|
||||
- **Gradini configurabili**: numero, istanti e ampiezze (`t_impulsi_s`, `dT_impulsi_c`); lista vuota = nessun riscaldamento. Costante di raffreddamento in `k_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 con `T` molto sopra l'ambiente), come i gradini irregolari di un sensore reale.
|
||||
- **Ambiente realistico**: `T_amb` assestata con andamento esponenziale, con rumore e quantizzazione propri (`amb_*`). Non compare nel CSV, serve per `ΔT` e come baseline di `T`.
|
||||
- **Tempi con jitter**: intervallo medio `dt_ms` con variazione uniforme ±`jitter_ms`, fino a `durata_s`.
|
||||
- **Risposta del sensore**: filtro del primo ordine (`tau_sensore_s`) calcolato su griglia fine da 5 ms e interpolato ai tempi di campionamento.
|
||||
@@ -34,10 +36,6 @@ Formato dell'uscita: `t_ms,T_C,dT_C` (`t_ms` intero, gli altri a due decimali).
|
||||
- Gli script girano in un ambiente `.venv` nel progetto (creato con [uv](https://docs.astral.sh/uv/): `numpy`, più `matplotlib` per il grafico). Le dipendenze sono dichiarate anche nello script (PEP 723), quindi `uv run` funziona comunque.
|
||||
- La cartella `output/` è ignorata da git.
|
||||
|
||||
## Riferimento dati reali
|
||||
|
||||
[dati.csv](../dati.csv) contiene una registrazione reale del sensore IR, usata come riferimento per ricalibrare il rumore (`sigma_c`, `wander_*`, `amb_*`). Non è letta dal programma.
|
||||
|
||||
## Limiti noti
|
||||
|
||||
Elencati in [SPEC.md §6](SPEC.md): un solo tempo di raffreddamento, gradini istantanei, ambiente che non sale col riscaldamento, nessun glitch di campionamento, rumore tarato su un solo sensore.
|
||||
+11
-7
@@ -19,7 +19,7 @@ t_ms,T_C,dT_C
|
||||
## 2. Configurazione
|
||||
|
||||
Tutti i valori sono in [`config.toml`](../config.toml) (unica fonte: questo documento non li ripete). Gruppi:
|
||||
tempi · ambiente (anche baseline di T) · rumore · gradini di riscaldamento e raffreddamento.
|
||||
tempi · ambiente (anche baseline di T) · rumore · gradini di riscaldamento e raffreddamento · variabilità tra corse · salti.
|
||||
Nessun valore è scritto nello script: chiave mancante ⇒ errore.
|
||||
|
||||
## 3. Modello (5 passi)
|
||||
@@ -28,7 +28,11 @@ Nessun valore è scritto nello script: chiave mancante ⇒ errore.
|
||||
2. **T vera** = ambiente vero + eccesso termico (T parte da `T_amb`, sale con i gradini e ridiscende fino a `T_amb`):
|
||||
- ambiente vero `B(t) = amb_inf + amb_A·exp(−t/τ_amb)` (stessa curva del passo 5, senza rumore né quantizzazione);
|
||||
- eccesso `x(t) = Σ_j ΔT_j · exp(−k·(t − t_j))` per `t ≥ t_j` (un gradino per ogni `t_impulsi_s`, poi raffreddamento esponenziale);
|
||||
- `T_vera = B + x`.
|
||||
- **variabilità**: a ogni corsa istanti, ampiezze e `k` dei gradini sono perturbati a caso (σ in `impulsi_jitter_*`, `k_jitter_rel`), quindi la forma cambia con il seed;
|
||||
- **salti** (stocastici, scarti casuali con rientro `exp(−t/τ)`, come i gradini irregolari osservati su un sensore reale):
|
||||
durante il **riscaldamento** (tra il primo e l'ultimo gradino) con `salti_risc_*`, ampiezza `N(media, σ²)` nei due versi;
|
||||
durante il **raffreddamento** (dopo l'ultimo gradino, mentre `x ≥ salti_x_min_c`) con `salti_*`; istanti di tipo Poisson in entrambi i casi; ampiezza limitata a ±`salti_max_c` (niente scarti estremi);
|
||||
- `T_vera = B + x + salti`.
|
||||
3. **Risposta del sensore**: filtro del 1° ordine `y' = (T_vera − y)/τ_sens` (griglia fine, 5 ms, poi interpolazione ai `t_i`).
|
||||
4. **Rumore di T**: `T_i = y_i + w_i + σ(x_i)·N(0,1)`, con
|
||||
- `σ(x) = σ + (σ_caldo − σ)·min(1, x/x_rif)`;
|
||||
@@ -56,16 +60,16 @@ o se il file non è scrivibile. La lettura TOML usa `tomllib` (standard library)
|
||||
|
||||
## 5. Controlli di accettazione (con la configurazione d'esempio)
|
||||
|
||||
Verificati su un prototipo (30 seed):
|
||||
Verificati su 30 seed (valori min–max; picco e `T`/`ΔT` finali dipendono dalla variabilità dei gradini e dai salti):
|
||||
|
||||
| Controllo | Atteso |
|
||||
|---|---|
|
||||
| `T` a inizio run | ≈ `T_amb` (≈ 22.65 °C) |
|
||||
| Rumore a freddo: `std(diff(T))/√2` prima del primo gradino (~15 s) | 0.09 – 0.13 |
|
||||
| Picco di `T` | ≈ 220 – 222 °C |
|
||||
| `T` a fine run | ≈ `T_amb` (≈ 23.4 °C, entro ~0.5 °C) |
|
||||
| Picco di `T` | 197 – 209 °C |
|
||||
| `T` a fine run | ≈ `T_amb`: 23.1 – 23.7 °C |
|
||||
| `ΔT` a inizio run | ≈ 0 °C (solo rumore) |
|
||||
| `ΔT` a fine run | ≈ 0.4 °C (residuo del raffreddamento) |
|
||||
| `ΔT` a fine run | 0.3 – 0.65 °C (residuo del raffreddamento) |
|
||||
| Intervalli `dt` | tutti in `dt_ms ± jitter_ms` (prima di arrotondare `t_ms` a intero: nel CSV le differenze sono 149–152) |
|
||||
| Stesso `--seed` e stessa config | file identico |
|
||||
|
||||
@@ -74,5 +78,5 @@ Verificati su un prototipo (30 seed):
|
||||
- Un solo tempo di raffreddamento esponenziale (nessuna distinzione conduzione/convezione).
|
||||
- Gradini istantanei (nessun transito sotto l'induttore e nessuna dipendenza dalla velocità).
|
||||
- L'ambiente non sale quando T è alta (nessun riscaldamento dell'ambiente del sensore): `ΔT` è leggermente sovrastimato durante e subito dopo il riscaldamento.
|
||||
- Nessun glitch di campionamento né disturbi a salto durante il raffreddamento.
|
||||
- Nessun glitch di campionamento; i salti durante il raffreddamento sono un modello statistico semplice (rientro esponenziale), non un fenomeno fisico.
|
||||
- Rumore tarato su un solo sensore: ricalibrare `sigma_c`, `wander_*`, `amb_*` con i propri dati.
|
||||
Reference in new issue
Block a user