GX-TXT Curve Digitalizer – Guida 04: digitalizzazione scientifica con doppio asse Y, calibrazione e propagazione delle incertezze
In questa guida ricostruiamo due curve scientifiche a partire dalla stessa immagine: il guadagno e la fase di un filtro RC passa-basso. Vedremo come configurare un asse X logaritmico, associare le curve a due assi Y differenti, ricavare i punti con il tracciamento assistito e pubblicarli come Dataset utilizzabili per ulteriori analisi.
Lavoreremo su un grafico sintetico in modo che il risultato abbia un riferimento matematico noto. I passaggi sono gli stessi che si applicano a un grafico acquisito da un articolo, da una scansione o da un’immagine sperimentale, purché siano note le scale degli assi.
Alla fine avremo: una configurazione del Digitalizer, due curve di 100 punti ciascuna, due Dataset con unità fisiche distinte, un Dataset Group facoltativo, una dichiarazione di incertezza e gli identificativi necessari per risalire da ogni punto al raster.
1. Preparare il grafico e leggere correttamente gli assi
Il grafico di partenza rappresenta la risposta in frequenza di un filtro RC passa-basso del primo ordine. La linea blu è il guadagno in decibel; la linea rossa è lo sfasamento in gradi. Entrambe dipendono dalla frequenza, ma non hanno le stesse unità e non devono essere interpretate sul medesimo asse verticale.

| Asse | Grandezza | Intervallo | Tipo di scala |
|---|---|---|---|
| X | Frequenza (Hz) | 10 – 100.000 | Logaritmica |
| Y1 | Guadagno (dB) | −40 – +5 | Lineare |
| Y2 | Fase (°) | −100 – +10 | Lineare |
Il circuito di riferimento utilizza una resistenza di \(R=10\,\mathrm{k}\Omega\) e una capacità di \(C=10\,\mathrm{nF}\). La frequenza di taglio teorica si ricava da:
$$f_c=\frac{1}{2\pi RC}\approx1591{,}55\,\mathrm{Hz}$$
Le due funzioni che vogliamo ricostruire sono:
$$G_{\mathrm{dB}}(f)=-10\log_{10}\!\left[1+\left(\frac{f}{f_c}\right)^2\right]$$
$$\varphi(f)=-\arctan\!\left(\frac{f}{f_c}\right)\frac{180}{\pi}$$
Queste formule non sono necessarie per usare il Digitalizer, ma sono utili per interpretare il risultato: il guadagno tende a 0 dB alle basse frequenze e diminuisce oltre la frequenza di taglio; la fase passa progressivamente da 0° verso −90°.
2. Importare l’immagine nella Session
Apriamo una Session GX-TXT e utilizziamo il normale percorso di acquisizione acq.image_binary per importare l’immagine PNG. In questo modo otteniamo un Image Dataset, anziché un’immagine scollegata dai dati della Session.
Prima di procedere controlliamo che l’immagine sia quella prevista, che non sia stata ritagliata o ridimensionata involontariamente e che gli assi siano leggibili. L’immagine dell’esempio misura 1600 × 900 pixel.

Apriamo Viewers → Curve Digitalizer, creiamo una configurazione e scegliamo come sorgente l’Image Dataset appena importato. Selezionare la sorgente dal catalogo della Session ci consente di mantenere il collegamento fra immagine e risultati numerici.
3. Configurare X, Y1 e Y2
Passiamo alla scheda Calibration. Il primo passaggio è definire il significato fisico delle coordinate. Inseriamo gli intervalli della tabella iniziale e scegliamo il tipo di scala di ciascun asse:
- X: Frequency, unità Hz, minimo 10, massimo 100000, scala log.
- Y1: Gain, unità dB, minimo −40, massimo +5, scala linear.
- Y2: abilitiamo il secondo asse, Phase, unità deg, minimo −100, massimo +10, scala linear.

Attenzione: una scala logaritmica non si configura inserendo il logaritmo dei valori. Per la frequenza si digitano 10 e 100000, non 1 e 5. La trasformazione logaritmica viene applicata dal Digitalizer.
Y1 e Y2 sono due interpretazioni fisiche della stessa posizione verticale nel raster: il punto che si trova a una determinata altezza può corrispondere a un valore in dB oppure a un valore in gradi, a seconda dell’asse associato alla curva.
Selezionare i quattro vertici
Nella sezione della calibrazione identifichiamo i quattro angoli del riquadro che contiene il grafico, seguendo l’ordine indicato dall’interfaccia: BL (basso sinistra), BR (basso destra), TL (alto sinistra), TR (alto destra).
Per l’immagine di riferimento i vertici della regione tracciabile si trovano in prossimità delle coordinate pixel BL (180, 755), BR (1400, 755), TL (180, 100) e TR (1400, 100). Nell’interfaccia vanno scelti i punti sull’immagine visibile, non copiati ciecamente da una tabella: una scansione differente potrebbe avere dimensioni o margini diversi.

