Está en la página 1de 20

Universidad Nacional de Ingeniería

Escuela Profesional de Ingeniería Mecatrónica

PROCESAMIENTO DIGITAL DE SEÑALES (MT417)

LABORATORIO 1: RECUANTIZACIÓN DE UNA SEÑAL

NOMBRE CODIGO
Alexander Javier Llanos Rodríguez 20160717E

20164163D
Tomairo Laura,Meik Kevin
20162226I
Tello Trujillo,Ketsmell Jheydol

I.- Objetivos:

 Implementar el proceso de recuantización de señales mediante la técnica del


factor de escala fijo.
 Comprobar los cambios en SNR producidos por el proceso de recuantización de
señales.
 Detección de eventos sobre el espectro de módulo de una señal.

II.- Materiales

 Computador personal con tarjeta de sonido, SO Win7 (o mayor) y MATLAB 2013


(o mayor).
 Audífonos y micrófon
III.- Experiencia a desarrollar:
Experiencia 1: Efectos de Recuantización

1. Capturar una señal de silbido vía micrófono, en un vector x, utilizando el


siguiente formato de captura:

Frecuencia de 8000
muestreo
Tiempo de captura 3 segundos
Número de canales 1
Bits/muestra 8
Formato ‘Int16’

pause(0.5);

Fs = 8000;

tc = 3;

Nc = 1;

r = 16;

audio = audiorecorder(Fs, r, Nc);

record(audio,tc);

pause(tc+0.5);

x=getaudiodata(audio, 'int16');
x=x';
tam=length(x);

2. Ajuste la señal de entrada entre un 80% a 90% del rango total

%Como estamos usando el formato int16, el rango es de -32768 to


32767
if(max(abs(x)))>0.8*32768 && (max(abs(x)))<0.9*32768

3. Para poder operar la señal capturada aplique


x=double ( x )
4. ¿Cuál es el valor máximo y mínimo de la señal capturada?

Valor máximo=28766.00 Valor mínimo= - 29130.00

5. Graficar la señal utilizando el comando “stem”

