Professional Documents
Culture Documents
% (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);
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
%(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');