You are on page 1of 8

Practica N#1

Teora de Muestreo y Cotizacin en Matlab


% (ExDM.m)
% Ejemplo de muestreo por, la cuantificacin, y mantenedor de orden cero
clear;clf;
td=0.002;
%500Hz tasa de muestreo original
t=[0:td:1]; %intervalo de tiempo de 1 segundo
xsig=sin(2*pi*t)-sin(6*pi*t); % 1Hz+3Hz sinusoids
Lsig=length(xsig);
ts=0.02;
%nueva frecuencia de muestreo = 50 Hz
Nfact=ts/td;
% enviar la seal a travs de un cuantificador uniforme de 16 niveles
Deta1=0.2; % Seleccione primero un pequeo delta = 0,2 en DM
s_DMout1=deltamod(xsig,Delta1,td,ts);
% Obtenido la seal DM
% Graficar la seal original y la seal de DM en el dominio del tiempo
figure(1);
subplot(311);sfig1=plot(t,xsig,'k',t,s_DMout1(1:Lsig),'b');
set(sfig1,'Linewidth',2);
title('Signal {\it g}({\it t}) and DM signal')
xlabel('time (sec.)'); axis([0 1 -2.2 2.2]);
%
% Aplicar DM nuevamente duplicando el Delta
Delta2=2*Delta1;
s_DMout2=deltamod(xsig,Delta2,td,ts);
% Obtenido la seal DM
% Graficar la seal original y la seal de DM en el dominio del tiempo
subplot(312);sfig2=plot(t,xsig,'k',t,s_DMount2(1:Lsig),'b');
set(sfig,'Linewidth',2);
title('Seal {\ it g} ({\ it t}) y la seal de DM con stepsize
duplicado')
xlabel('tiempo (seg)'); axis([0 1 -2.2 2.2]);
%
Delta3=2*Delta2;
% Doble DM Delta de nuevo.
s_DMout3=deltamod(xsig,Delta3,td,ts);
% trazar la seal original y la seal de DM en el dominio del tiempo
subplot(313);sfig3=plot(t,xsig,'k',t,s_DMout3(1:Lsig),'b');
set(sfig3,'Linewidth',2);
title('Seal {\ it g} ({\ it t}) y la seal de DM con stepsize
cuadruplicado');
xlabel('tiempo (seg)');axis([0 1 -2.2 2.2]);

% (ExPCM.m)
% Ejemplo de muestreo, cuantificacin, y mantenedor de orden cero
clear;clf;
td=0.002;
% 500Hz tasa de muestreo original
t=[0:td:1.];
% intervalo de tiempo de 1 segundo
xsig=sin(2*pi*t)-sin(6*pi*t);
% 1Hz+3Hz sinusoids
Lsig=length(xsig);
Lfft=2^ceil(log2(Lsig)+1);
Xsig=fftshift(fft(xsig,Lfft));
Fmax=1/(2*td);
Faxis=linspace(-Fmax,Fmax,Lfft);
ts=0.02;
% nueva frecuencia de muestreo = 50Hz.
Nfact=ts/td;
% enviar la seal a travs de un cuantificador uniforme de 16 niveles
[s_out,sq_out,sqh_out1,Delta,SQNR]=sampandquant(xsig,16,td,ts);
% obtenido la seal PCM que se toman muestras, cuantificada y sqh_out de
orden cero seal de mantenimiento
% graficar la seal original y la seal PCM en el dominio del tiempo
figure(1);
subplot(211);sfig1=plot(t,xsig,'k',t,sqh_out1(1:Lsig),'b');
set(sfig1,'Linewidth',2);
title('Seal {\ it g} ({\ it t}) y su seal PCM de 16 niveles')
xlabel('tiempo(seg)');
% enviar la seal a travs de un cuantificador uniforme de 16 niveles
[s_out,sq_out,sqh_out2,Delta,SQNR]=sampandquant(xsig,4,td,ts);
% obtenido la seal PCM que se toman muestras, cuantificada y sqh_out de
orden cero seal de mantenimiento
% graficar la seal original y la seal PCM en el dominio del tiempo
subplot(212);sfigl=plot(t,xsig,'k',t,sqh_out2(1:Lsig),'b');
set(sfig2,'Linewidth',2);

title('Seal {\ it g} ({\ it t}) y su seal PCM de 4 niveles')


xlabel('tiempo(seg)');
Lfft=2^ceil(log2(Lsig)+1);
Fmax=1/(2*td);
Faxis=linspace(-Fmax,Fmax,Lfft);
SQH1=fftshift(fft(sqh_out1,Lfft));
SQH2=fftchift(fft(sqh_out2,Lfft));
% Ahora usa LPF para filtrar las dos seales PCM
BW=10;
% Ancho de banda no es mayor que 10 Hz
H_lpf=zeros(1,Lfft);H_lpf(Lfft/2-BW:Lfft/2+BW-1)=1; %ideal LPF
S1_recv=SQH1.*H_lpf;
%ideal filtering
s_recv1=real(ifft(fftshift(S1_recv))); %reconstructed f-domain
s_recv1=s_recv1(1:Lsig);
%reconstructed f-domain
S2_recv=SQH2.*H_lpf;
%ideal filtering
s_recv2=real(ifft(fftshift(S2_recv))); %reconstructed f-domain
s_recv2=s_recv2(1:Lsig);
%reconstructed t-domain
% Trazar la seal filtrada en contra de la seal original

figure(2)
subplot(211);sfig3=plot(t,xsig,'b-',s_recv1,'b-.');
legend('original','recovered')
set(sfig3,'Linewidth',2);
title('Seal {\ it g} ({\ it t}) y se filtra la seal PCM de 16 niveles')
xlabel('tiempo(seg)');
subplot(212);sfig4=plot(t,xsig,'b-',s_recv2(1:Lsig),'b-.');
legend('original','recovered')
title('Seal {\ it g} ({\ it t}) y se filtra la seal PCM de 4 niveles')
Xlabel('tiempo(seg)');

% (sampandquant.m)
function [s_out,sq_out,sqh_out,Delta,SQNR]=sampandquant(sig_in,L,td,ts)
% Uso
% [S_out, sq_out, sqh_out, Delta, SQNR] = sampandquant (sig_in, L, td,
fs)
% L - nmero de niveles de cuantificacin uniforme
% Sig_in - Entrada de seal vectorial
% Td - perodo de muestreo de la seal original del sig_in
% Ts - nuevo perodo de muestreo por
% NOTA: td * fs debe ser un nmero entero positivo;
% Function outputs:
%
s_out - muestreada de salida
%
sq_out - Salida de muestreo y cuantificada
%
sqh_out - muestra, cuantizacin, y mantener la produccin
%
Delta - intervalo de cuantificacin
%
SQNR - seal real de ruido de cuantificacin
if (rem(ts/td,1)==0)
nfac=round(ts/td);
p_zoh=ones(1,nfac);
s_out=downsample(sig_in,nfac);
[ sq_out, Delta, SQNR ]=uniquan(s_out,L);
s_out=upsample(s_out,nfac);
sqh_out=kron(sq_out,p_zoh);
sq_out=upsample(sq_out,nfac);
else
warning('Error! ts/td is not an integer!');
s_out=[];sq_out=[];sqh_out=[];Delta=[];SQNR=[];
end
end
% (uniquan.m)

function [q_out,Delta,SQNR]=uniquan(sig_in,L)
% Uso
%
[Q_out, Delta, SQNR] = uniquan (sig_in, L)
%
L - nmero de niveles de cuantificacin uniforme
%
Sig_in - Entrada de seal vectorial
% Salidas de funcin:
%
Q_out - salida cuantificada
%
Delta - intervalo cuantificado
%
SQNR - seal real a quatization ruido
sig_pmax = max(sig_in) ; % encontrar el pico positivo
sig_nmax = min(sig_in) ; % encontrar el pico negativo
Delta=(sig_pmax-sig_nmax)/L; % intervalo de cuantificacin

q_level=sig_nmax+Delta/2:Delta:sig_pmax-Delta/2; % definir Q-niveles


L_sig=length(sig_in); % encontrar la longitud de la seal
sigp=(sig_in-sig_nmax)/Delta+1/2; % convertir en 1/2 a L+1/2 Gama
qindex=round(sigp); % ronda a 1, 2, ... L niveles
qindex=min(qindex,L); % eliminar L+1 como una posibilidad poco frecuente
q_out=q_level(qindex); % utilizar el ndice de vectores para generar la
salida
SQNR=20*log10(norm(sig_in)/norm(sig_in-q_out)); % del valor real SQNR
end

%(Exsample.m)
%Ejemplo de muestreo, cuantificacin y mantenedor de orden cero
clear;clf;
td=0.002; %500Hz tasa de muestreo original
t =[0:td:1.]; %intervalo de tiempo de 1 segundo
xsig=sin(2*pi*t)-sin(6*pi*t); %1Hz+3Hz sinusoides
Lsig=length(xsig);
ts=0.02; %nueva frecuencia de muestreo = 50 Hz
Nfactor=ts/td;
% enviar la seal a travs de un cuantificador uniforme de 16 niveles
[s_out,sq_out,sqh_out,Delta,SQNR] = sampandquant(xsig,16,td,ts);
% recibir 3 seales:
% 1. s_out seal muestreada
% 2. muestra y sq_out seal cuantificada
% 3. muestreada, cuantificada y sqh_out de orden cero seal de
mantenimiento
%calcular la transformada de Fourier
Lfft=2^ceil(log2(Lsig)+1);
Fmax=1/(2*td);
Faxis=linspace(-Fmax,Fmax,Lfft);
Xsig=fftshift(fft(xsig,Lfft));
S_out=fftshift(fft(s_out,Lfft));
% Ejemplos de muestreo y reconstruccin utilizando
% A) del tren de impulso ideal a travs de LPF
% B) planos de reconstruccin de impulsos superior a travs de LPF
% Graficar la seal original y la seal de la muestra en el tiempo y
dominio de la frecuencia
figure(1);

