Está en la página 1de 7

INSTITUTO POLITÉCNICO NACIONAL.

UPIITA.

PÉREZ SÁNCHEZ ISAAC.

COMUNICACIONES DIGITALES.

PRÁCTICA 3: COMPRESIÓN Y EXPANSIÓN UNA

SEÑAL DE VOZ.

PROF: LUCAS BRAVO ANDRES.

2TM5

INTRODUCCIÓN.

COMPANDING O COMPANSIÓN

En procesamiento de señales, audio analógico, telecomunicaciones y termodinámica,


companding o compansión es un método aplicable a señales para mejorar la
transmisión de las mismas encanales limitados. Está formado por dos procesos:
compresión y expansión.
La compresión es un procedimiento reversible que reduce el rango dinámico de la
señal, de forma que diferencias de niveles grandes en la entrada son representadas
por diferencias pequeñas en la salida.

La expansión realiza el proceso inverso de la compresión: restaura el rango dinámico


original de la señal a partir de su versión comprimida.

La compresión se aplica antes de transmitir la señal por el canal o medio limitado y la


expansión se aplica en la salida una vez recibida la versión comprimida para restaurar
la señal original.

Característica de compansión

La característica de compansión vendrá dada por el tipo de señales a tratar. Por


ejemplo, para señales de voz es necesario un rendimiento SQR relativamente
constante, lo que significa que la distorsión debe ser proporcional a la amplitud de la
señal para cualquier nivel de señal de entrada. Esto requiere una razón de compresión
logarítmica. Existen dos métodos de compresión analógicos que se aproximan a una
función logarítmica, y son conocidos como Ley Mu y Ley A.

Ley A - Ley Mu

La ley A es un sistema de cuantificación logarítmica de señales de audio, usado


habitualmente con fines de compresión en aplicaciones de voz humana. Es similar a la
Ley Mu.

Sus características son:

-Es un algoritmo estandarizado, definido en el estándar ITU-T G.711

-Tiene una complejidad baja

-Utilizado en aplicaciones de voz humana

-No introduce prácticamente retardo algorítmico (dada su baja complejidad)

-Es adecuado para sistemas de transmisión TDM

-No es adecuado para la transmisión por paquetes


-Digitalmente, factor de compresión aproximadamente de 2:1

El algoritmo Ley A basa su funcionamiento en un proceso de compresión y expansión


llamado companding. Se aplica una compresión/expansión de las amplitudes y
posteriormente una cuantificación uniforme. Las amplitudes de la señal de audio
pequeñas son expandidas y las amplitudes más elevadas son comprimidas.

La Ley Mu es un sistema de cuantificación logarítmica de una señal de audio. Es


utilizado principalmente para audio de voz humana dado que explota las características
de ésta. Su aplicación cubre el campo de comunicaciones telefónicas. Este sistema de
codificación es usado en Estados Unidos y Japón. En Europa se utiliza la Ley A.

Tanto sus características como su funcionamiento son iguales a la Ley A.

Las fórmulas son:

DESARROLLO
Se realizó un código similar al de la practica anterior solo que ahora había que trabajar
con la señal de voz que grabamos. También se implementó la codificación de 6 bits.
%Practica 3: compresión y expansión de una señal de voz
%1. Comprimir la señal con ley mu. mu=100 y codificarla con 6 bits
[y, Fs]=audioread('voz.m4a');
info = audioinfo('voz.m4a');
t = 0:seconds(1/Fs):seconds(info.Duration);
%t = t(1:end-1);
%plot(t,y)
figure(3)
subplot(2,1,1)
plot(t, y)
title('Grafica de la señal x(t)');
%considerar mu=100
mu=100;
xn=y/abs(max(y)); %normalizamos
F_x=sign(xn).*(log(1+mu*abs(xn))/log(1+mu));
figure(3)
subplot(2,1,2)
plot(xn, F_x);
title('Grafica de la señal comprimida')
figure(4)
[binario, graff]=codifica(F_x);
plot(xn, graff)
title('Grafica de la señal codificada')

%%2. Aplicar la expansion a la señal codificada y comparar esta señal con


