hetzel.net

Binäre Phasenumtastung

Akustikkoppler

Ich jage gerade einem iOS-Bug hinterher, der scheinbar zufällig Audio bei der Übertragung verliert, oder überspringt. Wie auch immer, es hört sich kaputt an. Aber wo wird wieviel Audio übersprungen, oder verdoppelt, oder was passiert?

Ein Fall für binäre Phasenumtastung!

Wir generieren eine pseudozufällige Bitabfolge, die wir im Anschluss nach der Übertragung wieder erkennen können. Nach dieser Bitabfolge können wir später wieder suchen, sie dient als Zeitcode.

101011 111100
chip (ms):  0  1  2  3  4  5
left bit:   1  0  1  0  1  1
right bit:  1  1  1  1  0  0
pair:      11 01 11 01 10 10

Jedes Bit wählt eine von zwei Phasenlagen: 0° oder 180°. Linker und rechter Kanal separat, auf unterschiedlichen Trägerfrequenzen. Wir generieren Chips mit einer Länge von 48 Abtastzeitpunkten pro Bit. Die Chipfolge hat so bei 48kHz Abtastrate eine Zeitrasterung von 1 ms.

So haben wir uns das langweiligste 2000 Baud-Modem der Welt gebaut. Hört sich auch so an:

Dieses Schallsignal übertragen wir über den anfälligen Übertragungsweg, nehmen das Resultat auf und können dort nach dem pseudozufälligen Zeitcode suchen. Der Detektor zeigt, wie weit die Quellzeit gegenüber der Aufnahmezeit gesprungen ist und kann übersprungene oder wiederholte Quellzeit messen.

Dieses Timing hat für den Bug zumindest den entscheidenden Hinweis für einen Workaround gebracht.

Und ich habe jetzt diesen schicken Audioplayer für das Blog, der sich während des Uploads gleich noch die Hüllkurve generiert.