You are on page 1of 4

clear all

close all

%Solicita tipo de seal a muestrear
opcion = input('Escriba 1 si quiere codificar seal de audio o 2 si quiere codificar
otra: ')

%abre seal seleccionada por el usuario
if opcion==1;
t_input = input('escriba el tiempo en segundos que desee grabar el audio: ');
m = wavrecord(t_input*30000,30000,'int16');
%fid = fopen ('sonido.wav','r');
%m = fread (fid,'int16');
ini_cuenta = 10;
end
if opcion==2;
t = input('escriba el vector de tiempo para la seal: ');
m = input('escriba la seal que desee codificar f(t): ');
ini_cuenta = 2;
end

%Solicita frecuencia de muestreo y niveles de cuantizacion
Fs = input('escriba la frecuencia de muestreo: ');
levels = input('escriba los niveles de cuantizacion: ');

Mp = max (m) %Calcula el nivel mximo de la seal

step_size = (Mp*2)/levels %Incremento entre cada nivel de cuant
particion = [-Mp:step_size:Mp]; %vector de particion (cuant)
%particion = [0:step_size:2*Mp];
Ts = 1;
longitud_m = length(m);
inc_muestreo = longitud_m/Fs;
red_inc_muestreo = floor(inc_muestreo);
No_samples = (red_inc_muestreo*Fs)+1; %Numero de muestras,

%Muestreo
for k=ini_cuenta:No_samples
if k == ini_cuenta
samp_in(k-1) = 0;
ind_pcm = 1
end
residuo = rem(k,red_inc_muestreo);
if residuo == 0
samp_in(k) = m(k);
elseif residuo ~= 0
samp_in(k) = samp_in(k-1);
end
end

%Cuantizacion
quant = quantiz(samp_in,particion);
pcm_cad = dec2bin(quant)
ind_pcm = 1;

%Genera codigo binario de PCM
for h=ini_cuenta:No_samples
residuo = rem(h,red_inc_muestreo);
if residuo == 0
PCM(ind_pcm) = str2num(pcm_cad(h,:));
ind_pcm = ind_pcm+1;
end
end

subplot(2,2,1); plot(m); title('seal analgica'); xlabel('tiempo');
ylabel('amplitud');
subplot(2,2,2); stairs(samp_in); title('seal muestreada'); xlabel('tiempo');
ylabel('amplitud');
subplot(2,2,3); plot(quant); title('seal cuantizada'); xlabel('tiempo');
ylabel('niveles de cuantizacion');

close all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%UNIVERSIDAD NACIONAL PEDRO RUIZ GALLO
%CURSO: TELECOMUNICAICONES II SEMESTRE 2013-I
%ING. FRANCISCO SEGURA ALTAMIRANO
%LAMBAYEQUE 2013
%Simulacion de modulacion PCM con cuatizacion Uniforme de una seal con una
%frecuencias Fmax.
Fmax=100; %Frecuencia de la Seal Analogica
Fs=2*Fmax; %Frecuencia de muestreo
Ts=1/Fs; %Periodo de muestreo
N=100; %Numero de muestras
nb=5; %Tamao de la palabra de la codificacion para cada muestra
L=2^nb-1 %Numero de niveles permitidos
x=randi(L,N,1); %Se genera las muestras aleatoria de la seal
xpcm=dec2bin(x)-48; %se codifica en binario natural
xpcm=xpcm(:); %se coloca la seal PCM en un vector
%Aca es necesario calcular la frecuencia de muestreo de la seal PCM
%resultante que esta relacionada con la Fs de la seal y el numero de bit y
%el numero de puntos que se usara para construir la representacion digital
%de la cadena PCM.
Np=20 %Cada pulso se conformara por 20 puntos.
Ts1=(Ts/nb)*(1/Np);
Fs1=1/Ts1;
%Con la informacin de Fs1 y Ts1 y sabiendo el numero de muestras y la
%cantiadad de bits por muestra se realiza el barrido de tiempo
t=0:Ts1:N*nb*Np*Ts1-Ts1;
%Tambien para mostrar correctamente el espectro es necesario realizar el
%barrido de frecuencias necesarios asi
f=linspace(-Fs1/2,Fs1/2,length(t));
%Se usara codificacion NRZ para esta parte
pnrz=ones(1,Np); %Pulso basico para transmision
%Realizamos la sealizacion
senpcm=pnrz'*xpcm';
%conertimos a un vector
senpcm=senpcm(:);
%graficamos
subplot(321)
plot(t,senpcm)
title('Seal PCM en el tiempo')
%Podemos obtener mas informacion si observamos esta seal en el dominio de
%la frecuecia
SENPCM=fft(senpcm)/length(senpcm);
%graficamos
subplot(322)
plot(f,fftshift(abs(SENPCM))/max(abs(SENPCM)))
title('Seal PCM en la frecuencia y filtro ideal')
%Segun nuestros calculos vtx=Fs*5=1000bps, entonces BWtx=vtx/2 (NRZ)
%BWtx=500Hz
hold on
fc_ideal=500; %Frecuencia de corte ideal, Puede cambiarse para probar
H=(abs(f)<=fc_ideal); %se construye un filtro ideal
plot(f,H,'r','linewidth',3);
legend('Seal PCM','Filtro Ideal')
SENPCM_FIL=fftshift(H').*(SENPCM); %se realiaza el fitrado de la seal
subplot(323)
plot(f,fftshift(abs(SENPCM_FIL))/max(abs(SENPCM_FIL)));
title('Seal PCM filtrada en la frecuencia')
%Calculamos la transformada inversa y observamos la seal PCM
senpcm_fil=ifft(SENPCM_FIL)*length(SENPCM_FIL);
subplot(324)
plot(t,real(senpcm_fil))
title('Seal PCM filtrada en el tiempo')
hold on
plot(t,senpcm,'r','linewidth',2)
legend('Seal filtrada','Seal Original')
%Ahora consideraremos el caso mas real al usar un filtro RC con frecuencia
%de corte igual a la del ancho de banda de transmission calculado
fcorte=500;
Hrc=1./(1+j*f/fcorte); %Funcion de transferencia del filtro
SENPCM_FILrc=fftshift(Hrc').*(SENPCM);
subplot(325)
plot(f,fftshift(abs(SENPCM_FILrc)));
title('Seal PCM filtrada con filtro RC')
senpcm_filrc=ifft(SENPCM_FILrc)*length(SENPCM_FILrc);
subplot(326)
plot(t,real(senpcm_filrc))
title('Seal PCM filtrada en el tiempo')
hold on
plot(t,senpcm,'r','linewidth',2)
legend('Seal filtrada','Seal Original')

You might also like