Controlliamo che i quattro marcatori siano in corrispondenza delle intersezioni delle linee di bordo, non sul centro dello spessore di una curva. Accettiamo la calibrazione quando la geometria risulta coerente.
Verificare un punto noto della griglia
Prima di inserire le guide delle curve, apriamo Calibration verification e selezioniamo un punto della griglia di cui conosciamo le coordinate fisiche. Scegliamo l’intersezione con frequenza 1000 Hz, guadagno −10 dB e fase circa −26,667°.
Nel campo della frequenza possiamo scrivere 1e3, che significa 1000. La verifica mostra i valori calcolati dalla trasformazione geometrica; confrontiamoli con i riferimenti inseriti.

| Coordinata | Riferimento | Esempio di valore ricavato |
|---|---|---|
| X | 1000 Hz | 1000,035 Hz |
| Y1 | −10 dB | −10,00194 dB |
| Y2 | −26,667° | −26,6714° |
Scostamenti piccoli in questo controllo indicano che il punto scelto è coerente con la calibrazione. Se il valore è molto diverso, ricontrolliamo prima la posizione dei vertici, poi i limiti e il tipo di scala degli assi. Non iniziamo a digitalizzare su una calibrazione manifestamente errata.
4. Creare e digitalizzare la curva Gain (Y1)
Apriamo Curves e aggiungiamo una nuova curva chiamata Gain. Selezioniamo come asse verticale Y1: questo collegamento determina quale scala fisica verrà usata per convertire le posizioni pixel in decibel.
Per una risposta in frequenza ordinata da sinistra a destra impostiamo Monotonicity → Monotonic in X e Point ordering source → Sort by X. Il primo vincolo impedisce ritorni indesiderati lungo la frequenza; il secondo ordina i punti estratti in base a X, anche se le guide sono state inserite in un ordine diverso.

Le stesse impostazioni non sono adatte a ogni grafico: per curve chiuse o percorsi che ritornano verso sinistra bisogna scegliere un comportamento differente.
Inserire le guide
Attiviamo Add guide e collochiamo alcuni riferimenti ben distribuiti lungo la linea blu. Possiamo iniziare presso 100 Hz, 1 kHz, 10 kHz e 50 kHz, aggiungendo poi guide vicino agli estremi. Le guide servono a indicare il percorso da seguire, non devono necessariamente rappresentare tutti i punti finali.

Premiamo Propose per ottenere il tracciato suggerito. Osserviamo soprattutto le zone in cui la curva cambia pendenza, si avvicina alla griglia o incrocia altre linee: in questi punti l’algoritmo può scegliere un percorso diverso da quello desiderato.
Regolare Step e Corridor
La proposta dipende anche dai parametri di ricerca. Nell’esempio manteniamo Step = 2 px e confrontiamo due valori di Corridor: 1 px e 4 px.


Con un corridoio stretto la ricerca rimane vicino al percorso delle guide; allargandolo aumentiamo lo spazio disponibile per inseguire la linea raster. Un valore troppo ampio può però includere elementi estranei, come la griglia o la seconda curva. Non esiste un Corridor ottimale per qualsiasi immagine: dobbiamo osservare il risultato e scegliere quello che segue più fedelmente la linea interessata.
Correggere la proposta prima di accettarla
Se una parte del percorso si allontana dalla linea blu, utilizziamo Edit proposal e aggiungiamo i punti di correzione necessari. Rigeneriamo o aggiorniamo la proposta, quindi controlliamo l’andamento lungo tutto l’intervallo. È più semplice correggere pochi punti guida che modificare manualmente cento punti già pubblicati.

Quando il tracciato è soddisfacente, impostiamo Output points (Accept) = 100 e premiamo Accept. La curva viene registrata come Gain / Y1 / 100 punti.

