Ich habe Probleme herauszufinden, wie ich den schnellen 8x8 DCT-Algorithmusdiagrammen in den folgenden beiden Abhandlungen folgen kann:
(1) Ein schneller Berechnungsalgorithmus für die diskrete Cosinustransformation von Chen et al.
und
(2) Praktisch schnelle 1-D-DCT-Algorithmen mit 11 Multiplikationen von Loeffler et al.
Insbesondere sieht das zweite Diagramm, das den Algorithmus in (2) zeigt, wie folgt aus:
Die Beschreibung der Operationen in diesem Algorithmus lautet:
Ich habe einige Fragen zu dieser Formulierung und bin mir nicht sicher, wo ich die Antworten finden kann:
(2) legt nahe, dass dieser Algorithmus eine DCT erzeugt, die um einen bestimmten Wert skaliert wird . Es wird erwähnt, dass dieswurde willkürlich gewählt, um Multiplikationen bei der Berechnung des Gleichstromkoeffizienten zu vermeiden. Wirklich die einzige Voraussetzung ist das. Meine Frage lautet also: Was ist der Skalierungsfaktor der Ausgabekoeffizienten unter Verwendung dieses Algorithmus? Es scheint, als ob sie sich von der ursprünglichen Definition der DCT unterscheiden, aber ich weiß nicht, um wie viel (hauptsächlich, weil ich tatsächlich keine Beziehung zwischen diesem Diagramm und der ursprünglichen Formulierung der DCT sehe):
wo zum und zum .In dem Artikel heißt es, dass die IDCT mit genau demselben Algorithmus durchgeführt werden kann, wobei jedoch die Ausgaben in Eingaben umgewandelt werden und umgekehrt. Müssen die DCT-Koeffizienten zunächst in Bit-umgekehrter Reihenfolge angeordnet werden, bevor sie durch die IDCT geleitet werden? Zweitens sollte für die Rotationsblöcke (die Quadrate im Diagramm) nicht die umgekehrte Operation sein:
Meine Argumentation lautet: Die Umkehrung einer Rotation um ist eine Rotation von . Daher ersetzen wir einfach den Winkel durch seine Umkehrung und verwenden die Identitäten und . Drittens, was ist der Skalierungsfaktor der transformierten Werte nach der IDCT? (2) sagt, aber empirisch hat dies nicht zu korrekten Ergebnissen geführt.Angenommen, nachdem ich den Algorithmus ausgeführt habe, habe ich das Ergebnis jeder Spur in den Werten gespeichert
d0 ... d7
. Welche der folgenden ist korrekt:Ausgang [0] = d0 oder Ausgang [0] = d0 Ausgang [4] = d1 Ausgang [1] = d4 Ausgang [2] = d2 Ausgang [2] = d2 Ausgang [6] = d3 Ausgang [3] = d6 Ausgang [7] = d4 Ausgang [4] = d7 Ausgang [3] = d5 Ausgang [5] = d3 Ausgang [5] = d6 Ausgang [6] = d5 Ausgang [1] = d7 Ausgang [7] = d1
Wenn es Möglichkeiten gibt, diese Frage zu verbessern, oder wenn ich sie woanders stellen sollte, lassen Sie es mich bitte wissen.