You are on page 1of 7

DEPARTAMENTO DE ELÉCTRICA Y ELECTRÓNICA

SISTEMAS DE COMUNICACIONES

TRABAJO SEGUNDO PARCIAL

ESTUDIANTES: DAVID VARELA

TUTOR: ING. GONZALO OLMEDO

NRC: 3462

SANGOLQUÍ, DICIEMBRE 2018


- Diagrama de bloques

Señal de voz conversion


Decodificacion
grabada binario

Muestreo RUIDO Receptor

Cuantificación
Codificación
Uniforme

- Funciones utilizadas por cada diagrama de bloques con descripción

Señal de voz y Muestreo:

Audiorecorder: Crea un objeto de grabación de audio a 8kHz, 8 bits y 1 canal.

recordblocking(r,2); Graba audio desde un dispositivo de entrada, como un micrófono en el


objeto r y de tantos segundos como se especifique, (en el ejemplo 2 segundos).

play(r): Reproduce la señal de audio grabada en la variable antes mencionada

getaudiodata: Devuelve los datos de audio grabados asociados con la variable en la que se
asignó audiorecorder.

Cuantificación Uniforme:

Log2: Obtiene el logaritmo en base 2 de cada elemento que se le asigne.

Kron: Obtenemos todos los valores de los productos posibles entre sus 2 variables para poder
obtener los niveles de la cuantificación.

Soundsc: Reproduce la señal en la frecuencia establecida.


Codificación Unipolar NRZ (No retorno a cero):

Reshape: Para poder obtener los bits serie de la señal codificada en bits.

Stem: Grafica en un punto circular para observar gráficamente los datos de entrada del filtro
coseno levantado.

UNRZ: Codifica la matriz BITS usando un código de no retorno a cero, unipolar con BITRATE
dado. Las salidas son el tiempo T y los valores de señal codificados X.

Ruido (AWGN):

Awgn: Agrega ruido blanco gaussiano, por ejemplo y = awgn (x, snr) añade ruido gaussiano
blanco a la señal vectorial x. El snr es un escalar que especifica la relación señal-ruido por
muestra, en dB. Si x es complejo, awgn añade ruido complejo. Esta sintaxis supone que la
potencia de x es 0 dBW.

Filtro Coseno Levantado:

Beta: factor de diseño para el filtro, valor 1 es perfecto.

Zeros: Marcador de posición para la función de transferencia del filtro rc.

Conv: genera la convolución de la señal de datos con filtro coseno levantado.

Fft; obtiene fft de la respuesta para graficarla en la frecuencia.

Upsample: vuelve a muestrear los datos.

Diagrama de ojo:

Awgn: Agrega ruido blanco gaussiano, por ejemplo y = awgn (x, snr) añade ruido gaussiano
blanco a la señal vectorial x. El snr es un escalar que especifica la relación señal-ruido por
muestra, en dB. Si x es complejo, awgn añade ruido complejo. Esta sintaxis supone que la
potencia de x es 0 dBW.

Conv: genera la convolución de la señal de datos con filtro coseno levantado.

Upsample: vuelve a muestrear los datos.

Rand: generación de aleatorios para codificación polar 1= +1V, 0=-1V

Receptor:

Bits_serie: Señal binaria aleatoria de Nb bits.


Ones: Filtro transmisor NRZ normalizado (energía unitaria).
Conv: Convolución con el filtro transmisor.
Aten: Atenuación del Canal 10000=40dB. Relación entre Potencia TX y Potencia RX
- Resultados

Ensayo 1: Mensaje corto

VOZ GRABADA MENSAJE: “HOLA”


clear all
clc
close all

%------------------------------------------------------------------
---
%GRABADOR DE VOZ Y FRECUENCIA DE MUESTREO
%------------------------------------------------------------------
---
r = audiorecorder;
disp('Iniciando')
recordblocking(r,2);
disp('Fin.');
play(r);
x = getaudiodata(r);
fm=8000;
%soundsc(x,fm)

%------------------------------------------------------------------
---
%GRAFICA DE SEÑAL DE MENSAJE
%------------------------------------------------------------------
---
fs=fm;
Ts=1/fs;
t=[(0:(length(x)-1))*Ts];
m=x;
figure(1)
plot(t,m)
xlabel('tiempo(s)')
ylabel('m(t)')
title('Señal de mensaje')
grid on