Il numero di punti definisce la densità del campionamento lungo il tracciato accettato. Non è un indicatore diretto della precisione: aumentare il numero di punti non corregge una curva seguita male.
5. Digitalizzare Phase (Y2) e utilizzare Undo
Aggiungiamo una seconda curva denominata Phase e associamola all’asse Y2. La procedura è la stessa: inseriamo le guide sulla linea rossa, generiamo una proposta, la controlliamo e impostiamo un’uscita di 100 punti.
Qui è particolarmente importante verificare gli estremi: la fase tende a valori prossimi a −90° alle alte frequenze, mentre il guadagno segue una scala completamente diversa. Una curva associata per errore a Y1 potrebbe apparire tracciata nel punto giusto del raster, ma avrebbe coordinate fisiche sbagliate.
Supponiamo di accettare una proposta e di notare subito dopo che il tratto finale non segue correttamente la linea rossa. L’immagine seguente mostra il tipo di errore da riconoscere.

Utilizziamo Undo per recuperare lo stato precedente all’accettazione, quindi torniamo in Edit proposal. Aggiungiamo o spostiamo le guide necessarie, controlliamo il nuovo percorso e ripetiamo Accept.

Alla fine, nell’elenco delle curve devono comparire Gain / Y1 / 100 punti e Phase / Y2 / 100 punti: in totale 200 punti, distribuiti fra due grandezze fisiche distinte.

6. Pubblicare le curve come Dataset scientifici
Apriamo la scheda Publish e scegliamo la calibrazione che abbiamo appena utilizzato. Per creare una prima coppia di Dataset selezioniamo il layout Separate e lasciamo disattivata, per il momento, l’opzione Group published Datasets.
Inseriamo un identificativo di base nuovo per la pubblicazione. In questo modo possiamo riconoscere gli output ed evitare di confonderli con eventuali Dataset precedenti.
La pubblicazione produce due risultati separati:
- Dataset Gain (Y1): frequenza in Hz e guadagno in dB, 100 righe.
- Dataset Phase (Y2): frequenza in Hz e fase in gradi, 100 righe.

I Dataset contengono anche informazioni utili alla tracciabilità, fra cui l’asse logico y_axis_id, il nome e l’identificativo della curva, l’indice e l’identificativo del punto, e le coordinate pixel pixel_x e pixel_y. La pubblicazione rende i punti disponibili ad altri strumenti GX-TXT senza dover rileggere l’immagine.
Perché due Dataset? Le grandezze hanno unità diverse. Tenere separati dB e gradi impedisce di attribuire accidentalmente una sola unità a entrambe le ordinate.
7. Visualizzare i risultati nella Dataset Preview
Selezioniamo il Dataset Gain nel catalogo e apriamo la Dataset Preview. Per visualizzare le curve con le scale fisiche configurate usiamo la scheda Curves e il comando Load curves. Ripetiamo poi l’operazione con il Dataset Phase.


Controlliamo tre cose: la frequenza deve essere rappresentata in scala logaritmica; il primo Dataset deve usare i dB; il secondo deve usare i gradi. Una curva visivamente plausibile non è sufficiente se l’asse fisico è sbagliato.
Nell’interfaccia possono essere disponibili anche una scheda generica Plot e altre visualizzazioni. Per questo esercizio scegliamo esplicitamente Curves, che presenta le curve secondo le scale dichiarate dalla calibrazione. La scheda Canonical Data permette invece di leggere direttamente i valori numerici delle righe.
8. Raggruppare Gain e Phase senza mescolare le unità
Se vogliamo mantenere insieme i due risultati, torniamo in Publish, scegliamo un nuovo identificativo di base e attiviamo Group published Datasets. Lasciamo il layout Separate e pubblichiamo nuovamente le curve.
Otterremo un Dataset Group con due membri: uno per Gain/Y1 e uno per Phase/Y2. Il gruppo è un contenitore logico: non trasforma decibel e gradi in una stessa colonna, non cambia i valori delle curve e non elimina l’identità dei Dataset che ne fanno parte.

