Está en la página 1de 21

UNIVERSIDAD NACIONAL

PEDRO RUIZGALLO
FACULTAD DE CIENCIAS
FISICAS YMATEMÁTICAS
ESCUELA PROFESIONAL
DE ING.ELECTRÓNICA

ASIGNATURA:

PROCESAMIENTO DIGITAL DE

SEÑALES.

TEMA:
Reconstrucción de señales
ALUMNO:

➢ JARAMILLO RAMIREZ ANGEL


➢ GIL VASQUEZ HOILER ANTONY
➢ SANTA CRUZ ESTRELLA RUDI ALDAIR
➢ GONZALEZ SANTA CRUZ EDWAR ISAAC
➢ TESEN SANCHEZ JHONATAN

DOCENTE: ING. OBLITAS VERA CARLOS LEONARDO.

Lambayeque 11 de marzo de 2021.


TRABAJO APLICATIVO N° 1: Cuantificación Y Reconstrucción De Señales
INSTRUCCIONES
1. Error de cuantificación en la conversión A/D de una señal senoidal. (50 pts.)
Sea Xq(n) la señal obtenida al cuantificar la señal (n)
La potencia del error de cuantificación Pq se define como sigue
La calidad de la señal cuantificada puede medirse mediante la relación señal-ruido de
cuantificación (SQNR) definida como sigue:
Donde Px es la Potencia de la señal sin cuantificar x(n).
Para
Grupos de Trabajo 1,2 y 3
a) Para f0 =1/50 y N= 200, escriba un programa en MATLAB para cuantificar la señal x(n),
utilizando truncamiento para 64, 128 y 256 niveles de cuantificación. En cada caso
represente gráficamente las señales x(n), xq(n) y e(n), y calcule la relación SQNR
correspondiente. (30 pts.)

clear;clc;
t=0:0.5:50;%Señal analogica
f=1/50;
xt=sin(2*pi*f*t);
Fs=2;%Discretizando la señal en el tiempo
Ts=1/Fs;
n=0:Ts:50;
xn=sin(2*pi*f*n);
figure('Name', 'señal discreta x(n)')%Mostrando en pantalla
stem(n,xn)
ran=max(xt)-min(xt); %rango de la señal
nbits=8;%bits de cuantificación
nnivs=(2^nbits)-1; %número de niveles de cuantificación
delta=ran/nnivs; %altura de nivel
nive=min(xt):delta:max(xt);
nivem=nive+delta/2;
N=200;
[A,N]=size(n);
xnq=zeros(1,N);
for i=1:N
j=1;
while xn(i)>nivem(j)
j=j+1;
end
xnq(i)=nive(j);
end
figure('Name','Señal discretizada y señal cuantificada xq(n)')
stem(n,xnq)
hold on
stem(n,xn)
hold off
err=xn-xnq;%error de cuantificación
figure('Name','Error de cuantificación e(n)')
stem(n,err)
SQNR=(3/2)*2^(2*nbits);%SQNR
SQNRdB=10*log10(SQNR);

*para 6 bits (64 niveles de cuantificación )


Para 7 bits (128 niveles de cuantificación )
Para 8 bits (256 niveles de cuantificacion)
b) Comente los resultados obtenidos. (10 pts.)
Para
todos los grupos:

En los gráficos podemos observar claramente como aumenta y disminuyen el error en los
distintos casos planteados , si aumentamos los niveles de cuantificación el error disminuye
así podemos darnos cuenta que para 256 niveles el error es mínimo.
c) Comparar resultados entre truncamiento y redondeo. Pueden elegir el grupo para
comparar resultados. (10 pts.)

2. Implementar en MATLAB el siguiente programa: (50 pts.)


Programa Principal denominarlo: pmuestreo.m
Funciones:
signal.m
function x=signal(t,fo,f1)
x=2*cos(2*pi*fo*t)+0.62*sin(2*pi*f1*t);
impulso.m
function x=impulso(t)
x=(t==0.0)*1.0;
recsinc.m
function x=recsinc(t,tau)
x=1*sinc(t*tau);

a) Implementación del programa. (10 pts.)

FUNCIONES:
signal.m
function x=signal(t,fo,f1)
x=2*cos(2*pi*fo*t)+0.62*sin(2*pi*f1*t);
impulso.m
function x=impulso(t)
x=(t==0.0)*1.0;

recsinc.m
function x=recsinc(t,tau)
x=1*sinc(t*tau);

pmuestreo.m:

close all
clear all

fo=10;
f1=20;
fmax=10*f1;
t=0:(1/fmax)/40:3*(1/fo);
x=signal(t,fo,f1);
plot(t,x,'linewidth',1.5)
grid on
%Muestreo
Fs=2.5*f1;
Ts=1/Fs;
Nm=floor(max(t)/Ts);
Nms=floor(max(size(t))/Nm);
xx=zeros(size(x));
for i=0:Nm
if i==0
xx=xx+x.*impulso(t);
else
xx=xx+x.*impulso(t-t(i*Nms));
end
end
figure
plot(t,xx,'linewidth',1.5)
hold on
plot(t,x,'linewidth',1.5)
grid on
%Reconstrucci?n
figure
yy=zeros(size(x));
yy1=zeros(size(x));
for i=0:Nm
if i==0
yy=x(1).*recsinc(t,1*Fs);
plot(t,yy)
hold on
grid on
yy1=yy1+yy;
else
yy=x(i*Nms).*recsinc(t-t(i*Nms),1*Fs);
plot(t,yy)
yy1=yy1+yy;
end
end

