Discrepancia de decodificación de MP3

7

¿Es posible que dos decodificadores diferentes generen dos resultados de muestra diferentes para el mismo MP3? Estoy decodificando un mp3 en Matlab y produce dos columnas (presumiblemente una para cada canal). Cuando extraigo los datos de muestra del mismo archivo usando AVAssetReader (iOS), obtengo resultados diferentes. Cuando probé el mismo código con un archivo WAV, los dos resultados coincidieron, así que supongo que el código está bien (aunque el resultado de Matlab tenía algunos marcos en blanco adicionales).

Si yo, no científicamente, elijo valores aleatorios de mi resultado MP3 AVAssetReader y los busco en los resultados de Matlab, tienden a existir, pero no siempre. No sé si esto es solo una coincidencia, diferentes errores de redondeo o si realmente coinciden. El problema es que, cuando coinciden, los números circundantes difieren entre sí. Por ejemplo, 0.0021ocurre en ambos resultados, pero los números circundantes en Matlab son -0.0649,0.0147, etc. (que no aparecen cerca de 0.0021 en los resultados de AVAssetReader).

¿Qué podría causar esta discrepancia? ¿Causa una grave falta de integridad en mi aplicación y cómo la solucionaría? Gracias.

XSL
fuente
Aunque MPEG I / II Layer 3 especifica el algoritmo de decodificación; No recuerdo que especifique la precisión numérica exacta con la que se calculan todos los valores de resultado utilizando ese algoritmo. Tal vez solo un error vinculado. Debería consultar el documento (ISO / IEC 13818).
hotpaw2
3
¿Qué pretende hacer su aplicación que requiera una decodificación de MP3 con bits exactos? A menos que uno de los decodificadores esté realmente en mal estado, no es probable que note una diferencia audible si solo está emitiendo el audio en un dispositivo iOS.
Jason R
No necesito necesariamente tanta precisión, pero no estaba seguro de si mi código de decodificación de MP3 era correcto o simplemente emitía tonterías. La salida WAV coincidía con precisión, por eso me sorprendió cuando la salida de MP3 era completamente diferente. @endolith: gracias por el enlace, supongo que mi código debe estar bien y que el procesamiento interno es lo que está causando la diferencia.
XSL

Respuestas:

10

Es posible que dos decodificadores tengan resultados diferentes y cumplan con el estándar. La "prueba de conformidad estándar ISO / IEC 11172-4 (parte 4)" especifica dos clases de decodificadores: "exactos" y con "precisión limitada" *).

La precisión se mide comparando la secuencia decodificada con la secuencia de referencia (la entrada y la salida de referencia se especifican en el estándar). Si el RMS de diferencia es inferior215/12 el decodificador se clasifica como preciso y si está debajo 211/12 se clasifica como "de precisión limitada".

Entonces, si va a usar diferentes decodificadores o incluso el mismo decodificador en diferentes arquitecturas de procesador, debe estar preparado para este tipo de discrepancia en la salida. ¿No conoce su aplicación o intención, pero tal vez pueda imitar el estándar y trabajar también con RMS de error?

*) No tengo el texto del estándar en inglés frente a mí, por lo que el nombre real utilizado en el estándar puede ser diferente.

mazurnificación
fuente
Muchas gracias por su ayuda. En realidad, solo quiero realizar varias funciones DSP en mi señal, en lugar de reproducir el propio MP3. Simplemente no estaba seguro de si debería preocuparme por la integridad de los valores que estaba obteniendo porque era diferente de Matlab, que consideraba los resultados "correctos". Pero ver que los estándares no requieren que los dos resultados sean exactamente iguales, pero que cumplan con los requisitos, me da más confianza en los resultados de mi código.
XSL