000
21.11.2016, 06:44 Uhr
Hobi
|
Am Wochenende hatte ich mich wieder mit Kodierungen für den Audioeingang auseinandergesetzt. Da neuerdings die Aufzeichnungsgeräte nicht mehr magnetisch sind, sollte sich doch da was verbessern lassen.
Die Idee dahinter war a) eine schnellere Abspielmöglichkeit für Micha's KC85 Recorder zu finden b) die Programme vom SDCC Compiler ohne langes Warten direkt auf der Zielmaschine auszuführen (ohne zusätzliche Hardware wie z.B. ein V24 Modul)
und sollte es gut funktionieren c) kann man es einfach aufs Handy portieren und hat so ein mobiles Datenabspielgerät.
Der erste Ansatz war die Grenzen des Originalverfahrens auszutesten. Man kann das Sample 10-20% schneller abspielen und zusätzlich die Pausen verkleinern. Im besten Fall gibt es 40% Verbesserung, ohne dass man etwas an der Software drehen muss. Auf der anderen Seite ist das auch nicht wahnsinnig schneller. Statt 100 Bytes pro Sekunde, käme man im besten Fall auf 140 Bytes pro Sekunde. Oder anders gesagt: 6,3 KByte brauchen 45 Sekunden, statt 58.
Der zweite Ansatz war die NRZ Kodierung bei der eine 1 als Phasenwechsel und bei 0 eben kein Phasenwechsel verwendet wird. Hier kommt man bei 2400 Hz auf 4800 Bits pro Sekunde. Die UART oder USB verwenden wahrscheinlich diese Art der Übertragung. Blöderweise geht es am KC so einfach nicht. Hier war konnte schon zwischen 3 oder 4 Nullbits nicht mehr klar unterschieden werden. Irgendwer auf dem Kabel oder dahinter verschiebt den Nulldurchgang etwas. Die Daten sollten möglichst Gleichspannungsfrei ankommen.
Nach längeren Rumprobieren habe ich dann die kürzeste NRZ Kodierung gewählt ( 1 als Phasenwechsel, 0 eben kein Phasenwechsel gefolgt von einer 1). Diese Kodierung ist in etwa gleich als würde man ein Halbwelle für ein 1 Bit verwenden und für die 0 eine Halbwelle mit halber Frequenz - 1 steht für Kurz, 0 lang. Damit kommt man im Mittel auf 3600 Bits pro Sekunde.
Im wesentlichen ist es dann das gleiche Verfahren wie beim KC geblieben, nur dass der eine komplette Welle verwendet und beide Nulldurchgänge aufaddiert. Mit der Methode konnte man etwas den Gleichspannungsanteil herausmitteln. Im Idealfall gibt es bei uns keinen Gleichspannungsanteil, also reicht mir ersteinmal eine halbe Welle pro Bit. Eine bessere Kodierung habe ich noch nicht gefunden.
Die Frequenz ist momentan noch bei 2400 Hz. Damit bekommen wir maximal 4800 1 Bits pro sekunde oder 2400 Nullbits. Im Mittel habe ich eine Datanrate von 380 Bytes pro Sekunde. 6,3 KByte brauchen jetzt nur noch 17,3 Sekunden.
Das ist schon mal ein guter Start, verglichen mit dem Original und der Tatsache, dass ich die gleiche Maximalfrequenz verwende. Ohne grosse Änderungen konnte ich die Frequenz auf über 3kHz erhöhen. Dann aber fingen die Probleme schon wieder an, zu unterscheiden, ob die Welle eine 1 oder 0 ist. Auch wenn die Daten im PC perfekt aussehen, irgendwer verschiebt den Nullpunkt und so kommen nicht so an, wie beabsichtigt. Vielleicht liegt es an meinem PC oder Kabel.
Die Frequenz will später noch erhöhen für den Moment experimentiere ich mit 2400Hz und möchte ersteinmal den Loader fertigstellen. Später könnte man noch eine simple Komprimierung verwenden und so die Datenrate noch etwa erhöhen, falls es die Gesamtgeschwindigkeit verbessert. Wenn es langsamer als vorher wird, macht es keinen Sinn. -- ------------------------------------------- Corontäne ------------------------------------------- |