Ich versuche, die Modulation und Demodulation eines PAL-Videoframes in Software zu emulieren, aber ich habe Probleme zu verstehen, wie die AM- (Luma) und QAM- (UV) Komponenten des Signals während des Demodulationsprozesses getrennt werden.
Hintergrund:
Die Software, die ich schreibe, nimmt eine RGB-Bitmap, übersetzt sie unter Verwendung des BT.601-Standards in Y'UV, erzeugt (moduliert) ein Signal als eine Reihe von Samples und speichert diese Samples dann in einer Wave-Datei. Diese Samples können dann wieder geladen und wieder in eine Bitmap demoduliert werden, wobei die H-Sync-Impulse gegen den H-Pos-Rampengenerator honoriert werden, wie es ein alter CRT-Fernseher tun würde, und schließlich zurück in eine RGB-Bitmap übersetzt werden.
Es gibt zwei Motivationen hinter diesem Projekt: erstens, um ein cool aussehendes analoges Fuzz in Software zu erstellen; und zweitens, um die TV-Standards und grundlegende Modulations- / Demodulationstechniken in einem Bereich (Software) besser zu verstehen, in dem ich mich wohler fühle.
Was ich bisher habe:
Der Code führt die Modulation gut aus, und wenn das Ergebnis in Audacity angezeigt wird (mit einer Abtastrate, die auf 1/1000 der tatsächlichen Frequenz vorgetäuscht ist), zeigt es ein Signal, das ich als eine Reihe von PAL-Bildzeilen erkenne. Der gesamte Prozess funktioniert, wenn ich ihn in den Schwarz-Weiß-Modus versetze, wodurch das QAM-Signal aus dem Modulationsschritt weggelassen wird und nur der amplitudenmodulierte Luma-Kanal übrig bleibt. Ich habe auch den QAM-Modulations- und -Demodulationscode mit einer einfachen Audiodatei getestet und es funktioniert großartig. Das einzige, was ich nicht zum Laufen gebracht habe, ist die Bilddemodulation mit den enthaltenen AM-Luma- und QAM-Farbkomponenten.
Die Verwirrung:
Bei einem reinen, unberührten QAM-Signal erscheint es relativ trivial, das Signal durch individuelle Multiplikation mit dem Trägersinus und seinem Kosinus wieder in seine ursprünglichen zusammengesetzten Signale zu demodulieren:
Die beiden Komponenten werden dann bei der Trägerfrequenz einem Tiefpass unterzogen, um hochfrequente Terme zu entfernen. Dies scheint großartig zu funktionieren, und wie ich oben angemerkt habe, funktioniert meine Implementierung der QAM-Demodulation einwandfrei.
Ebenso kann ich eine einfache AM-Demodulation implementieren, selbst wenn das Signal von anderen Signalen in separaten Teilen des Frequenzbereichs begleitet wird - es ist nur ein Fall von Hochpass und/oder Tiefpass, bis Sie das gewünschte Bit haben.
Soweit ich sehen kann, wird jedoch die QAM-modulierte UV-Komponente zum Basis-AM-Luma-Signal hinzugefügt, wobei sich beide Teile im Frequenzbereich überlappen, wie das folgende Diagramm aus Wikipedia zu zeigen scheint:
An dieser Stelle bin ich etwas ratlos. Es sieht nicht so aus, als könnte ich aufgrund der Überlappung einen Tiefpass zum AM-Luma-Signal erhalten, und ich kann nicht sehen, wie ich das QAM-Signal vom zugrunde liegenden AM subtrahieren würde.
Was vermisse ich? Was sind die logischen Schritte, die unternommen werden sollten, um die Luma- und UV-Komponenten zu trennen?
Es gibt einen Trick, der bei NTSC verwendet wird und meiner Meinung nach auch für PAL gilt.
Wenn Sie sich die feinen Details des Spektrums des Luminanzsignals ansehen, stellen Sie fest, dass die meiste Energie bei Vielfachen der horizontalen Sweep-Frequenz konzentriert ist, mit relativ wenig Energie zwischen diesen Spitzen (diese Energie repräsentiert diagonale Kanten im Bild, die relativ selten sind). Es gibt ein ähnliches Muster in den Details des Chrominanzsignals. Daher wurde die Farbhilfsträgerfrequenz sorgfältig ausgewählt, um die Spitzen ihres Leistungsspektrums zwischen die Spitzen des Luminanzspektrums zu legen.
Die Filter, die diese Informationen wieder in zwei getrennte Ströme trennen können, werden "komplementäre Kammfilter" genannt. Sie erstellen einen Kammfilter für das Luminanzsignal, indem Sie es um eine horizontale Zeilenperiode verzögern und es dem ursprünglichen Signal hinzufügen. Anschließend subtrahieren Sie dieses gefilterte Signal vom Originalsignal, um das Komplementsignal zu erhalten, das hauptsächlich das Chrominanzsignal enthält (das Sie anschließend auf den entsprechenden Frequenzbereich bandpassfiltern).
Bandpassfilter um den Farbunterträger herum, um das Luma-Signal (größtenteils) vor dem Chroma-Decoder zu eliminieren, und der passende Notch-Filter im Luma-Kanal, um schleichende Bitmuster aus dem Luma-Kanal herauszuhalten.
Was in Ihrem ENcoder bisher wahrscheinlich fehlt, ist ein Notch-Filter, um Luma-Informationen um den Farbhilfsträger herum zu eliminieren (oder vielmehr zu reduzieren). Die Wahl der Filterbandbreiten liegt bei Ihnen, je nachdem, wie wichtig Ihnen die Chroma-Bandbreite, der Luma-Bandbreitenverlust und die Kreuzkontamination sind.
Jeder, der in den 1970er Jahren die Six O'Clock News (auf BBC1) gesehen hat, wird Ihnen sagen, dass die Überlappung echt war, und selbst bei der besten Filterung gab es eine gewisse Kreuzkontamination von Chroma in den Luma-Kanal und, ziemlich offensichtlich, von feines Luma-Detail in den Chroma-Kanal.
Genauer gesagt werden sie sich an die ablenkenden Regenbögen erinnern, die über Kenneth Kendalls Körper tanzten, als er sich bewegte, dank der schwarz-weiß karierten Tweedjacke, die er unbedingt tragen wollte!
Als die digitale Filterung praktikabel wurde, wurden bessere und sauberere PAL-Codierer möglich, aber das Problem kann einfach nicht vollständig beseitigt werden.
Und in einigen Kontexten hat es positive Nebenwirkungen; Es hat sich als möglich (aber schwierig) erwiesen, Farbe aus einer monochromen Filmkopie einer Sendung wiederherzustellen!
Ein Kerbfilter, der eintaucht und die Farbinformationen herausnimmt? Sehen Sie sich diesen App-Hinweis an, er geht mehr auf Y/C-Trenntechniken ein. Sie könnten nur einen Tiefpass-Hochpass verwenden, jedoch mit Detailverlust.
Das entmystifizierte Buchvideo ist ebenfalls eine gute Ressource, Sie können eine kostenlose Kopie online finden.
GR-Tech