plot(t,x,'linewidth',3)
plot(t,xx,'linewidth',1.5)
plot(t,yy1,'linewidth',2.5)
b) Determine ¿Qué hace el programa? Explique las líneas de código. Comente los
resultados. (20 pts.)
close all %Es para cerrar las ventanas abiertas por un código anterior
clear all %clear all: las variables se borran, borra el espacio de
trabajo(workspace)

fo=10; %fo toma el valor de 10


f1=20; %f1 toma el valor de 20
fmax=10*f1;%fmax toma el valor de 200
t=0:(1/fmax)/40:3*(1/fo);%el vector t está comprendido entre 0 y 0.3 con
x=signal(t,fo,f1); %aquí llamamos a la función signal.𝑥 = 2𝑐𝑜𝑠(2𝝅10𝑡) +
0.62𝑠𝑒𝑛(2𝝅20𝑡)
plot(t,x,'linewidth',1.5)%este comando nos permite mostrar la imagen de la
señal en 2d con un ancho de línea de 1.5.
grid on%este comando nos muestra las líneas de cuadrículas principales
para los ejes o gráficos actuales.
%Muestreo
Fs=2.5*f1;%le asignamos un valor a Fs
Ts=1/Fs;%le asignamos un valor a Ts
Nm=floor(max(t)/Ts);%floor:nos redondea un número al entero inferior,
max(t):llama al elemento mayor del vector t, definimos el valor de Nm=15.
Nms=floor(max(size(t))/Nm);%max(size(t)) me devuelve la cantidad de
elementos del vector t, definimos el valor de Nms=160.
xx=zeros(size(x));%size(x) me da las dimensiones de x(filas y columnas),
zeros(size(x)) me da una matriz cero con las dimensiones de x.
for i=0:Nm%se repite 16 veces el conjunto de instrucciones dentro del for
if i==0
xx=xx+x.*impulso(t);%xx=a una muestra de x, en t=0
else
xx=xx+x.*impulso(t-t(i*Nms));%xx=un conjunto de muestras de x, desde
0 hasta Nm+Nms
end
end
%xx=el muestreo de x a una Frecuencia de muestreo de 50
figure
plot(t,xx,'linewidth',1.5)%grafica la señal muestreada xx.
hold on%nos permite agregar otra señal a una ya existente sin que se borre.

plot(t,x,'linewidth',1.5)%grafica la señal señal x.


grid on%este comando nos muestra las líneas de cuadrículas principales
para los ejes o gráficos actuales.
%Reconstruccion
figure
yy=zeros(size(x));%crea un vector yy con las mismas dimensiones de x
yy1=zeros(size(x));%crea un vector yy1 con las mismas dimensiones de x
for i=0:Nm
if i==0
yy=x(1).*recsinc(t,1*Fs);%yy toma el valor de x(1)*la señal sinc con
frecuencia de Fs
plot(t,yy)%grafica yy
hold on%nos permite agregar otra señal a una ya existente sin que se
borre.
grid on%este comando nos muestra las líneas de cuadrículas
principales para los ejes o gráficos actuales.
yy1=yy1+yy;%yy1 iguala a yy
else
yy=x(i*Nms).*recsinc(t-t(i*Nms),1*Fs);
plot(t,yy)%grafica yy
yy1=yy1+yy;%yy1 va sumando las señales obtenidas de yy.
end
end

plot(t,x,'linewidth',3)%grafica la señal señal x.


plot(t,xx,'linewidth',1.5)%grafica la señal señal xx.
plot(t,yy1,'linewidth',2.5)%grafica la señal señal yy.
c) Utilice otra señal de su elección y realice el mismo proceso. Comente los resultados. (20
pts.)

close all
clear all

fo=20;
f1=40;
fmax=10*f1;
t=0:(1/fmax)/40:3*(1/fo);
x=signal2(t,fo,f1);
plot(t,x,'linewidth',1.5)
grid on
%Muestreo
Fs=2.5*f1;
Ts=1/Fs;
Nm=floor(max(t)/Ts);
Nms=floor(max(size(t))/Nm);
xx=zeros(size(x));
for i=0:Nm
if i==0
xx=xx+x.*impulso(t);
else
xx=xx+x.*impulso(t-t(i*Nms));
end
end
figure
plot(t,xx,'linewidth',1.5)
hold on
plot(t,x,'linewidth',1.5)
grid on
%Reconstrucci?n
figure
yy=zeros(size(x));
yy1=zeros(size(x));
for i=0:Nm
if i==0
yy=x(1).*recsinc(t,1*Fs);
plot(t,yy)
hold on
grid on
yy1=yy1+yy;
else
yy=x(i*Nms).*recsinc(t-t(i*Nms),1*Fs);
plot(t,yy)
yy1=yy1+yy;
end
end
plot(t,x,'linewidth',3)
plot(t,xx,'linewidth',1.5)
plot(t,yy1,'linewidth',2.5)

FUNCIONES:
signal.m
function x=signal(t,fo,f1)
x=[4*cos(2*pi*fo*t)-5*sin(2*pi*f1*t)].*t;
impulso.m
function x=impulso(t)
x=(t==0.0)*1.0;

recsinc.m
function x=recsinc(t,tau)
x=1*sinc(t*tau);

También podría gustarte