Dopo aver letto i tuoi commenti, sembra più ragionevole. Non ero sicuro che tu fossi intenzionato a codificare megabyte di dati come questo.
Raccomanderei, sulla falsariga del suggerimento di Oliver, di aumentare la densità dei dati prendendo in prestito una pagina dal codice di Bacon , che le bande carcerarie usano spesso per codificare i messaggi nascosti nelle missive scritte in 2 diversi stili di script - di solito o caratteri minuscoli o caratteri di stampa rispetto a quelli corsivi, ad es
Hey mOM, WHAT's FOR diNNeR TODAY? = ABBBA AAAAA BAAAB BAABA AAAAA
= P A S T A
Tuttavia, poiché il tuo obiettivo non è la stegnografia, lo useresti semplicemente per espandere il tuo set di glifi. In questo modo, potresti avere fino a 114 glifi utilizzando solo caratteri alfanumerici di stampa e corsivo o 12996 punti di codice utilizzando la codifica a due caratteri.
Tuttavia, poiché tutti i conteggi di glifi maggiori di 15 e inferiori a 256 sono essenzialmente gli stessi per una cifra semplice di dati binari (il che significa che avrai comunque bisogno di 2 caratteri per rappresentare ogni byte, dandoti una densità di dati di 4 bit per carattere in tutti i casi), è possibile utilizzare i 98 glifi / 12740 punti di codice aggiuntivi per il rilevamento / correzione degli errori.
I modi per farlo includono:
- Scegli un set di 256 combinazioni di caratteri più facili da leggere / scrivere. Se si verifica un'altra combinazione di caratteri, sai che si tratta di un errore di copia.
- Utilizzare due versioni del carattere finale come bit di parità.
Crea 50 diversi set di glifi di 16 caratteri. È quindi possibile utilizzarli per codificare i dati di correzione degli errori.
Ad esempio {set 1}{set 1}
significa che i prossimi 3 stuzzichini sono uguali 0x000
, {set 1}{set 2}
uguali 0x001
, ecc.
Puoi usarlo per rappresentare 2500+ dei 4096 possibili valori di 1,5 byte. Allo stesso modo, è possibile utilizzare solo 16 set per rappresentare tutti i valori del byte seguente, offrendo una ridondanza del 100% senza aumentare la lunghezza dei dati codificati.
In alternativa, è possibile utilizzare i glifi extra per una compressione aggiuntiva:
- Implementa la codifica a larghezza variabile scegliendo 98 punti di codice a carattere singolo. Ciò ridurrebbe la dimensione media del contenuto codificato di circa il 20%.
- Implementa qualcosa di simile alla codifica run-length utilizzando diversi set di glifi o combinazioni di set di glifi per rappresentare nibble / byte ripetuti. Ad esempio
Ab
= aba
; aB
= abab
; AB
= ababab
...
- Usa i glifi o i punti di codice extra per rappresentare "parole" e "frasi" che si ripetono nei tuoi dati. Sebbene i dati precompressi probabilmente avranno un alto livello di entropia, quindi non so quanto sarebbe efficace.
Per ridurre ulteriormente gli errori di copia, visualizzerei il contenuto codificato in griglia e lo copierei su carta millimetrata. Se è possibile utilizzare elementi fissi personalizzati con colori alternati di colonne / righe o una griglia a scacchi stile scacchiera con colonne e righe numerate per ricerche rapide, ciò aumenterebbe ulteriormente l'accuratezza della copia.
Puoi anche combinare un layout a griglia alternata con stili di carattere alternati come una semplice forma di rilevamento degli errori. Vale a dire se le colonne dispari sono sempre in maiuscolo, se il trascrittore si trova a scrivere lettere minuscole in colonne dispari, allora sanno di aver fatto un errore e possono iniziare a rintracciare per vedere dove è successo.
Tuttavia, se la tua priorità principale è l'accuratezza, utilizzerei una codifica binaria + un
codice Hamming . Usando un codice Hamming (12, 8) abbreviato su carta millimetrata standard, potresti contenere solo 187 byte, codificando solo 124 byte di dati. Ma potrebbe essere trascritto molto rapidamente (una barra per 1, niente per 0) e fornire una singola correzione dell'errore. L'impostazione di un bit di parità aggiuntivo (13, 8) fornirebbe SECDED (correzione dell'errore singolo, rilevamento dell'errore doppio). Utilizzando un codice di hamming standard come (15, 11) o (31, 26), si ottiene un'efficienza ancora migliore con 137 e 156 byte di dati per foglio, rispettivamente. Possono essere raggiunti tassi di codice ancora più alti, a seconda di quanto pensi possa essere accurato il tuo trascrittore.
Una codifica binaria sarebbe anche più facile da leggere (ad alta voce) e OCR / OMR.