Discrepância de decodificação de MP3

7

É possível que dois decodificadores diferentes produzam dois resultados de amostra diferentes para o mesmo MP3? Estou decodificando um mp3 no Matlab e ele produz duas colunas (presumivelmente uma para cada canal). Quando extraio os dados de amostra do mesmo arquivo usando o AVAssetReader (iOS), obtenho resultados diferentes. Quando tentei o mesmo código com um arquivo WAV, os dois resultados corresponderam, então acho que o código está bom (embora o resultado do Matlab tenha alguns quadros em branco extras).

Se eu, não cientificamente, escolher valores aleatórios no meu resultado em MP3 do AVAssetReader e procurá-los nos resultados do Matlab, eles tendem a existir, mas nem sempre. Não sei se isso é apenas coincidência, diferentes erros de arredondamento ou se eles realmente correspondem. O problema é que, quando combinados, os números ao redor diferem um do outro. Por exemplo, 0.0021ocorre nos dois resultados, mas os números ao redor no Matlab são -0,0649,0,0147 etc. (que não aparecem próximos a 0,0021 nos resultados do AVAssetReader).

O que poderia causar essa discrepância, causa uma falta grave de integridade no meu aplicativo e como corrigi-lo? Obrigado.

XSL
fonte
Embora o MPEG I / II Layer 3 especifique o algoritmo de decodificação; Não me lembro de especificar a precisão numérica exata com a qual todos os valores dos resultados são calculados usando esse algoritmo. Talvez apenas um erro acoplado. Você precisaria verificar o documento (ISO / IEC 13818).
hotpaw2
3
Qual é a sua aplicação que pretende fazer que requer decodificação MP3 exata em bits? A menos que um dos decodificadores esteja realmente bagunçado, é provável que você não perceba uma diferença audível se estiver apenas emitindo o áudio em um dispositivo iOS.
Jason R
Não preciso necessariamente de tanta precisão, mas não tinha certeza se meu código de decodificação de MP3 estava correto ou estava simplesmente emitindo bobagens. A saída WAV correspondia com precisão, e é por isso que me impressionou quando a saída MP3 era completamente diferente. @ endolith - obrigado pelo link, acho que meu código deve estar bem e que o processamento interno está causando a diferença.
XSL

Respostas:

10

É possível que dois decodificadores tenham resultados diferentes e estejam em conformidade com o padrão. O padrão "ISO / IEC 11172-4 (parte 4) teste de conformidade" especifica duas classes de decodificadores: "preciso" e com "precisão limitada" *).

A precisão é medida comparando o fluxo decodificado com o fluxo de referência (a entrada e saída de referência é especificada no padrão). Se o RMS da diferença estiver abaixo215/12 o decodificador é classificado como preciso e se abaixo 211/12 é classificado como "precisão limitada".

Portanto, se você usar decodificadores diferentes ou mesmo o mesmo decodificador em diferentes arquiteturas de processador, precisará estar preparado para esse tipo de discrepância na saída. Você não conhece o seu aplicativo ou pretende, mas talvez você possa imitar o padrão e trabalhar com o RMS de erro também?

*) Não tenho o texto do padrão em inglês à minha frente; portanto, o nome real usado no padrão pode ser diferente.

mazurnificação
fonte
Muito obrigado pela sua ajuda. Na verdade, eu só quero executar várias funções DSP no meu sinal, em vez de tocar o MP3 em si. Só não tinha certeza se deveria me preocupar com a integridade dos valores que estava obtendo porque era diferente do Matlab, que considerava os resultados 'corretos'. Mas ver que os padrões não exigem que os dois resultados sejam exatamente os mesmos, mas ainda compatíveis, me deixa mais confiante nos resultados do meu código.
XSL