Académique Documents
Professionnel Documents
Culture Documents
Electroacustica (L):
Convesor wav-mp3 MATLAB
OBJETIVO
Programar un codificador en MatLab que transforme archivos de audio .wav a MP3.
MARCO TEORICO
El encabezado de la trama tiene la siguiente presentacin, con las posiciones para cada uno de los
32 bits:
A: syncword. Con 12 bits de longitud, todos en '1' para identificar el comienzo de la trama.
B: ID. Un (1) bit usado para identificacin del audio. Siempre en '1', para indicar que se trata de
audio MPEG-1.
C: Layer. Dos (2) bits usados para descripcin de la capa. Para identificar cul esquema (lase
capa) fue usado durante la codificacin del audio.
E: bitrate_index. Cuatro (4) bits para proporcionar el ndice de la tasa de bits, de acuerdo con la
siguiente tabla.
G: padding_bit. Un (1) bit usado para relleno. Si est en '1' la trama se rellena con una ranura
extra. nicamente se usa para frecuencias de 44.1 KHz. Por ejemplo, un sonido 128 Kbps 44.1 KHz
Capa II usa muchas tramas de 418 bytes de largo y unas pocas de 417 bytes para cumplir
exactamente la tasa de transferencia de 128 Kbps. La ranura consume 8 bits (1 byte) para las
Capas II y III.
I: mode. Dos (2) bits que indican el modo de canal, tal y como se muestra a continuacin.
En el modo Stereo indica que el canal comparte bits, pero no usa codificacin Joint Stereo. En el
modoJoint Stereo s se saca provecho de la correlacin existente entre los dos canales para
representar ms eficientemente la seal. El modo Dual Channel est conformado por dos canales
mono totalmente independientes (cada uno es un archivo de audio diferente); cada canal usa
exactamente media tasa de bits del archivo. La mayora de los decodificadores los procesan como
estreo, pero no es siempre el caso. Single Channel consiste en un nico canal de audio.
J: mode_extension. Dos (2) bits indicando extensin al modo; slo se usa en modo Joint Stereo. La
extensin al modo se usa para informacin que no es de ninguna utilidad en el efecto estreo.
Estos bits se determinan dinmicamente por un codificador en el modo Joint Stereo, y este modo
puede cambiar entre tramas, o incluso se puede dejar de usar en algunas tramas. En la Capa III,
estos dos bits indican qu tipo de codificacin Joint Stereo se est usando, Intensidad estreo o
Estreo M/S. Estreo M/S se refiere a transmitir los canales
normalizados Middle/Side (Suma/Diferencia) de los canales izquierdo y derecho en lugar de los
habituales Izquierdo/Derecho. En el lado del codificador los canales habituales se reemplazan
usando la frmula:
Los valores Mi se transmiten por el canal izquierdo y los valores Si se transmiten por el canal
derecho.
Intensidad estreo se refiere a retener en las frecuencias superiores a 2 KHz slo la envolvente de
los canales izquierdo y derecho.
El cdigo indica que tipo de extensin al modo se est usando de la siguiente manera:
K: copyrigth. Un (1) bit usado para copyright. Tiene el mismo significado que el bit de copyright en
CD y cintas DAT, indicar que es ilegal copiar el contenido del archivo si el bit est en '1'.
L: original/copy. Un (1) bit usado para indicar si se trata de un medio original, si el bit est puesto
en '1'. En '0' indica que es una copia del medio original.
M: emphasis. Dos (2) bits usados para informacin del nfasis. Le indica al decodificador que el
sonido debe ser "re-ecualizado" despus de una supresin de ruido tipo Dolby. Se usa raramente.
CHEQUEO DE ERRORES
Si el bit de proteccin en el encabezado es igual a '0', se incluye un CRC de 16 bits despus del
encabezado. Si el bit de proteccin est en '1', no hay chequeo de errores y estos bits pueden ser
usados para los datos de audio. El mtodo para deteccin de errores que se utiliza es CRC-16, cuyo
polinomio generador es:
CRC-16 = x + x + x + 1
16 15 2
MARCO PRCTICO
El siguiente cdigo fue desarrollado en el software MATLAB:
clear all
clc
disp(' ')
disp(' CODIFICADOR MP3 EN MATLAB')
disp(' ')
disp(' Este programa convierte un archivo de sonido WAV de Microsoft,
en un')
disp(' archivo de sonido MP3, de acuerdo a las especificaciones dadas
en el')
disp(' estndar internacional ISO/IEC 11172-3.')
disp(' ')
disp(' El archivo WAV debe ser monofnico, con frecuencia de muestreo
igual')
disp(' a 44100 Hz y en formato PCM.')
disp(' ')
disp(' El archivo resultante es creado con el mismo nombre del archivo
WAV')
disp(' original, y est codificado en formato MPEG-1 Capa III, con
las')
disp(' siguientes caractersticas:')
disp(' ')
disp(' - Tasas de transferencia = 96...320 Kbps.')
disp(' - Frecuencia de muestreo = 44100 Hz.')
disp(' - Modo = Monofnico.')
disp(' ')
disp(' ')
% Obtiene el ltimo valor del nmero de muestras del archivo WAV que sea
mltiplo
% de 1152. En otras palabras, se obliga a que la cantidad de muestras del
archivo
% WAV sea mltiplo de 1152. En este paso, se eliminan entre 1 y 1151
muestras PCM
% (son las ltimas muestras del archivo WAV y, por lo tanto, no son
procesadas).
if isempty(tiempo)
rsize = max_rsize;
else
rsize = fix(tiempo*44100/1152)*1152;
end
if rsize < 4608
error('La cantidad de tiempo es insuficiente')
elseif rsize > max_rsize
warning(['El archivo WAV slo dura ', num2str(seg),...
' segundos, procesando todo el archivo.'])
rsize = max_rsize;
end
% Tabla de las bandas del factor de escala (Para bloques largos y 44.1
kHz).
SFBT = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21;
4 4 4 4 4 4 6 6 8 8 10 12 16 20 24 28 34 42 50 54 76;
1 5 9 13 17 21 25 31 37 45 53 63 75 91 111 135 163 197 239 289 343;
4 8 12 16 20 24 30 36 44 52 62 74 90 110 134 162 196 238 288 342 418];
for gr = 1:2,
[IX(:,gr),IS(:,gr),SHT(:,:,gr),overall_bitsum,count1table_select(gr),...
big_values(gr),region0_count(gr),region1_count(gr),table_select(gr,:),...
qquant,quantanf,rlb(gr,:),count1(gr),fe(gr,:),ff(gr,:)] =
...
Ciclo_interno(XR,system_const,SFBT);
while mean_bits - 74 < overall_bitsum,
system_const = system_const - 1;
[IX(:,gr),IS(:,gr),SHT(:,:,gr),overall_bitsum,count1table_select(gr),...
big_values(gr),region0_count(gr),region1_count(gr),table_select(gr,:),...
qquant,quantanf,rlb(gr,:),count1(gr),fe(gr,:),ff(gr,:)]
= ...
Ciclo_interno(XR,system_const,SFBT);
end
[IX(:,gr),IS(:,gr),SHT(:,:,gr),overall_bitsum,count1table_select(gr),...
big_values(gr),region0_count(gr),region1_count(gr),table_select(gr,:),...
qquant,quantanf,rlb(gr,:),count1(gr),fe(gr,:),ff(gr,:)]
= ...
Ciclo_interno(XR,system_const,SFBT);
while mean_bits - 74 < overall_bitsum,
system_const = system_const - 1;
[IX(:,gr),IS(:,gr),SHT(:,:,gr),overall_bitsum,count1table_select(gr),...
big_values(gr),region0_count(gr),region1_count(gr),...
table_select(gr,:),qquant,quantanf,rlb(gr,:),count1(gr),...
fe(gr,:),ff(gr,:)] =
Ciclo_interno(XR,system_const,SFBT);
end
[XFSF,preflag] =
Ciclo_externo(SFBT,IX(:,gr),qquant,quantanf,...
scalefac_scale(gr));
end
iic(419:576)=4.*log2(abs(XR(419:576)).*ifqstep./abs(IXGG(419:576)).^(4/3)
);
% Por ltimo, calcula global_gain.
global_gain(gr) = round(mean(iic))+210-system_const-qquant-ajgg;
end
global_gain,scalefac_compress,table_select,region0_count,region1_count,..
.
preflag,scalefac_scale,count1table_select);
Datos_principales(IX,IS,SHT,slen1,slen2,big_values,table_select,rlb,...
fe,ff,tabla_0,tabla_1,count1,count1table_select,main_data_begin,padding_b
it,mdt);
clear Fs IXGG MAP SIZ PMA X a b bits dif fid gr h iic q rest ifqstep mdt
clear rsize sb v bit_reservoir bitrate_index init_mean_bits mean_bits mbr
mmdb ajgg
clear archivo ENT LBC SFBT SFC SHT U576 UA UES tabla_0 tabla_1 C ans
bin_str tasa
clear tiempo seg max_rsize ajuste
CONCLUCIONES Y RECOMENDACIONES
En el trabajo se concluyo:
BIBLIOGRAFIA
http://es.wikipedia.org/wiki/MP3
ftp://ftp.unicauca.edu.co/Documentos_Publicos/Facultades/FIET/DEIC/Materias/computacion%20
inteligente/proyecto/audio_descriptors/MPEG/mp3%20en%20matlab/web/members.fortunecity.
com/alex1944/mp3coding/header.html