Audiograbber 1.80 -> Qualität beim Encoden
-
Hallo Frank!
Ich hab da mal eine allgemeine Bemerkung zu deinem "Encodertest". Also, generell beruht MPEG-Audiokompression darauf, daß das Signal in Frequenzbänder unterteilt wird. In den für das Gehör unwichtigeren Bändern wird dann Quantisierungsrauschen eingefügt. Dieses Verfahren funktioniert perfekt bei einem Eingangssignal, das zum Beispiel aus einer Sinuswelle besteht. Daher sind Encodertests, die eine Sinuswelle benutzen, nicht sinnvoll: Jeder noch so schlechte Encoder erkennt sofort, daß nur in einem Band Daten anliegen und benutzt seine komplette Bandbreite dafür. Wenn man dagegen auf allen Bändern ein Signal anlegt, erkennt man die Fähigkeiten eines Encoders sehr gut - allerdings darf das Signal kein (wichtig!) Rauschen sein. Der Encoder würde dann nämlich bei Bändern, die nur mit wenigen Bits abgelegt sind, Quantisierungsrauschen einfügen, das von dem eigentlichen Rauschen praktisch nicht zu unterscheiden ist.
Am besten zum Testen eignen sich nach meinen Erfahrungen: Klassische Musik und Liveaufnahmen (das Klatschen ist ein Rauschen mit genügend Struktur, um den im Vergleich zum Applausrauschen eher niederfrequenten Pre-Echo Fehler zu hören der auftritt, wenn ein Signal sich schnell (innerhalb 1 Sekunde) ändert z.B. von 50 Hz auf 10 kHz.) und für Tests mit niedrigeren Bitraten eignet sich Sprache ganz wunderbar.Gruß
jaybee
-
Soo, das war ganz schön viel Text, den ich hier lesen musste ;D
Und ziemlich viele Fragen auf einmal... fangen wir mit den leichten an: die Email-Adresse von Jackie ist jackie@audiograbber.com-us.net. In solchen Fragen ist er ein sehr kompetenter Ansprechpartner.Zu dem Problem mit dem Xing-Encoder (AudioCatalyst): das Abschneiden der hohen Frequenzen (>15 KHz) war eigentlich immer DAS Problem dieses Encoders. Da haben sich schon viele Leute drüber aufgeregt. Aber da bei Xing nichts mehr entwickelt wird, seit sie von Real aufgekauft wurden, wird sich das wohl auch nicht mehr ändern.
fperau: Hast du denn Lame schon mal probiert? Im jetzigen Entwicklungsstand kann es sich absolut mit Fraunhofer messen, mich würde mal interessieren, wie der sich in den verschiedenen Einstellungen verhält.
Wer jetzt die ms am Anfang und am Ende wegschneidet, AG oder der Codec, weiss ich auch nicht. Vielleicht weiss Jackie da ja eine Antwort.
Aber seltsam ist es wirklich (auch wenn es wohl kaum einer mitkriegt). Gut, dass es noch so aufmerksame User gibt
-
Das prinzipielle Verfahren des Quantisierers ist folgendes: Wenn die Signalintensität eines Subbandes unter dessen Maskierung liegt, muß das Signal gar nicht kodiert werden, weil es unhörbar bleibt. Ansonsten werden die Frequenzsamples mit gerade so vielen Bits quantisiert, daß das dadurch eingeführte Quantisierungsrauschen durch die Maskierung gerade noch unhörbar bleibt.
Für jede Gruppe von 3x12 Samples eines Subbandes gibt es einen Wert, der angibt, mit wie vielen Bits Auflösung diese Samples quantisiert werden und bis zu drei Skalierungsfaktoren (höchstens einer für 12 Samples). Die Skalierungsfaktoren werden bei der Dekodierung mit den quantisierten Samples multipliziert, wodurch sich eine Verbesserung der Quantisierungsauflösung ergeben kann. Drei Skalierungsfaktoren pro Block werden nur verwendet, wenn es unbedingt nötig ist, um Verzerrungen des Signals zu vermeiden. Skalierungsfaktoren werden von zwei oder allen drei 12er-Gruppen gemeinsam genutzt wenn: (1) sich die Werte der Skalierungsfaktoren ähnlich genug sind, oder (2) wenn der Kodierer erkennt, daß die zeitliche Maskierung des Gehörs die eingeführten Fehler unhörbar macht.
Es wird eine Iterationsschleife durchlaufen, die Quantisierungsparameter in geordneter Weise variiert, die Samples quantisiert und das dadurch erzeugte Quantisierungsrauschen tatsächlich ausrechnet, um zu prüfen, ob es im unhörbaren Bereich bleibt. Wenn dies nicht der Fall ist, wird für die entsprechenden Subbänder eine feinere Quantisierung gewählt ("noise allocation"). Diese Schleife benötigt den Hauptteil der Rechenzeit beim Quantisierungsprozeß. Außerdem werden die quantisierten Samples zusätzlich Huffman-kodiert, um eine weitere Reduzierung des Speicherbedarfs zu erzielen. Die verwendeten Huffman-Bäume sind statisch.
Für ein Audiosignal, das mit einer Abtastfrequenz von 44,1 kHz aufgezeichnet wurde und durch Kompression auf eine Datenrate von 128 kBit/s reduziert werden soll, ergibt sich pro Datenblock eine Größe von:1152 (Samples/Block) x 128000 (Bits/s) / 44100 (Samples/s) = 3344 (Bits/Block)
Benötigt ein Block weniger als die diese Anzahl an Bits, so werden die übrigen Bits an das sogenannte "Bit-Reservoir" übergeben. Läßt sich umgekehrt ein Block nicht ohne hörbaren Qualitätsverlust mit der vorgegebenen Blockgröße kodieren, so können Bits aus dem Bit-Reservoir entnommen werden, die zusätzlich zur Kodierung des Blocks verwendet werden. Die Blöcke, die nicht die ganze Blockgröße benötigen, werden mit Daten der nächsten Blöcke aufgefüllt; siehe Bild 8. Es dürfen jedoch zu keiner Zeit mehr Bits entnommen werden als im Bit-Reservoir vorhanden sind.[1]
Ich denke, das lässt keine Fragen offen.
jaybee
[1] http://goethe.ira.uka.de/seminare/redundanz/vortrag14/#quantisierung
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden
