Forum: Digitale Signalverarbeitung / DSP / Machine Learning S/PDIF Daten interpretieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Audiohans (Gast)


Lesenswert?

Bedingt durch eine Diskussion zu inkompatiblen S/PDIF Geräten möchte ich 
eine Software schreiben, die die Plausibiliät von Daten nachweist und 
Fehler aufzeigt. Es geht dabei um Übertragungsfehler und falsch 
programmierte Protokolle.

Zur Verfügung steht ein Logic Analysator, der knapp 1MB an samples 
aufzeichnen kann und exakt mit der rekonstruierten Bit Clock läuft. Wenn 
ein verdächtiger Wert (ein glitch) in den Audiodaten auftaucht, kann der 
Sampler gestoppt werden. Die Daten werden dann langsam in den PC 
gezogen.

Nun geht es darum, das Protokoll zu verstehen, damit die Interpretation 
richtig einrasten kann und den Beginn eines Datenblocks detektiert 
werden kann.

Leider habe ich schon ein Verständnisproblem mit der Präambel!

Laut ... http://www.hardwarebook.info/S/PDIF  gibt es drei Präambelworte 
zu jeweils 8 bit, in dem Protokoll sind aber nur 4 vorgesehen. Wie ist 
das aufzufassen?  Sind das die 4 anderen Audiobits direkt darunter?

von Clemens L. (c_l)


Lesenswert?

Du musst zwischen Datenbits einserseits und den BMC-Bits auf der Leitung 
andererseits unterscheiden.

4 Datenbits entsprechen 8 BMC-Bits.

Die 8 Bits in der Präambel sind keine gültige BMC-Codierung; deshalb 
sind das nicht wirklich 4 Datenbits, sondern nur ein Muster, das genauso 
lang ist.

von Audiohans (Gast)


Lesenswert?

Ok, das macht Sinn, was Du sagst. Das ist aber nirgendwo erklärt. Kann 
man das irgendwo nachlesen?

11101000 wäre in dekodierten Bits dann 0,1,1,0

Damit bliebe noch die Frage, wie ich sicherstelle, dass ich so eine 
Kombi nicht mitten im Datenstrom erfasse und als Start interpretiere. 
Muss ich dazu nach sich wiederholenden Startmustern suchen?

Dazu schreibst Du:
>Die 8 Bits in der Präambel sind keine gültige BMC-Codierung;
Wieso ist das so?

Wegen der 3 folgenden Einsen oder Nullen?

von Clemens L. (c_l)


Lesenswert?

Audiohans schrieb:
> Kann man das irgendwo nachlesen?

Ist teuer: http://www.aes.org/publications/standards/search.cfm?docID=13

> 11101000 wäre in dekodierten Bits dann 0,1,1,0

Nein. Die Prämbel darf (und kann) man nicht so dekodieren.

> Damit bliebe noch die Frage, wie ich sicherstelle, dass ich so eine
> Kombi nicht mitten im Datenstrom erfasse und als Start interpretiere.

Weil sie in einem fehlerlosen Datenstrom nicht vorkommen kann.

>>Die 8 Bits in der Präambel sind keine gültige BMC-Codierung;
>
> Wegen der 3 folgenden Einsen oder Nullen?

Ja.

von J. S. (engineer) Benutzerseite


Lesenswert?

Clemens L. schrieb:
> Ist teuer: http://www.aes.org/publications/standards/search.cfm?docID=13
Wenn man da Mitglied ist, kriegt man das umsonst. Zumindest war das mal 
so. (?)

>> 11101000 wäre in dekodierten Bits dann 0,1,1,0
> Nein. Die Prämbel darf (und kann) man nicht so dekodieren.
Nun, können geht schon, wenn man das händisch macht. Wenn es ein Chip 
tut, wird das nicht passieren, wobei ....

>>>Die 8 Bits in der Präambel sind keine gültige BMC-Codierung;
>> Wegen der 3 folgenden Einsen oder Nullen?
> Ja.
Eine richtige Codierung der angenommenen 0,1,1,0 müsste so umgesetzt 
worden sein, dass 11010100 gesendet werden, weil zum Flankenwechsel des 
Datenbits auf ein Pegelwechsel des Ausgangs erfolgen muss, egal, ob sich 
das bit ändert oder nicht.

Allerdings frage ich mich, was passiert, wenn in der Tat falsch gesendet 
wird, bzw der Takt so unsauber ist, daß eine Fehlinterpretation möglich 
wird. Ich habe das mal mit FPGAs gemacht und hatte anfangs Taktprobleme. 
Empfangen ging gut, Senden war leider manchmal Gemüse. Lag am Jitter.

von J. S. (engineer) Benutzerseite


Lesenswert?

Habe das jetzt mal probiert: Wenn der Takt zu gering ist, dann werden 
einige der 3 Einsen offenbar als 2 erkannt und er synched irgendwann 
nicht mehr, bzw er läuft einfach drüber hinweg. Wenn der Takt zu hoch 
ist, sind die Geräte offenbar toleranter. Zumindest mein Digitalpult und 
meine Digitalmonitore. Kurze Schwankungen werden offenbar weggerechnet. 
Gfs erfolgt in den Chips eine entsprechende Überabtastung mit geeigneter 
Interpreation. Muss jetzt meine eigene S/PDIF VHDL mal nachrüsten :-)

von Tom W. (Gast)


Lesenswert?

Hier ist was dazu gesagt worden:

Beitrag "SP/DIF Audioübertragung"

von Jobst M. (jobstens-de)


Lesenswert?

Die Präambel enthält nur die Kennung, um welchen Kanal bzw. ob es sich 
um einen Blockanfang handelt, sowie durch die Gestaltung die 
Möglichkeit, den Takt daraus zu gewinnen. Sie enthält keine Daten, 
welche dekodiert werden müssten. Daher ist die Überlegung, diese 8 Bits 
in 4 Datenbits umzuwandeln, überflüssig.
Bei solchen Protokollen gibt es immer Regeln und eine Verletzung, die 
man dann erkennen kann. Die Regel ist hier: Nach jedem Bit erfolgt eine 
Flanke.
In der Präambel wird diese Regel verletzt.

Ich hatte mal einen USB-zu-SPDIF-converter von Conrad. Diesem war es so 
wichtig, eine LED blinken zu lassen, dass dafür auch der SPDIF 
Datenstrom unterbrochen wurde.


@ Thomas:
Hast Du den PLD (anderer Thread) eigentlich zum laufen gebracht?


Gruß

Jobst

von Tom W. (Gast)


Lesenswert?

Nicht so wirklich, das Projekt liegt noch danieder!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.