Lettore, convertitore, visualizzatore e analizzatore di file SCP-ECG (EN 1064 / ISO 11073-91064) scritti da elettrocardiografi portatili Creative / Gima PC-80B.
Nato perché il software in dotazione non bastava e i file .SCP non si aprono
con niente. Tutto quello che serve è qui: un file Python, numpy e
matplotlib.
- legge i file
.SCPe ne stampa la struttura completa, sezione per sezione - verifica CRC e coerenza del record
- esporta i campioni in CSV (tempo in secondi, ampiezza in millivolt)
- disegna il tracciato su carta millimetrata in scala clinica reale (25 mm/s, 10 mm/mV), stampabile e misurabile col righello
- apre una finestra interattiva con cursore a mirino, lettura continua di tempo e millivolt, e un caliper a due punti per misurare gli intervalli
- classifica il ritmo e la qualità del segnale, con soglie esplicite
Tutti i parametri di acquisizione (AVM, frequenza di campionamento, numero di derivazioni, lunghezza dei blocchi) sono letti dall'header: niente è cablato. Se cambi apparecchio, lo script si adatta.
Scarica l'app per macOS (Apple Silicon, non firmata: al primo avvio clic destro → Apri)
Oppure:
git clone https://github.com/silfox70/scpecg.git
cd scpecg
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtPer l'interfaccia grafica serve anche tkinter. Su macOS con Python di
Homebrew non è incluso:
brew install python-tk@3.14Senza tkinter la parte da riga di comando continua a funzionare.
python scpecg.py # apre la finestra e chiede il file
python scpecg.py 10.SCP # apre il file nella finestra interattiva
python scpecg.py --info 10.SCP # struttura e analisi, senza produrre file
python scpecg.py --batch *.SCP # converte tutto in CSV e PNGOpzioni utili:
| opzione | effetto |
|---|---|
--mm-per-mv 10 |
forza la scala clinica standard (default: automatica) |
--mm-per-s 50 |
velocità carta doppia, per guardare la morfologia |
--seconds-per-row 5 |
secondi per riga nel PNG |
--baseline none |
non rimuove l'offset dell'ADC |
--invert |
ribalta il segnale (verifica di elettrodi invertiti) |
Documentato in dettaglio in docs/FORMATO.md. In sintesi:
| aspetto | valore |
|---|---|
| versione | SCP-ECG 1.3 |
| sezioni presenti | 0, 1, 2, 3, 6, 9 |
| campionamento | 6666 µs → 150,02 Hz |
| durata | 4500 campioni → 30 s |
| AVM | 806 nV per unità |
| ADC | 12 bit, offset di mezza scala 2048, fondo scala 3,3 mV |
| banda passante | 0,5–40 Hz |
| compressione | nessuna (sezione 2 dichiara una tabella con una voce) |
Tre scostamenti dallo standard, tutti riconosciuti automaticamente:
- Il bit 15 dei campioni marca i picchi R. Letti come
int16con segno, quei campioni diventano valori negativi enormi e il tracciato sembra invertito. Vanno mascherati con& 0x7FFF; le loro posizioni sono il rilevamento dei battiti fatto a bordo dall'apparecchio, gratis. - Codice derivazione 101, fuori dalla tabella dello standard che si ferma a 64. L'apparecchio non distingue la modalità di misura: secondo il manuale, palmo ≈ DI, cavetti ≈ DII, torace ≈ derivazione V.
- I marcatori del punto 1 compaiono solo in alcune registrazioni.
Riproduce la struttura dei 17 verdetti del PC-80B (frequenza, regolarità,
qualità del segnale), non il suo algoritmo. Il costruttore non pubblica le
soglie: quelle nel dizionario SOGLIE sono in parte prese dal manuale e in
parte scelte qui, ognuna etichettata con la propria provenienza. Sono l'unico
punto da toccare per ritarare tutto.
Non è una diagnosi. È un descrittore di ritmo e qualità del segnale su una sola derivazione non standard. L'interpretazione clinica spetta al medico.
I file .SCP e i .CSV che ne derivano sono dati sanitari. Il .gitignore
li esclude di default: se li committi restano nella storia di git anche dopo
averli cancellati.
Per chi non vuole installare Python, si può costruire un eseguibile con PyInstaller:
pip install pyinstaller
pyinstaller --clean --noconfirm scpecg.specSu macOS produce dist/scpecg.app. Pesa circa 124 MB: è quanto costano numpy
e matplotlib, già al netto di tutto l'escludibile.
Da riga di comando l'eseguibile vero sta dentro il bundle:
./dist/scpecg.app/Contents/MacOS/scpecg --info 13.SCPAl primo avvio macOS la blocca, perché l'app non è firmata né notarizzata (servirebbe un account sviluppatore Apple). Clic destro sull'app, poi "Apri", poi conferma: dalla seconda volta parte normalmente. In alternativa:
xattr -dr com.apple.quarantine dist/scpecg.appPyInstaller non compila per un sistema diverso da quello su cui gira: per Windows serve una macchina Windows.
L'icona si rigenera con python tools/make_icon.py, che produce .png,
.icns e .ico da un unico disegno.
Silvestro Scuderi — github.com/silfox70
GNU General Public License v3.0 o successiva. Vedi LICENSE.
Il programma è software libero: puoi usarlo, studiarlo, modificarlo e ridistribuirlo. Se ne distribuisci una versione modificata, devi rilasciare anche quella sotto GPL, con i sorgenti. La documentazione del formato è frutto di reverse engineering: resta aperta a chi verrà dopo.