la
%voz original (en el dominio del tiempo).
y1=F_x/abs(max(F_x));
F_y=sign(y1).*(1/mu).*(((1+mu).^abs(y1))-1);
figure(2)
subplot(2,1,2)
plot(t,F_y)
title('Grafica de la señal expandida');
sound(F_y, Fs)
pause(4)
sound(y, Fs)
%2.1 Comparar el sonido de ambas señales.
figure(2)
subplot(2,1,1)
plot(t, y, 'color','m')
title('Grafica de la señal original');
El código para la codificación fue el siguiente:
function [binario,graff]=codifica(Fu) %%Positivos
%Función para generar binario de 6 bits con elseif Fu(m) > 0
cuatización de 64 niveles en binario(m,1)=1;
%total, se regresan dos arreglos if Fu(m)> 0 && Fu(m) <= 0.25
%binario: Arreglo de longitud de la función de binario(m,2)=0;
entrada x 6 bits binario(m,3)=0;
%graff: Arreglo donde se guardan los niveles de if Fu(m)>0 && Fu(m) <= 1/32
cuantización binario(m,4)=0;
binario=zeros(length(Fu),6); binario(m,5)=0;
% graff=zeros(length(Fu)); binario(m,6)=0;
for m= 1:length(Fu) graff(m)=1/32;
if Fu(m) <=0 elseif Fu(m)> 1/32 && Fu(m) <= 2/32
binario(m,1)=0; binario(m,4)=0;
if Fu(m)<= 0 && Fu(m) >= -0.25 binario(m,5)=0;
binario(m,2)=0; binario(m,6)=1;
binario(m,3)=0; graff(m)=2/32;
if Fu(m)<=0 && Fu(m) >= -1/32 elseif Fu(m)> 2/32 && Fu(m) <= 3/32
binario(m,4)=0; binario(m,4)=0;
binario(m,5)=0; binario(m,5)=1;
binario(m,6)=0; binario(m,6)=0;
graff(m)=-1/32; graff(m)=3/32;
elseif Fu(m)< -1/32 && Fu(m) >= - elseif Fu(m)> 3/32 && Fu(m) <= 4/32
2/32 binario(m,4)=0;
binario(m,4)=0; binario(m,5)=1;
binario(m,5)=0; binario(m,6)=1;
binario(m,6)=1; graff(m)=4/32;
graff(m)=-2/32; elseif Fu(m)> 4/32 && Fu(m) <= 5/32
elseif Fu(m)< -2/32 && Fu(m) >= - binario(m,4)=1;
3/32 binario(m,5)=0;
binario(m,4)=0; binario(m,6)=0;
binario(m,5)=1; graff(m)=5/32;
binario(m,6)=0; elseif Fu(m)> 5/32 && Fu(m) <= 6/32
graff(m)=-3/32; binario(m,4)=1;
elseif Fu(m)< -3/32 && Fu(m) >= - binario(m,5)=0;
4/32 binario(m,6)=1;
binario(m,4)=0; graff(m)=6/32;
binario(m,5)=1; elseif Fu(m)> 6/32 && Fu(m) <= 7/32
binario(m,6)=1; binario(m,4)=1;
graff(m)=-4/32; binario(m,5)=1;
elseif Fu(m)< -4/32 && Fu(m) >= - binario(m,6)=0;
5/32 graff(m)=7/32;
binario(m,4)=1; elseif Fu(m)> 7/32 && Fu(m) <= 8/32
binario(m,5)=0; binario(m,4)=1;
binario(m,6)=0; binario(m,5)=1;
graff(m)=-5/32; binario(m,6)=1;
elseif Fu(m)< -5/32 && Fu(m) >= - graff(m)=8/32;
6/32 end
binario(m,4)=1; elseif Fu(m)> 0.25 && Fu(m) <= 0.5
binario(m,5)=0; binario(m,2)=0;
binario(m,6)=1; binario(m,3)=1;
graff(m)=-6/32; if Fu(m)> 8/32 && Fu(m) <= 9/32
elseif Fu(m)< -6/32 && Fu(m) >= - binario(m,4)=0;
7/32 binario(m,5)=0;
binario(m,4)=1; binario(m,6)=0;
binario(m,5)=1; graff(m)=9/32;
binario(m,6)=0; elseif Fu(m)> 9/32 && Fu(m) <= 10/32
graff(m)=-7/32; binario(m,4)=0;
elseif Fu(m)< -7/32 && Fu(m) >= - binario(m,5)=0;
8/32 binario(m,6)=1;
binario(m,4)=1; graff(m)=10/32;
binario(m,5)=1; elseif Fu(m)> 10/32 && Fu(m) <=
binario(m,6)=1; 11/32
graff(m)=-8/32; binario(m,4)=0;
end binario(m,5)=1;
elseif Fu(m)< -0.25 && Fu(m) >= -0.5 binario(m,6)=0;
binario(m,2)=0; graff(m)=11/32;
binario(m,3)=1; elseif Fu(m)> 11/32 && Fu(m) <=
if Fu(m)< -8/32 && Fu(m) >= -9/32 12/32
binario(m,4)=0; binario(m,4)=0;
binario(m,5)=0; binario(m,5)=1;
binario(m,6)=0; binario(m,6)=1;
graff(m)=-9/32; graff(m)=12/32;
elseif Fu(m)< -9/32 && Fu(m) >= - elseif Fu(m)> 12/32 && Fu(m) <=
10/32 13/32
binario(m,4)=0; binario(m,4)=1;
binario(m,5)=0; binario(m,5)=0;
binario(m,6)=1; binario(m,6)=0;
graff(m)=-10/32; graff(m)=13/32;
elseif Fu(m)< -10/32 && Fu(m) >= - elseif Fu(m)> 13/32 && Fu(m) <=
11/32 14/32
binario(m,4)=0; binario(m,4)=1;
binario(m,5)=1; binario(m,5)=0;
binario(m,6)=0; binario(m,6)=1;
graff(m)=-11/32; graff(m)=14/32;
elseif Fu(m)< -11/32 && Fu(m) >= - elseif Fu(m)> 14/32 && Fu(m) <=
12/32 15/32
binario(m,4)=0; binario(m,4)=1;
binario(m,5)=1; binario(m,5)=1;
binario(m,6)=1; binario(m,6)=0;
graff(m)=-12/32; graff(m)=15/32;
elseif Fu(m)< -12/32 && Fu(m) >= - elseif Fu(m)> 15/32 && Fu(m) <=
13/32 16/32
binario(m,4)=1; binario(m,4)=1;
binario(m,5)=0; binario(m,5)=1;
binario(m,6)=0; binario(m,6)=1;
graff(m)=-13/32; graff(m)=16/32;
elseif Fu(m)< -13/32 && Fu(m) >= - end
14/32 elseif Fu(m)> 0.5 && Fu(m) <= 0.75
binario(m,4)=1; binario(m,2)=1;
binario(m,5)=0; binario(m,3)=0;
binario(m,6)=1; if Fu(m)> 16/32 && Fu(m) <= 17/32
graff(m)=-14/32; binario(m,4)=0;
elseif Fu(m)< -14/32 && Fu(m) >= - binario(m,5)=0;
15/32 binario(m,6)=0;
binario(m,4)=1; graff(m)=17/32;
binario(m,5)=1; elseif Fu(m)> 17/32 && Fu(m) <=
binario(m,6)=0; 18/32
graff(m)=-15/32; binario(m,4)=0;
elseif Fu(m)< -15/32 && Fu(m) >= - binario(m,5)=0;
16/32 binario(m,6)=1;
binario(m,4)=1; graff(m)=18/32;
binario(m,5)=1; elseif Fu(m)> 18/32 && Fu(m) <=
binario(m,6)=1; 19/32
graff(m)=-16/32; binario(m,4)=0;
end binario(m,5)=1;
elseif Fu(m)< -0.5 && Fu(m) >= -0.75 binario(m,6)=0;
binario(m,2)=1; graff(m)=19/32;
binario(m,3)=0; elseif Fu(m)> 19/32 && Fu(m) <=
if Fu(m)< -16/32 && Fu(m) >= -17/32 20/32
binario(m,4)=0; binario(m,4)=0;
binario(m,5)=0; binario(m,5)=1;
binario(m,6)=0; binario(m,6)=1;
graff(m)=-17/32; graff(m)=20/32;
elseif Fu(m)< -17/32 && Fu(m) >= - elseif Fu(m)> 20/32 && Fu(m) <=
18/32 21/32
binario(m,4)=0; binario(m,4)=1;
binario(m,5)=0; binario(m,5)=0;
binario(m,6)=1; binario(m,6)=0;
graff(m)=-18/32; graff(m)=21/32;
elseif Fu(m)< -18/32 && Fu(m) >= - elseif Fu(m)> 21/32 && Fu(m) <=
19/32 22/32
binario(m,4)=0; binario(m,4)=1;
binario(m,5)=1; binario(m,5)=0;
binario(m,6)=0; binario(m,6)=1;
graff(m)=-19/32; graff(m)=22/32;
elseif Fu(m)< -19/32 && Fu(m) >= - elseif Fu(m)> 22/32 && Fu(m) <=
20/32 23/32
binario(m,4)=0; binario(m,4)=1;
binario(m,5)=1; binario(m,5)=1;
binario(m,6)=1; binario(m,6)=0;
graff(m)=-20/32; graff(m)=23/32;
elseif Fu(m)< -20/32 && Fu(m) >= - elseif Fu(m)> 23/32 && Fu(m) <=
21/32 24/32
binario(m,4)=1; binario(m,4)=1;
binario(m,5)=0; binario(m,5)=1;
binario(m,6)=0; binario(m,6)=1;
graff(m)=-21/32; graff(m)=24/32;
elseif Fu(m)< -21/32 && Fu(m) >= - end
22/32 elseif Fu(m)> 0.75 && Fu(m) <= 1
binario(m,4)=1; binario(m,2)=1;
binario(m,5)=0; binario(m,3)=1;
binario(m,6)=1; if Fu(m)> 24/32 && Fu(m) <= 25/32
graff(m)=-22/32; binario(m,4)=0;
elseif Fu(m)< -22/32 && Fu(m) >= - binario(m,5)=0;
23/32 binario(m,6)=0;
binario(m,4)=1; graff(m)=25/32;
binario(m,5)=1; elseif Fu(m)> 25/32 && Fu(m) <=
binario(m,6)=0; 26/32
graff(m)=-23/32; binario(m,4)=0;
elseif Fu(m)< -23/32 && Fu(m) >= - binario(m,5)=0;
24/32 binario(m,6)=1;
binario(m,4)=1; graff(m)=26/32;
binario(m,5)=1; elseif Fu(m)> 26/32 && Fu(m) <=
binario(m,6)=1; 27/32
graff(m)=-24/32; binario(m,4)=0;
end binario(m,5)=1;
elseif Fu(m)< -0.75 && Fu(m) >= -1 binario(m,6)=0;
binario(m,2)=1; graff(m)=27/32;
binario(m,3)=1; elseif Fu(m)> 27/32 && Fu(m) <=
if Fu(m)< -24/32 && Fu(m) >= -25/32 28/32
binario(m,4)=0; binario(m,4)=0;
binario(m,5)=0; binario(m,5)=1;
binario(m,6)=0; binario(m,6)=1;
graff(m)=-25/32; graff(m)=28/32;
elseif Fu(m)< -25/32 && Fu(m) >= - elseif Fu(m)> 28/32 && Fu(m) <=
26/32 29/32
binario(m,4)=0; binario(m,4)=1;
binario(m,5)=0; binario(m,5)=0;
binario(m,6)=1; binario(m,6)=0;
graff(m)=-26/32; graff(m)=29/32;
elseif Fu(m)< -26/32 && Fu(m) >= - elseif Fu(m)> 29/32 && Fu(m) <=
27/32 30/32
binario(m,4)=0; binario(m,4)=1;
binario(m,5)=1; binario(m,5)=0;
binario(m,6)=0; binario(m,6)=1;
graff(m)=-27/32; graff(m)=30/32;
elseif Fu(m)< -27/32 && Fu(m) >= - elseif Fu(m)> 30/32 && Fu(m) <=
28/32 31/32
binario(m,4)=0; binario(m,4)=1;
binario(m,5)=1; binario(m,5)=1;
binario(m,6)=1; binario(m,6)=0;
graff(m)=-28/32; graff(m)=31/32;
elseif Fu(m)< -28/32 && Fu(m) >= - elseif Fu(m)> 31/32 && Fu(m) <=
29/32 32/32
binario(m,4)=1; binario(m,4)=1;
binario(m,5)=0; binario(m,5)=1;
binario(m,6)=0; binario(m,6)=1;
graff(m)=-29/32; graff(m)=32/32;
elseif Fu(m)< -29/32 && Fu(m) >= - end
30/32 end
binario(m,4)=1; end
binario(m,5)=0; end
binario(m,6)=1;
graff(m)=-30/32;
elseif Fu(m)< -30/32 && Fu(m) >= - end
31/32
binario(m,4)=1;
binario(m,5)=1;
binario(m,6)=0;
graff(m)=-31/32;
elseif Fu(m)< -31/32 && Fu(m) >= -
32/32
binario(m,4)=1;
binario(m,5)=1;
binario(m,6)=1;
graff(m)=-32/32;
end
end

La codificación de 6 bits fue, dentro de lo que cabe, suficiente aunque si cabe recalcar que tal
vez una a mas bits seria mas adecuada ya que si se siente el rezago más marcado cuando las
comparamos.

Conclusiones
La práctica fue muy interesante por el hecho de ya empezar a trabajar con señales reales de
voz y ver el efecto que tiene sobre ella la codificación a 6 bits.
Me fue de mucha ayuda también el haber logrado entender el código de la codificación, valga la
redundancia, y de esta manera poder implementarla en la práctica.
Se terminó con éxito todos los puntos solicitados sin mayor complicación gracias también a que
ya habíamos hecho la practica pasada.

BIBLIOGRAFIA.

[1]S. Roblizo, "Ley A - Ley Mu", Telematicasalvador.blogspot.com, 2010. [Online]. Available:


http://telematicasalvador.blogspot.com/2010/09/ley.html. [Accessed: 23- Feb- 2020].

[2]J. WILLIAM SANTOS, "Ley A y Ley Mu", prezi.com, 2015. [Online]. Available:


https://prezi.com/gul4lceu5bgn/ley-a-y-ley-mu/. [Accessed: 23- Feb- 2020].

También podría gustarte