subplot(311); sfigla=plot(t,xsig,'k');
hold on ; sfiglb=plot(t,s_out(1:Lsig),'b');hold off;
set(sfigla,'Linewidth',2); set(sfiglb,'Linewidth',2.);
xlabel('tiempo (seg)');
title('Seal {\it g}({\it t}) y sus muestras uniformes');
subplot(312); sfiglc=plot(Faxis,abs(Xsig));
xlabel('Frecuencia (Hz)');
axis([-150 150 0 300])
set(sfiglc,'Linewidth',1); title('Espectro de {\it g}({\it t})');
subplot(313); sfigld=plot(Faxis,abs(S_out));
xlabel('Frecuencia (Hz)');
axis([-150 150 0 300/Nfactor])
set(sfiglc,'Linewidth',1); title('Espectro de {\it g}_T({\it t})');
%
Calcular la seal reconstruida a partir de un muestreo ideal y
%
perfecto ancho de banda LPF Maximun LPF es igual a BW = baja ((MLG
/ Nfacto) / 2);
BW=10; % Ancho de banda no es mayor que 10 Hz
H_lpf=zeros(1,Lfft); H_lpf(Lfft/2 - BW:Lfft/2+BW-1)=1; %ideal LPF
S_recv=Nfactor*S_out.*H_lpf; % filtrado ideales
s_recv=real(ifft(fftshift(S_recv))); % reconstruccion de F-dominio
s_recv=s_recv(1:Lsig); % reconstrucion de t-dominio
% Graficar la seal ideal reconstruida en el tiempo y dominio de la
frecuencia