%Graficamos 50 muestras
figure(1)
[val, idx] = max(x);
x1=x(idx:idx+50);
subplot(2,1,1),stem(x1),xlabel('muestras'),ylabel('Señal
Capturada al 90%')
axis([0 50 -3.5e4 3.5e4]);

6. Obtenga el factor de escala

%Como estamos usando el formato int16, el factor de escala será


fe = 32768;
fprintf('Factor de Escala: %.2d\n', fe)

fe=¿ 32768

7. Obtenga el factor de carga con las siguientes ecuaciones


L−1
1
x́= ∑ x (n)
L n=0

L−1
1
x́ 2= ∑ x2 (n)
L n=0

σ 2X = x´2− x́ 2

σ X = √σ 2X

X max
γ X=
σX
X=[];

for i=1:1:length(x)
X(i) = x(i)^2;
end
x1 = 1/length(x)*sum(x);
x2 = 1/length(x)*sum(X);
var_x = x2-x1^2;
desv_x = sqrt(var_x);
Fc = fe/desv_x;

Factor de carga =Fc=2.68

8. Para el cálculo de la SNR considerar lo siguiente, utilice un rp=14

x∗( 2 rp−1 −1 )
( )
yp=round ( fe )
yp∗fe
y=
( rp−1 )
(2 −1 )

e= y−x

Ee=∑ ( e .∗e)+10−20
Ex=sum( x .∗x )

SNR=10*log 10 ( ExEe )
rp = 14;

%Vector de Enteros
yp=[];
for i=1:1:tam
yp(i)=round(1/fe*x(i)*(2^(rp-1)-1));
end
%Vector reproducible
y=[];
for i=1:1:tam
y(i)=yp(i)*fe/(2^(rp-1)-1);
end
%Vector de error
e=y-x;
%Energía del ruido
Ee = sum(e.*e)+10^(-20);
%Energía de la señal
Ex = sum(x.*x);
%SNR
SNR = 10*log10(Ex/Ee);

SNR =80.75

9. Cuáles son los valores de:

fprintf('El valor de Ee es: %.2f\n', Ee)


fprintf('El valor de Ex es: %.2f\n', Ex)

Ex=3581757342300.00 Ee=32287.12

10. Visualizar en consola el factor de carga y la SNR obtenida

fprintf('El valor del SNR es: %.2f\n', SNR)


fprintf('El valor del Factor de Carga es: %.2f\n', Fc)

SNR1=80.45 Factor de carga 1=2.68


11. Repetir el procedimiento, pero capturar la señal a un 45% del rango total.

%Repetir para una señal al 45%


xx = 0.45*x;
subplot(2,1,2),stem(xx(idx:idx+50),'color','r'),xlabel('muestras')
,ylabel('Señal Capturada al 45%')
axis([0 50 -3.5e4 3.5e4]);
fprintf(' \n');
fprintf('~ PARA LA SEGUNDA SEÑAL ~\n');
fprintf(' \n');
fprintf('El valor mínimo de la señal es: %.2f\n', min(xx))
fprintf('El valor máximo de la señal es: %.2f\n', max(xx))
fprintf('Factor de Escala: %.2d\n', fe)
XX=[];
for i=1:1:length(x)
XX(i) = xx(i)^2;
end
xx1 = 1/length(xx)*sum(xx);
xx2 = 1/length(xx)*sum(XX);
var_xx = xx1-xx1^2;
desv_xx = sqrt(var_xx);
Fc2 = fe/desv_xx;
rp = 14;
%Vector de Enteros
yp2=[];
for i=1:1:tam
yp2(i)=round(1/fe*xx(i)*(2^(rp-1)-1));
end
%Vector reproducible
y2=[];
for i=1:1:tam
y2(i)=yp2(i)*fe/(2^(rp-1)-1);
end
%Vector de error
e2=y2-xx;
%Energía del ruido
Ee2 = sum(e2.*e2)+10^(-20);
%Energía de la señal
Ex2 = sum(x2.*x2);
%SNR
SNR2 = 10*log10(Ex2/Ee2);
fprintf('El valor de Ee es: %.2f\n', Ee2)
fprintf('El valor de Ex es: %.2f\n', Ex2)
fprintf('El valor del SNR es: %.2f\n', SNR2)
fprintf('El valor del Factor de Carga es: %.2f\n', Fc2)

Valor máximo=12944.70 Valor mínimo=-13108.50


fe=¿ 32768

Ex=725305861815.75 Ee=31839.39

SNR2=73.58 Factor de carga 2 =5.96

12. ¿Qué efecto percibe en el factor de carga cuando se reduce la amplitud de la


señal? Justifique su respuesta a partir de la formula del factor de carga.

13. ¿Qué efecto percibe en la SNR cuando reduce la amplitud de la señal?

Experiencia 2
1. Capturar una señal de silbido vía micrófono, utilizando los parámetros de la
siguiente tabla, en un rango del 90%

Frecuencia de 8000
muestreo
Tiempo de captura 3 segundos
Número de canales 1
Bits/muestra 16
Formato ‘double’
Fs= 8000; %frecuencia de muestreo 8000 es el estandar
r=16;%bits de muestra
Nc=1;%numero de canales
tc=3;%tiempo de captura
%%captura
pepito=audiorecorder(Fs,r,Nc,1);
record(pepito,tc)
pause(tc+0.5)
j=0.9*getaudiodata(pepito,'double')

2. Grabar la señal en un archivo como se indica a continuación


audiowrite (' senal . wav ,' x , Fs)
Donde: senal, es el nombre del archivo con que se almacena la señal en el
disco duro; x, es el vector donde esta la señal a almacenar; y Fs, es la
frecuencia de muestreo con que se almacena.

audiowrite('senal.wav',x,Fs);

3. Los procesos de recuantización se deben realizar a partir de la señal


capturada, es decir, no se debe volver a capturar la señal para realizar la
recuantización. Esto es muy importante tomar en cuenta.

4. Recuantizar la señal a rp=13 a través del procedimiento de la experiencia


anterior

u =0:1/Fs:49*(1/Fs);

n1= 13

yp1=round(x*(2^(n1-1)-1))

ya1=yp1/((2^(n1-1)-1));

e1=ya1-x;

figure,
plot(u,yp1)

title('reacuantizacion1')
hold on
plot(u,ya1)
scatter(u,e1,'filled');

hold off
legend('yp','y','e')
%%intervalo de cuantizacion
intervalo1=2/(2^n1-2)
%%SNR1
Ex1=sum(x.*x)
Ee1=sum(e1.*e1)+10^-20
SNR1=10*log(Ex1/Ee1)

5. Utilizando el comando “plot” grafique el vector yp (vector de enteros), el vector


“y” (vector reproducible) y el vector de error “e”. Grafíquelos en una misma
figura, superpuestos y de distinto color cada vector
6. Obtenga el intervalo de cuantización en el vector reproducible y en el vector
de enteros. Indique la operación para obtener lo requerido.
∆=1
vector de enteros , por definicion en el vector de enteros el intervalo
siempre es 1.

∆=2.4420∗10−4
1−(−1)
ecuacion :∆=
2 rp −2

7. Obtenga el valor de la SNR

%%SNR1
Ex1=sum(x.*x)
Ee1=sum(e1.*e1)+10^-20
SNR1=10*log(Ex1/Ee1)

SNR=158.7350 dB

8. Recuantizar la señal a rp=11 a través del procedimiento de la experiencia


anterior

u =0:1/Fs:49*(1/Fs);

n2= 11

yp2=round(x*(2^(n2-1)-1))

ya2=yp2/((2^(n2-1)-1));

e2=ya2-x;

figure,
plot(u,yp2)

title('reacuantizacion2')
hold on
plot(u,ya2)
scatter(u,e2,'filled');
hold off
legend('yp','y','e')
%%intervalo de cuantizacion
intervalo2=2/(2^n2-2)

9. Utilizando el comando “plot” grafique el vector yp (vector de enteros), el vector


“y” (vector reproducible) y el vector de error “e”. Grafíquelos en una misma
figura, superpuestos y de distinto color cada vector
10. Obtenga el intervalo de cuantización en el vector reproducible y en el vector
de enteros. Indique la operación para obtener lo requerido

∆=1
vector de enteros , por definicion en el vector de enteros el intervalo
siempre es 1.

∆=9.7752∗10−4
1−(−1)
ecuacion :∆=
2 rp −2

11. Obtenga el valor de la SNR

Ex2=sum(x.*x)

Ee2=sum(e2.*e2)+10^-20

SNR2=10*log(Ex2/Ee2)

SNR=131.7861dB

12. Verifique la mejora en la SNR respecto a rp=13. ¿En cuántos dBs mejora?

baja en 26.9490 dB

13. Recuantizar la señal a rp=7 a través del procedimiento de la experiencia


anterior

u =0:1/Fs:49*(1/Fs);

n3= 7

yp3=round(x*(2^(n3-1)-1))

ya3=yp3/((2^(n3-1)-1));
e3=ya3-x;

figure,

plot(u,yp3)

title('reacuantizacion3')
hold on
plot(u,ya3)
scatter(u,e3,'filled');
hold off
legend('yp','y','e')

14. Utilizando el comando “plot” grafique el vector yp (vector de enteros), el vector


“y” (vector reproducible) y el vector de error “e”. Grafíquelos en una misma
figura, superpuestos y de distinto color cada vector

Y VS e
15. Obtenga el intervalo de cuantización en el vector reproducible y en el vector
de enteros. Indique la operación para obtener lo requerido.
∆=1
vector de enteros , por definicion en el vector de enteros el intervalo
siempre es 1.
∆=0.0159
1−(−1)
ecuacion :∆=
2 rp −2

16. Obtenga el valor de la SNR

%%SNR1
Ex3=sum(x.*x)
Ee3=sum(e3.*e3)+10^-20
SNR3=10*log(Ex3/Ee3)

SNR=75.6692dB

17. Verifique la mejora en la SNR respecto a rp=11. ¿En cuántos dBs mejora?

baja en 56.1169 dB

18. Realice en MATLAB la gráfica SNR vs. rp. con los datos obtenidos en los
puntos 7, 11 y 16. ¿Qué puede comentar al respecto? En el eje de ordenadas
va la SNR.
SNR VS rp

CODIGO MATLAB LABORATORIO 1


clear; clc;

Ejercicio 1
Paso 1: Capturar una señal de audio
pause(0.5);
Fs = 8000;
tc = 3;
Nc = 1;
r = 16;
audio = audiorecorder(Fs, r, Nc);
record(audio,tc);
pause(tc+0.5);
x=getaudiodata(audio, 'int16');
x=x';
tam=length(x);

Paso 2: Ajuste la señal de entrada entre un 80% a 90% del rango total.
%Como estamos usando el formato int16, el rango es de -32768 to 32767
if(max(abs(x)))>0.8*32768 && (max(abs(x)))<0.9*32768

Paso 3: Para poder operar la señal


x=double(x);

Paso 4: Valores mínimo y máximo


fprintf('~ PARA LA PRIMERA SEÑAL ~\n');
fprintf(' \n');
fprintf('El valor mínimo de la señal es: %.2f\n', min(x))
fprintf('El valor máximo de la señal es: %.2f\n', max(x))

Paso 5: Graficar la señal


%Graficamos 50 muestras
figure(1)
[val, idx] = max(x);
x1=x(idx:idx+50);
subplot(2,1,1),stem(x1),xlabel('muestras'),ylabel('Señal Capturada al 90%')
axis([0 50 -3.5e4 3.5e4]);

Paso 6: Factor de escala


%Como estamos usando el formato int16, el factor de escala será
fe = 32768;
fprintf('Factor de Escala: %.2d\n', fe)
Paso 7: Obtener el factor de carga respecto a:
X=[];
for i=1:1:length(x)
X(i) = x(i)^2;
end
x1 = 1/length(x)*sum(x);
x2 = 1/length(x)*sum(X);
var_x = x2-x1^2;
desv_x = sqrt(var_x);
Fc = fe/desv_x;

Cálculo de la Recuantización
rp = 14;
%Vector de Enteros
yp=[];
for i=1:1:tam
yp(i)=round(1/fe*x(i)*(2^(rp-1)-1));
end
%Vector reproducible
y=[];
for i=1:1:tam
y(i)=yp(i)*fe/(2^(rp-1)-1);
end
%Vector de error
e=y-x;
%Energía del ruido
Ee = sum(e.*e)+10^(-20);
%Energía de la señal
Ex = sum(x.*x);
%SNR
SNR = 10*log10(Ex/Ee);

Paso 9
fprintf('El valor de Ee es: %.2f\n', Ee)
fprintf('El valor de Ex es: %.2f\n', Ex)

Paso 10
fprintf('El valor del SNR es: %.2f\n', SNR)
fprintf('El valor del Factor de Carga es: %.2f\n', Fc)

Paso 11
%Repetir para una señal al 45%
xx = 0.45*x;
subplot(2,1,2),stem(xx(idx:idx+50),'color','r'),xlabel('muestras'),ylabel('Señal Capturada
al 45%')
axis([0 50 -3.5e4 3.5e4]);
fprintf(' \n');
fprintf('~ PARA LA SEGUNDA SEÑAL ~\n');
fprintf(' \n');
fprintf('El valor mínimo de la señal es: %.2f\n', min(xx))
fprintf('El valor máximo de la señal es: %.2f\n', max(xx))
fprintf('Factor de Escala: %.2d\n', fe)
XX=[];
for i=1:1:length(x)
XX(i) = xx(i)^2;
end
xx1 = 1/length(xx)*sum(xx);
xx2 = 1/length(xx)*sum(XX);
var_xx = xx1-xx1^2;
desv_xx = sqrt(var_xx);
Fc2 = fe/desv_xx;
rp = 14;
%Vector de Enteros
yp2=[];
for i=1:1:tam
yp2(i)=round(1/fe*xx(i)*(2^(rp-1)-1));
end
%Vector reproducible
y2=[];
for i=1:1:tam
y2(i)=yp2(i)*fe/(2^(rp-1)-1);
end
%Vector de error
e2=y2-xx;
%Energía del ruido
Ee2 = sum(e2.*e2)+10^(-20);
%Energía de la señal
Ex2 = sum(x2.*x2);
%SNR
SNR2 = 10*log10(Ex2/Ee2);
fprintf('El valor de Ee es: %.2f\n', Ee2)
fprintf('El valor de Ex es: %.2f\n', Ex2)
fprintf('El valor del SNR es: %.2f\n', SNR2)
fprintf('El valor del Factor de Carga es: %.2f\n', Fc2)

else
fprintf('El valor máximo fue: %.2f\n', max(x))
fprintf('Intente otra vez\n');
end

El valor máximo fue: 78.00


Intente otra vez

CODIGO MATLAB DEL LABORATORIO 2

close all, clear all,clc


parametros de captura
Fs= 8000; %frecuencia de muestreo 8000 es el estandar
r=16;%bits de muestra
Nc=1;%numero de canales
tc=3;%tiempo de captura
%%captura
pepito=audiorecorder(Fs,r,Nc,1);
record(pepito,tc)
pause(tc+0.5)
j=0.9

50 muestras
x=j(1:50)

grabar la señal en un archivo


audiowrite('senal.wav',x,Fs);

1 recuantizar la señal
u =0:1/Fs:49*(1/Fs);
n1= 13
yp1=round(x*(2^(n1-1)-1))
ya1=yp1/((2^(n1-1)-1));
e1=ya1-x;
figure,
plot(u,yp1)
title('reacuantizacion1')
hold on
plot(u,ya1)
scatter(u,e1,'filled');
hold off
legend('yp','y','e')
%%intervalo de cuantizacion
intervalo1=2/(2^n1-2)
%%SNR1
Ex1=sum(x.*x)
Ee1=sum(e1.*e1)+10^-20
SNR1=10*log(Ex1/Ee1)

2 recuantizar la señal
u =0:1/Fs:49*(1/Fs);
n2= 11
yp2=round(x*(2^(n2-1)-1))
ya2=yp2/((2^(n2-1)-1));
e2=ya2-x;
figure,
plot(u,yp2)
title('reacuantizacion2')
hold on
plot(u,ya2)
scatter(u,e2,'filled');
hold off
legend('yp','y','e')
%%intervalo de cuantizacion
intervalo2=2/(2^n2-2)
%%SNR1
Ex2=sum(x.*x)
Ee2=sum(e2.*e2)+10^-20
SNR2=10*log(Ex2/Ee2)

3 recuantizar la señal
u =0:1/Fs:49*(1/Fs);
n3= 7
yp3=round(x*(2^(n3-1)-1))
ya3=yp3/((2^(n3-1)-1));
e3=ya3-x;
figure,
plot(u,yp3)
title('reacuantizacion3')
hold on
plot(u,ya3)
scatter(u,e3,'filled');
hold off
legend('yp','y','e')
%%intervalo de cuantizacion
intervalo3=2/(2^n3-2)
%%SNR1
Ex3=sum(x.*x)
Ee3=sum(e3.*e3)+10^-20
SNR3=10*log(Ex3/Ee3)
%%grafica obtenida entre SNR y rp
f=[SNR1 SNR2 SNR3]
g=[n1 n2 n3]
figure,
scatter(g,f,'filled');
title('SNR VS rp')

También podría gustarte