É 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.0021
ocorre 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.
fonte
Respostas:
É 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 abaixo2−15/12−−√ o decodificador é classificado como preciso e se abaixo 2−11/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.
fonte