MP3-Dekodierungsdiskrepanz

7

Können zwei verschiedene Decoder zwei verschiedene Sample-Ergebnisse für denselben MP3 ausgeben? Ich dekodiere eine MP3-Datei in Matlab und sie erzeugt zwei Spalten (vermutlich eine für jeden Kanal). Wenn ich die Beispieldaten mit AVAssetReader (iOS) aus derselben Datei extrahiere, erhalte ich unterschiedliche Ergebnisse. Als ich denselben Code mit einer WAV-Datei ausprobiert habe, stimmten die beiden Ergebnisse überein, sodass der Code vermutlich in Ordnung ist (obwohl das Matlab-Ergebnis einige zusätzliche leere Frames enthielt).

Wenn ich nicht wissenschaftlich zufällige Werte aus meinem AVAssetReader MP3-Ergebnis auswähle und in den Matlab-Ergebnissen nach ihnen suche, sind sie in der Regel vorhanden, aber nicht immer. Ich weiß nicht, ob dies nur Zufall ist, verschiedene Rundungsfehler oder ob sie wirklich übereinstimmen. Das Problem ist, wenn sie übereinstimmen, unterscheiden sich die umgebenden Zahlen voneinander. 0.0021Tritt beispielsweise in beiden Ergebnissen auf, aber die umgebenden Zahlen in Matlab sind -0,0649,0,0147 usw. (die in den AVAssetReader-Ergebnissen nicht in der Nähe von 0,0021 angezeigt werden).

Was könnte diese Diskrepanz verursachen, verursacht sie einen ernsthaften Mangel an Integrität in meiner App und wie würde ich sie beheben? Vielen Dank.

XSL
quelle
Obwohl MPEG I / II Layer 3 den Decodierungsalgorithmus spezifiziert; Ich erinnere mich nicht daran, wie genau die numerische Genauigkeit angegeben wurde, mit der alle Ergebniswerte mit diesem Algorithmus berechnet werden. Vielleicht nur ein Fehler gebunden. Sie müssten das Dokument überprüfen (ISO / IEC 13818).
hotpaw2
3
Was beabsichtigt Ihre Anwendung zu tun, das eine bitgenaue MP3-Decodierung erfordert? Wenn einer der Decoder nicht wirklich durcheinander ist, werden Sie wahrscheinlich keinen hörbaren Unterschied feststellen, wenn Sie nur den Ton auf einem iOS-Gerät ausgeben.
Jason R
Ich benötige nicht unbedingt so viel Genauigkeit, war mir aber nicht sicher, ob mein MP3-Decodierungscode korrekt war oder einfach Unsinn ausgab. Der WAV-Ausgang stimmte genau überein, weshalb er mich abschreckte, als der MP3-Ausgang völlig anders war. @endolith - danke für den Link, ich denke mein Code muss in Ordnung sein und dass die interne Verarbeitung den Unterschied verursacht.
XSL

Antworten:

10

Es ist möglich, dass zwei Decoder unterschiedliche Ergebnisse erzielen und dem Standard entsprechen. Die Norm "ISO / IEC 11172-4 (Teil 4) Konformitätsprüfung" spezifiziert zwei Klassen von Decodern: "genau" und mit "begrenzter Genauigkeit" *).

Die Genauigkeit wird gemessen, indem der decodierte Strom mit dem Referenzstrom verglichen wird (die Eingabe und Ausgabe der Referenz ist im Standard angegeben). Wenn der Effektivwert der Differenz unten liegt215/12 Der Decoder wird als genau und falls unten eingestuft 211/12 es wird als "begrenzte Genauigkeit" eingestuft.

Wenn Sie also unterschiedliche Decoder oder sogar denselben Decoder auf unterschiedlichen Prozessorarchitekturen verwenden möchten, müssen Sie auf diese Art von Diskrepanz bei der Ausgabe vorbereitet sein. Sie kennen Ihre Anwendung nicht oder beabsichtigen sie nicht, aber vielleicht können Sie den Standard nachahmen und auch mit RMS of Error arbeiten?

*) Ich habe keinen englischen Text des Standards vor mir, daher kann der im Standard verwendete tatsächliche Name abweichen.

Mazurnifizierung
quelle
Vielen Dank für Ihre Hilfe. Ich möchte eigentlich nur verschiedene DSP-Funktionen für mein Signal ausführen, anstatt den MP3 selbst abzuspielen. Ich war mir nur nicht sicher, ob ich mir Sorgen über die Integrität der Werte machen sollte, die ich erhielt, weil sie sich von Matlab unterschieden, was ich als die „richtigen“ Ergebnisse betrachtete. Wenn ich jedoch sehe, dass die Standards nicht erfordern, dass die beiden Ergebnisse exakt gleich sind, aber dennoch konform sind, bin ich sicherer in die Ergebnisse meines Codes.
XSL