comunicacion usando MATLAB
description
Transcript of comunicacion usando MATLAB
Comunicación FDM entre dos PCs mediante el puerto de audio
•Wladimir De La Cadena•Fernanda Quezada
•Diana Román
ESCUELA POLITÉCNICA NACIONAL
COMUNICACIONES INALÁMBRICASTEMA:
Ideas fundamentales
Se desea comunicar dos PCs utilizando el puerto de audio; la información que se transmitirá serán dos señales de audio, que viajaran moduladas en amplitud por el canal.
Para la comunicación se deberá aplicar las técnicas de modulación en amplitud con banda lateral única.
Problema
Demodulador
Señales a TX
Modulador
Señales que viajan por el canal moduladas en amplitud
Señales RX
PC 1PC2
Modulación
Modular una señal de banda base significa trasladarla a la parte superior del espectro y aplicar un filtro en ella según el tipo de modulación que se desee.
Matemáticamente al multiplicar una señal de banda base por una de mayor frecuencia la de BB se traslada a la frecuencia alta.
Para modular una señal, se debe tener en cuenta: la señal a modular (y), la frecuencia de muestro, la frecuencia a la cual se le lleva y el tipo de modulación
Modulación Se multiplican las señales
Demodulación
La demodulación es el proceso de recuperación de la señal moduladora de una señal modulada.
Para demodular matemáticamente se multiplica la señal modulada f(t) por la de banda base, y se eliminan los armónicos de altas frecuencias dejando solamente la información de Banda Base
Multiplexación FDM
La multiplexación por división de frecuencia, también denominada FDM, permite compartir la banda de frecuencia disponible en el canal de alta velocidad, al dividirla en una serie de canales de banda más angostos, de manera que se puedan enviar continuamente señales provenientes de diferentes canales de baja velocidad sobre el canal de alta velocidad.
Solucion al Problema
Para lograrlo, es necesario filtrar las señales a ser moduladas de tal manera que no se interfieran entre si y dejar una banda de guarda. Luego de esto se procede a multiplicarlas por una portadora diferente dependiendo de la banda en la que se quiera que esté para luego sumarlas y enviarlas. Luego en el receptor se filtrará las señales en cada banda y se las multiplicará nuevamente por su portadora a fin de regresarlas a la banda base.
Funciones a ser utilizadas en Matlab
Lo que primero se necesita es obtener nuestros archivos de audio que queremos transmitir para ello usamos: Wavread
Esta función nos permite capturar el archivo de audio con todas sus caracteriticas
Funciones a ser utilizadas en Matlab
Es importante realizar análisis espectral, para comprobar resultados para lo cual usamos Pwelch
La modulación y demodulación se realizan con funciones que hemos diseñado y hemos especificado en las presentaciones respectivas, sin embargo se pueden usar:
Funciones a ser utilizadas en Matlab
Modulate
Demodulate
Funciones a ser utilizadas en Matlab
Dentro del diseño de los moduladores, se usan filtros IIR FIR, propios de matlab.
Lo siguiente, es conocer como Matlab permite enviar y recibir información usando el puerto de audio, para ello acudimos a la ayuda y esto es lo que obtenemos.
Función Analog input
Esta función crea un objeto, que lee lo que este presente en el puerto de audio, sus propiedades de frecuencia de muestro y tiempo mediante el cual recoge el audio, esta especificado por el objeto, creado.
Mas teoría sobre la adquisición de audio en Matlab, se encuentra en los archivos extras
Uso de analoginput%PRIMERO CREAMOS EL OBJETO QUE CAPTURA EL AUDIOAI = analoginput('winsound',0);chan = addchannel(AI,1);AI%DEFININOS LA DURACION QUE QUEREMOS QUE EL AUDIO SE LEAduration = 10;%DEFINIMOS UNA Fs PARA LEER EL AUDIO CON BUENA CALIDADSampleRate = 44100;%ESTABLECEMOS LAS CONFIGURACIONES DE LA Fs Y DE LA DURACIONset(AI,'SampleRate',SampleRate);set(AI,'SamplesPerTrigger',duration*SampleRate);set(AI,'TriggerType','Manual');%EJECUTAMOS LA ADQUISICION DURANTE EL TIEMPO ESTABLECIDOstart(AI);AItrigger(AI);AI%POR ULTIMO ALMACENAMOS EN DATA LO QUE AI ADQUIRIO DE LA TARJETA DE SONIDOdata = getdata(AI);
Resultados del uso de analoginput
Aquí se observan las propiedades del objeto que captura el audio
Se observa que data ya contiene los datos leídos 44100 muestras por seg, en 10 seg. serán 441000 en total
Función Analogoutput
Esta función crea un objeto, que envía por el puerto de audio, sus propiedades de frecuencia de muestro y tiempo mediante el cual envía el audio, esta especificado por el objeto creado.Es una función de descripción similar a analoginput, por lo cual su uso es idéntico, simplemente en vez de recibir datos, se envía.
Desarrollo del programa para enviar los dos audios al canal.
Primero leemos los audios que queremos enviar.
close all clear all clc%archivo original 1:[audio1_2CH,Fs1,format] = wavread('Barra de info de Windows XP'); audio1_1CH=audio1_2CH(:,1);%extraemos 1 solo canal[audio2_2CH,Fs2,format] = wavread('Vista_BlockedPopup');audio2_1CH=audio2_2CH(:,1);%extraemos 1 solo canal
Lectura de archivos
Extraccion de uno de los canales
Procedemos a verificar en tiempo que los audios han sido leídos
plot(audio1_2CH) % se verifica dos señales diferentestitle('audio 1 (2CH) (estereo)')figureplot(audio1_1CH)title('audio 1 (1CH) (mono)')figureplot(audio2_2CH) % se verifica dos señales diferentestitle('audio 2 (2CH) (estereo)') figureplot(audio2_1CH)title('audio 2 (1CH) (mono)')
Gráfico tanto de ambos canales, como solo de la señal mono
Procedemos a verificar auditivamente también
sound(audio1_2CH,Fs)sound(audio2_2CH,Fs)
Verificación en tiempo de los audio leídos
Se observan los audios en tiempo tanto estéreo y mono
longitud1=length(audio1_1CH);longitud2=length(audio2_1CH); x=[longitud1,longitud2]longitud_minima= min(x)%Extracción de la longitud mínima de cada archivo de audio: audio1_1CH = audio1_1CH (1:longitud_minima);audio2_1CH = audio2_1CH (1:longitud_minima);%Cuando se requiera hacer FDM suma temporal de las 4 señales % VERIFICAMOS SI TODAS LAS Fs SON IGUALES O NO: Fs1 %44100Fs2 %44100
Fs = Fs1; % sería común para todas.
Procedemos a establecer las longitudes correctas, para realizar un correcto FDM
Longitudes y Fs controladas
Diseñamos un filtro para que las dos señales tengan AB limitado y se puedan Multiplexar sin alliasing, se cortara a partir de 3000Hz donde no afecta a la percepción de audio
Fmax=Fs/2;orden = 40; wn = 3000/ Fmax; % al variar, dio 3000 que nos deja oir sin alteracionesb = FIR1(orden,wn,'low');figurefreqz(b,1,128) %comprobando que ha sido bien construido el filtro
comprobando que ha sido bien construido el filtro
Procedemos a aplicar el filtro a ambos audios
audio1_BB=filter(b,1,audio1_1CH); audio2_BB=filter(b,1,audio2_1CH);
Se aplica el filtro es decir se extraen las bandas base
Procedemos a verificar la aplicación del filtro mediante análisis espectral
nFFT=1024;LongVentana= nFFT/4;Solapamiento =LongVentana/2;% Espectro de la primera señal:[P_welch_audio1_BB,F_welch_audio1_BB] = ...pwelch(audio1_BB,LongVentana,Solapamiento,nFFT,Fs1);figureplot(F_welch_audio1_BB,P_welch_audio1_BB,'b')title('espectro del audio 1 - banda base o filtrado')% Espectro de la segunda señal:[P_welch_audio2_BB,F_welch_audio2_BB] = ... pwelch(audio2_BB,LongVentana,Solapamiento,nFFT,Fs1);figureplot(F_welch_audio2_BB,P_welch_audio2_BB,'b')title('espectro del audio 2 - banda base o filtrado')
Verificación mediante análisis espectral
Observamos que las señales de banda base no sobre pasan los 3000 Hz y podemos proceder a modularla y aplicar FDM
Procedemos a modular aplicando la función que hemos desarrollado y que se explica en la presentación de FDM.
Dado que nuestro canal es limitado (audio), decidimos modular las señales en 4000 Hz y 8000Hz dejando su banda de guarda de 1 KHz
Modulaciónaudio1_mod=mimodulacion2010(audio1_BB,Fs,4000)audio2_mod=mimodulacion2010(audio2_BB,Fs,8000)
Se modula aplicando la función que nosotros desarrollamos previamente
Verificamos el desplazamiento de los espectros mediante análisis espectral
[P_welch_audio1_mod,F_welch_audio1_mod] = ... pwelch(audio1_mod,LongVentana,Solapamiento,nFFT,Fs1);figureplot(F_welch_audio1_mod,P_welch_audio1_mod,'b')title('espectro del audio 1 - modulado') % Espectro de la segunda señal:[P_welch_audio2_mod,F_welch_audio2_mod] = ... pwelch(audio2_mod,LongVentana,Solapamiento,nFFT,Fs2);figureplot(F_welch_audio2_mod,P_welch_audio2_mod,'b')title('espectro del audio 2 - modulado')
Verificación mediante análisis espectral
Se observa que los espectros de las señales se han desplazado a las frecuencias que queríamos es decir se realizo la modulación
Procedemos a realizar la Multiplexación FDMaudio_fdm=audio1_mod+audio2_mod;
Procedemos a normalizar para tener un mismo nivel en todas las señalesP_welch_audio1_mod_norm = P_welch_audio1_mod / max(P_welch_audio1_mod);P_welch_audio2_mod_norm = P_welch_audio2_mod / max(P_welch_audio2_mod);
Verificamos con análisis espectral[P_welch_audio_FDM,F_welch_audio_FDM] = pwelch(audio_fdm,LongVentana,Solapamiento,nFFT,Fs);figure plot(F_welch_audio_FDM,P_welch_audio1_mod_norm,'b')hold onplot(F_welch_audio_FDM,P_welch_audio2_mod_norm,'b')hold onFigureplot(audio_fdm) %Queremos observar en tiempo
Observamos claramente que se ha realizado FDM
0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000-0.4
-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
El paso siguiente es enviar los datos hacia el otro PC, para esto debemos en el PC1 usar sound de esa manera la señal FDM, saldrá por el puerto de audio, mientras tanto en la PC2 debemos usar analoginput
sound(audio_fdm,Fs) Esta línea de código en la PC1 saca los datos por el puerto de audio
mientras tanto en la PC2 debemos usar analoginput
%PRIMERO CREAMOS EL OBJETO QUE CAPTURA EL AUDIOAI = analoginput('winsound',0);chan = addchannel(AI,1);AI%DEFININOS LA DURACION QUE QUEREMOS QUE EL AUDIO SE LEAduration = 10;%DEFINIMOS UNA Fs PARA LEER EL AUDIO CON BUENA CALIDADSampleRate = 44100;%ESTABLECEMOS LAS CONFIGURACIONES DE LA Fs Y DE LA DURACIONset(AI,'SampleRate',SampleRate);set(AI,'SamplesPerTrigger',duration*SampleRate);set(AI,'TriggerType','Manual');%EJECUTAMOS LA ADQUISICION DURANTE EL TIEMPO ESTABLECIDOstart(AI);AItrigger(AI);AI%POR ULTIMO ALMACENAMOS EN DATA LO QUE AI ADQUIRIO DE LA TARJETA DE SONIDOdata = getdata(AI);senal_recibida=data;
Aqua guardamos los datos recibidos
Verificamos la señal recibidaplot(data)
nFFT=1024;LongVentana= nFFT/4;Solapamiento =LongVentana/2;Fs1=44100; [P_BB,F] = ... pwelch(y,LongVentana,Solapamiento,nFFT,Fs1);figureplot(F,P,'b')title('espectro de la senal recibida')
Mediante análisis espectral
0 0.5 1 1.5 2 2.5
x 104
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Espectro de la señal recibida es igual al enviado
señal en tiempo recibida es igual al enviado solo desafasado, pero no afecta para demodular
Queremos demultiplexar, aplicamos un filtro pasabanda a las dos señales para obtener dos independientes
%Filtro pasa banda1:(Demultiplexacion) wn1 = [4000 7000]/Fmax;[b1_pasabanda, a1_pasabanda] = butter(8,wn1);audio1_demux = filter(b1_pasabanda, a1_pasabanda,audio_fdm); % Filtros pasa banda2:wn2 = [8000 1100]/Fmax;[b2_pasabanda, a2_pasabanda] = butter(8,wn2);audio2_demux = filter(b2_pasabanda, a2_pasabanda,audio_fdm);
Aislamos, las frecuencias de cada senal y demultiplexamos
Verificamos las señales con análisis espectral
Aquí ya tenemos las dos señales separadas, lo que nos queda por hacer es demodularlas
Demodulación de las señales- regreso a la banda base
audio1_demod = midemod2010(audio1_mod,4000,Fs, );audio2_demod = midemod2010(audio2_mod,8000,Fs,);
Aplicamos nuestra función con la multiplicación y los filtros que diseñamos y especificamos en la presentación de FDM
Verificamos que las señales estén en banda base% Potencia Audio1:[P_welch_audio1_demod ,F_welch_audio1_demod ] = ... pwelch(audio1_demod ,LongVentana,Solapamiento,nFFT,Fs);figureplot(F_welch_audio1_demod ,P_welch_audio1_demod)title('Espectro primer canal demodulado')%Potencia Audio 2:[P_welch_audio2_demod ,F_welch_audio2_demod ] = ... pwelch(audio2_demod ,LongVentana,Solapamiento,nFFT,Fs);figureplot(F_welch_audio2_demod ,P_welch_audio2_demod)title('Espectro segundo canal demodulado')
Verificamos auditivamente que las señales estén en banda base%sound(audio1_BB,Fs) % si reproduce sin alteraciones perceptibles%sound(audio2_BB,Fs) % si reproduce sin alteraciones perceptibles
Verificación de las señales demoduladas
Se observa que han regresado a banda base y así hemos recuperado las señales originales
En la verificación auditiva, escuchamos prácticamente en recepción lo que enviamos
0 0.5 1 1.5 2 2.5
x 104
0
0.2
0.4
0.6
0.8
1
1.2x 10
-5 Espectro primer canal demodulado
0 0.5 1 1.5 2 2.5
x 104
0
0.5
1
1.5
2
2.5x 10
-8Espectro segundo canal demodulado
Análisis y conclusiones de los resultados
Se logra recuperar las señales que se enviaron con prácticamente, las mismas características.
Se debe tomar en cuenta que la tarjeta de audio soporta 20KHz por lo cual es importante saber a donde modulamos
El diseño de los filtros y de las funciones para modular y demodular e importante para evitar problemas en el análisis de frecuencia
Análisis y conclusiones de los resultados
Es importante saber y conocer la función que nos permite adquirir el audio por el puerto de audio.
Los conceptos de FDM han sido demostrados en esta simulación y se concluye que son validos y se puede generalizar para mas señales y para otros tipos de canales
Bibliografía
http://www.mathworks.com/help/toolbox/daq/ref/analoginput.html
http://isa.uniovi.es/~ialvarez/Curso/cptr/SonidoMatlab.pdf
Material proporcionado por el Dr. Robin Álvarez.