Questa funzione è utile quando più grandezze appartengono allo stesso esperimento o alla stessa immagine e devono essere ritrovate e consultate insieme.
9. Dichiarare l’incertezza di digitalizzazione
Finora abbiamo ottenuto coordinate fisiche da posizioni individuate su un’immagine. La scelta del centro di una linea raster e dei vertici della griglia non è perfetta: per descrivere quantitativamente questa limitazione possiamo aggiungere un modello esplicito di incertezza.
Apriamo Publish → Uncertainty… e selezioniamo pixel_calibration. Per questo esercizio impostiamo una distribuzione rectangular_full_width, due larghezze totali pari a 2 px e le incertezze standard della calibrazione:
| Campo | Valore da inserire |
|---|---|
| Error model | pixel_calibration |
| Pixel scale meaning | rectangular_full_width |
| Pixel X/Y widths | 2 2 |
| 8 corners + 6 axis endpoints | 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0 0 0 0 0 0 |
| Physical X/Y1/Y2 standard uncertainties | Lasciare vuoto con il modello scelto |
I primi otto numeri indicano le incertezze standard delle coordinate pixel dei quattro vertici, nell’ordine BL X/Y, BR X/Y, TL X/Y, TR X/Y. Gli ultimi sei numeri descrivono gli estremi fisici minimo/massimo di X, Y1 e Y2. Nell’esempio sintetico questi estremi sono assunti esatti per costruzione.
Se l’incertezza sulla posizione di un punto è descritta da una distribuzione rettangolare di larghezza totale \(w\), la sua incertezza standard è:
$$u_{\mathrm{pixel}}=\frac{w}{\sqrt{12}}$$
Con una larghezza totale di 2 px otteniamo circa 0,577 px. È un’ipotesi dichiarata, non un risultato misurato automaticamente dal software. In presenza di un grafico sperimentale il modello andrebbe scelto e motivato sulla base delle condizioni reali di acquisizione.
Nel campo Evidence / reason descriviamo sinteticamente le assunzioni adottate e premiamo Apply and save declaration.

Pubblicare e leggere sigma e covarianza
La dichiarazione non modifica retroattivamente i Dataset già pubblicati. Per ottenere tabelle che contengano anche l’incertezza, torniamo nella sezione Publish e utilizziamo una nuova base ID. Pubblichiamo di nuovo le due curve con il modello attivo.
Aprendo Canonical Data nella Preview dei nuovi Dataset, troviamo tre ulteriori colonne numeriche:
sigma_x: incertezza standard della frequenza, in Hz;sigma_y: incertezza standard del guadagno in dB oppure della fase in gradi;covariance_xy: covarianza fra frequenza e ordinata della stessa riga, nelle rispettive unità moltiplicate.

La schermata precedente mostra le incertezze del Dataset Phase (Y2). Come ulteriore esempio, la prima riga del Dataset Gain (Y1) presenta i seguenti risultati numerici:
| Grandezza | Valore |
|---|---|
| Frequenza X | 10,05395227 Hz |
| Gain Y1 | −0,04282468 dB |
| σX | 0,05547460 Hz |
| σY1 | 0,05033129 dB |
| Cov(X,Y1) | 5,38250 × 10−5 Hz·dB |
È importante interpretare questi numeri correttamente: la calibrazione è comune a tutti i punti di una curva, quindi può introdurre correlazioni anche fra punti diversi. Le colonne di incertezza della singola riga non equivalgono a una matrice completa di covarianza di tutte le osservazioni.
10. Risalire dal punto numerico all’immagine
Per verificare l’origine di un valore apriamo Canonical Data → Point traceability e carichiamo la tabella. Troviamo l’identificativo della curva, il Point ID univoco, il Calibration ID e le coordinate originali nel raster.

Questi campi rispondono a domande pratiche: quale curva ha prodotto questa riga? Quale punto del raster è stato digitalizzato? Con quale calibrazione è stata calcolata la coordinata fisica?
La tabella dispone inoltre di paginazione e selezione della precisione numerica. Cambiare il numero di cifre visualizzate non modifica i valori memorizzati nel Dataset.
11. Controlli finali e riutilizzo dei Dataset
Prima di utilizzare i risultati in uno script o in un grafico successivo verifichiamo la completezza del lavoro:
- Le due curve sono associate agli assi corretti: Gain → Y1 e Phase → Y2.
- La calibrazione ha scala X logaritmica e gli intervalli fisici corrispondono al grafico originale.
- Ogni Dataset pubblicato contiene 100 righe, senza mescolare gradi e decibel.
- La Preview Curves rappresenta correttamente gli assi, mentre Canonical Data mostra i valori.
- Le tabelle con incertezza contengono
sigma_x,sigma_yecovariance_xye la motivazione del modello è salvata. - Gli identificativi dei punti, la calibrazione e le coordinate raster sono disponibili nella sezione di tracciabilità.
Salviamo quindi la Session attraverso i normali comandi GX-TXT. Quando riapriremo il lavoro, potremo ritrovare le configurazioni del Digitalizer e i Dataset pubblicati dal catalogo della Session.
I Dataset potranno essere utilizzati per confronti con il modello RC, ulteriori rappresentazioni con Plot Dataset, elaborazioni tramite Script Bridge oppure altri passaggi scientifici disponibili nel framework. La digitalizzazione non produce soltanto un nuovo disegno: produce valori numerici con unità, identità e provenienza.