figure(2)
subplot(211); sfig2a=plot(Faxis,abs(S_recv));
xlabel('frecuencia (Hz)');
axis([-150 150 0 300]);
title('Espectro de filtrado ideal (reconstruccin)');
subplot(212); sfig2b=plot(t,xsig,'k-.',t,s_recv(1:Lsig),'b');
legend('seal original','seal reconstruida');
xlabel('tiempo (seg)');
title('seal original frente a la seal ideal reconstruida');
set(sfig2b,'Linewidth',2);
% Reconstruccin no ideal

ZOH=ones(1,Nfactor);
s_ni=kron(downsample(s_out,Nfactor),ZOH);
S_ni=fftshift(fft(s_ni,Lfft));
S_recv2=S_ni.*H_lpf; % filtrado de ideales
s_recv2=real(ifft(fftshift(S_recv2))); % reconstruccion de f-dominio
s_recv2=s_recv2(1:Lsig); %recontruccion de t-dominio
% Graficar la seal ideal reconstruida en el tiempo y dominio de la
frecuencia

figure(3)
subplot(211); sfig3a=plot(t,xsig,'b',t,s_ni(1:Lsig),'b');
xlabel('tiempo (seg)');
title('seal original frente a la reconstruccin flat top');
subplot(212); sfig3b=plot(t,xsig,'b',t,s_recv2(1:Lsig),'b--');
legend('seal original','reconstruccin LPF');
xlabel('tiempo (seg)');
set(sfig3a,'Linewidth',2); set(sfig3b,'Linewidth',2);
title('reconstruccin original y plana superior despus de LPF');

You might also like