%------------------------------------------------------------------
---
%GRAFICA DEL ESPECTRO DEL MENSAJE
%------------------------------------------------------------------
---
figure(2)
[frecm,XF]=transfourier(m,fs);
plot(frecm/1000,XF);
xlabel('frecuencia(Khz)')
ylabel('M(f)')
title('Espectro del Mensaje')
grid on
%------------------------------------------------------------------
---
%GRAFICA DEL ESPECTROGRAMA
%------------------------------------------------------------------
---
figure(3)
specgram(m,256,8000)
xlabel('tiempo')
ylabel('frecuencia')
title('Espectrograma')
%------------------------------------------------------------------
---
%CUANTIFICACIÖN UNIFORME
%------------------------------------------------------------------
---
nivel=16; %NUMERO DE NIVELES DE CUANTIFICACION
%soundsc(m,fm)
nbits = log2(nivel);
%DATOS: SENAL DE VOZ
figure(4)
subplot(2,1,1) %GRAFICO: SENAL ORIGINAL
plot(m);xlabel('muestras'); ylabel('x(n)')
grid on
niveles=[min(m):(max(m)-min(m))/(nivel-1):max(m)];
mniveles=kron(niveles',ones(1,size(m,1)));

for n=1:nivel
hold on; plot(mniveles(n,:),'r');
end

y=abs(mniveles-repmat(x',nivel,1));
[distancia xc]=min(y);
xc=xc-1; %SALIDA CUANTIFICADA
subplot(2,1,2) %GRAFICO: SENAL CUANTIFICADA
plot(xc);xlabel('muestras'); ylabel('x_c(n)')
grid on
%soundsc(xc,fm) %SONIDO CUANTIFICADO
%------------------------------------------------------------------
---

%CODIFICACIÓN
%------------------------------------------------------------------
---

% Generar bits
nbits=log2(nivel); %CODIFICACION
bits=decimal_a_binario(xc,nbits);
bits_serie=reshape(bits',size(bits,1)*size(bits,2),1);
bits_serie=bits_serie';
bitsm=2.*bits_serie-1; %bitsmodulados
%bitsm=bitsm';

%% Genero Ruido
sigma=0.1;
aux1=length(bits_serie);
ruido=normrnd(0,sigma,1,aux1);
y=bitsm+ruido;

%% Receptor
bitsmr=sign(y);
bitsr=(bitsmr+1)/2;

% Decodificación del mensaje


%inicializo variables para conversion binaria a decimal
Nbits = [0, 0, 0, 0];
sonido=[];
j=1;
%Agrupo valores de 4 bits
for i=1:1:length(bitsr)
%Conteo para tener grupos de 4 bits
d = mod(i-1, 4);
if (i ==1)
d = 1;
end
if (d == 0)
j = 1;
%transformción de bits
num=binario_a_decimal(Nbits);
Nbits;
sonido((i-1)/4)=num;
end
Nbits(j)=bitsr(i);
j=j+1;
end

%normalizo el vector
sonido=1/max(sonido)*sonido;
%grafico en funcion del tiempo
figure (6);
plot(sonido,'r');
ylim([-0.1 1.1]);

%reproducir el audio obtenido


soundsc(sonido,fs);

 TRANSFOURIER:
function [frec,XF]=transfourier(xt,fs)

%TRANSFORMADA DE FOURIER EN BASE DE LA FFT


%xt= SEÑAL xt
%fs=frecuencia de muestreo
%XF=transformada de fourier
%frec=valores de frecuencia
muestras=length(xt);
XF=(fft(xt)/muestras);
frec=(fs/muestras)*[0:1:muestras-1];
end
 Decimal a binario:
function binario = decimal_a_binario(decimal,n)
% Función que convierte un número o vector de números decimales
en n bits
% binario = decimal_a_binario(decimal,n)
%Ejemplo
%binario = decimal_a_binario(18,5)
%binario =
% 1 0 0 1 0
for k = 1:length(decimal)
for m = n:-1:1
binario(k,n-m+1) = fix(decimal(k)/(2^(m-1)));
decimal(k) = decimal(k) - binario(k,n-m+1)*2^(m-1);
end
end

You might also like