TAREA #2 GENERACION DE SEÑALES PAM i ÍNDICE INTRODUCCION. ........................................................................................................... 1 OBJETIVOS .................................................................................................................... 2 MARCO TEORICO.......................................................................................................... 3  Modulación de amplitud de pulso (PAM) ........................................................... 3  MATLAB ............................................................................................................ 6  Codigo Fuente del Programa ............................................................................ 6 COMO FUNCIONA EL PROGRAMA GUIDE ................................................................ 15 CONCLUSIONES.......................................................................................................... 26 BIBLIOGRAFIA ............................................................................................................. 27 ii INTRODUCCIÓN. La modulación de señales es un concepto fundamental en comunicaciones, y consiste en usar una señal base para modificar las propiedades de una portadora. Este tipo de modulación la cual codificada de señal analógica - digital es denominada PAM. La señal PAM es una señal de banda lateral doble de modo que se requiere dos veces el ancho de banda requerida para la transmisión banda base. Esta manera de modulación de la señal no es más que recoger la señal analógica, la muestrea a su vez generando una serie de pulsos. Este ciclo es muy eficiente para transmisión de datos. Una de las características de la modulación por codificación de pulsos es esencialmente es que la amplitud de pulsos es cuantizada y representada por un patrón binario. En este documento se presenta el desarrollo de un programa en matlab para generar señales PAM, de funciones deterministicas y aleatorias como pude ser el audio compuesto por múltiples frecuencias. Además como encontraremos en el cuerpo de este documento, se utilizaran las señales deterministicas para enumerar cada una de las propiedades del muestreo y el teorema de Nyquist, para la recuperación de una señal original en base a un conjunto de muestras capturado. 1 OBJETIVOS  Investigar la teoría necesaria, para construir señales moduladas por amplitud de pulso.  Desarrollar un software en Matlab para la generación de señales PAM.  Investigar las terminologías de señales deterministicas y aleatorias, que son los tipos de señales que se van a procesar.  Analizar las gráficas obtenidas y dar interpretación de los resultados.  Respaldar lo aprendido en clases, sobre modulación de amplitud de pulso, con el desarrollo realizado en este documento. 2 MARCO TEÓRICO. Modulación de amplitud de pulso (PAM) Es una de las modulaciones digitales. Esta técnica recoge información analógica, (la muestra ó la prueba), y genera una serie de pulsos basados en los resultados de la prueba. El término prueba se refiere a la medida de la amplitud de la señal a intervalos iguales. El método de prueba usado en PAM es más eficaz en otras áreas de ingeniería que en la comunicación de datos (informática). Aunque PAM está en la base de un importante método de codificación analógica - digital llamado modulación de código de pulso (PCM). En PAM, la señal original se muestrea a intervalos iguales, PAM usa una técnica llamada probada y tomada. En un momento dado el nivel de la señal es leído y retenido brevemente. El valor mostrado sucede solamente de modo instantáneo a la forma actual de la onda, pero es generalizada por un periodo todavía corto pero medible en el resultado de PAM. La modulación por amplitud de pulso modifica una señal de banda base, al tomar un conjunto de muestras de una señal que contiene la información tal como se ve en las fig.1 y fig.2, en la cual la señal que se muestra en color rojo representa la señal mensaje y el tren de pulsos es la señal generadora de las muestras PAM. 3 Fig 1. Principio de la modulación por amplitud de pulsos (PAM); (1) Señal original, (2) SeñalPAM, (a) Amplitud de la señal, (b) Tiempo Fig 2. Primero Señales Deterministas 4 La idea básica de la modulación por pulsos se fundamenta en el concepto de que es posible recuperar completamente una señal analógica desde algunas muestras de ella. Esto sucede siempre y cuando la cantidad de muestras sea la suficiente para la cantidad de información que se desea recuperar. Estos conceptos se fundamentan en el “Teorema del Muestreo” de Nyquist que permite determinar la cantidad de muestras o velocidad de muestreo para cualquier señal que se pretenda recuperar. Transmitir muestras en lugar de señales analógicas completas nos lleva a una gran ventaja, la información está contenida en la amplitud del impulso sin que la duración del impulso tenga importancia. Del párrafo anterior se desprende que la relación señal / ruido tiende a mejorar debido a que, en términos estadísticos, el ruido afectara menos al tren de pulsos que a la señal completa. Otra de las ventajas importantes de la transmisión de Impulsos, es que entre pulso y pulso de una misma señal analógica existe tiempo ocioso del canal de transmisión; esto indica que por un mismo canal físico podrán enviarse varias señales diferentes. Recuperación de una señal de las muestras tomadas de la original. 5 MATLAB El objeto básico usado en MATLAB es una matriz numérica con la posibilidad de almacenar números complejos. Los datos encontrados en el estudio de señales y sistemas son siempre, muy bien representados en forma de matrices. En esta sección se usará MATLAB para la generación de señales elementales como lo son las señales exponenciales, sinodales, etc. En MATLAB una señal discreta en el tiempo se representa exactamente, porque los valores de la señal son representados como los elementos de un vector. Sin embargo las señales de tiempo continuo en MATLAB son tan solo aproximaciones. La aproximación consiste de un vector cuyos elementos son muestras de la verdadera señal de tiempo continuo. Cuando se usa esta técnica para la representación de señales continuas es importante escoger el intervalo de muestreo lo suficientemente pequeño para asegurar que las muestras capturan todos los detalles de la señal. Código Fuente del Programa El código fuente de este programa se realizo utilizando la herramienta de interfaz grafica proporcionada por Matlab la cual se llama GUIDE. Esta herramienta nos genera un código base el cual tiene que ver con la interfaz grafica de usuario. El código que genera el procesamiento de las señales se va introduciendo en cada uno de los segmentos de función provistos por el programa base tal como se muestra en el siguiente código que representa la totalidad del programa que genera todo el procesamiento de señales que se nos piden. function varargout = buenoPAM(varargin) % BUENOPAM M-file for buenoPAM.fig % BUENOPAM, by itself, creates a new BUENOPAM or raises the existing % singleton*. % % H = BUENOPAM returns the handle to a new BUENOPAM or the handle to % the existing singleton*. % % BUENOPAM('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in BUENOPAM.M with the given input arguments. % 6 % BUENOPAM('Property','Value',...) creates a new BUENOPAM or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before buenoPAM_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to buenoPAM_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help buenoPAM % Last Modified by GUIDE v2.5 15-Sep-2011 11:52:17 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @buenoPAM_OpeningFcn, ... 'gui_OutputFcn', @buenoPAM_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before buenoPAM is made visible. function buenoPAM_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to buenoPAM (see VARARGIN) % Choose default command line output for buenoPAM handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes buenoPAM wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = buenoPAM_OutputFcn(hObject, eventdata, handles) 7 % % % % varargout hObject eventdata handles cell array for returning output args (see VARARGOUT); handle to figure reserved - to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% GRAFICO UNO %%%%%%%%%%%%%%%%%%%%%%%%%% function intro1_Callback(hObject, eventdata, handles) % hObject handle to intro1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of intro1 as text % str2double(get(hObject,'String')) returns contents of intro1 as a double % --- Executes during object creation, after setting all properties. function intro1_CreateFcn(hObject, eventdata, handles) % hObject handle to intro1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function intro2_Callback(hObject, eventdata, handles) % hObject handle to intro2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of intro2 as text % str2double(get(hObject,'String')) returns contents of intro2 as a double % --- Executes during object creation, after setting all properties. function intro2_CreateFcn(hObject, eventdata, handles) % hObject handle to intro2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. 8 % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function intro3_Callback(hObject, eventdata, handles) % hObject handle to intro3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of intro3 as text % str2double(get(hObject,'String')) returns contents of intro3 as a double % --- Executes during object creation, after setting all properties. function intro3_CreateFcn(hObject, eventdata, handles) % hObject handle to intro3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end %%%%%%%%%%%%%%%%%%%%%%%%% -HASTS AQUI LOS TRES INTRO Y EL PANEL %%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%% - DE LA SENAL SENOIDAL- %%%%%%%%%%%%%%%%%%%%% function intro5_Callback(hObject, eventdata, handles) % hObject handle to intro5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of intro5 as text % str2double(get(hObject,'String')) returns contents of intro5 as a double % --- Executes during object creation, after setting all properties. function intro5_CreateFcn(hObject, eventdata, handles) % hObject handle to intro5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. 9 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function intro4_Callback(hObject, eventdata, handles) % hObject handle to intro4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of intro4 as text % str2double(get(hObject,'String')) returns contents of intro4 as a double % --- Executes during object creation, after setting all properties. function intro4_CreateFcn(hObject, eventdata, handles) % hObject handle to intro4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end %%%%%%%%%%%%%%%%%%%%%%%%% -HASTS AQUI LOS TRES INTRO Y EL PANEL %%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%% - DE LA SENAL CUADRADA- %%%%%%%%%%%%%%%%%%%%% % --- Executes when selected object is changed in uipanel3. function uipanel3_SelectionChangeFcn(hObject, eventdata, handles) if hObject == handles.radio1 valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor2=get(handles.intro2,'String'); ffs=str2num(valor2);% Convertir de char a num. valor3=get(handles.intro3,'String'); xmax=str2num(valor3);% Convertir de char a num. valor4=get(handles.intro4,'String'); N=str2num(valor4);% Convertir de char a num. % Grafica en la Opción 1 t = (0:1/fs:N/fs); y = sin(2*pi*ffs*t); % esta es la Señal deterministica plot(handles.fig1,t,y,'linewidth',2); set(handles.fig1, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 xmax*(1/ffs)],'Ylim',[-1.5 1.5]); elseif hObject == handles.radio2 10 set(handles.salida,'String','tiempo [s]'); valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor5=get(handles.intro5,'String'); FP=str2num(valor5);% Convertir de char a num. valor3=get(handles.intro3,'String'); muestras=str2num(valor3);% Convertir de char a num. [x FS nbit]=wavread('bueno'); N=length(x) t = (0:1/fs:(N-1)/fs); plot(handles.fig1,t,x,'linewidth',2); set(handles.fig1, 'xgrid', 'on' , 'ygrid', 'on'); periodo=(fs/FP); a=[1 zeros(1,periodo) -1]; d=[1 zeros(1,N-1)]; tren=filter(1,a,d); tren=tren'; mul=x.*tren; %n = (0:(N-1)); stem(handles.fig2,t,mul,'g','linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 15],'Ylim',[-1 1]); sound(x,fs); pause(16); sound(mul,fs); y=fft(x,1024); a=abs(y)*2/512; f=fs*(1:512)/1024; db=20*log(a); %figure(1) %plot(f,db(1:512));title('Espectro de la Señal ORIGIANAL'),grid %xlabel('Frecuencia [Hz]');ylabel('Joule'); end %%%%%%%%%%%%%%%%%%%%%% -PARA EL PRIMER PAR DE RADIO BOTTONS- %%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % --- Executes when selected object is changed in uipanel4. function uipanel4_SelectionChangeFcn(hObject, eventdata, handles) if hObject == handles.radio3 set(handles.salida,'String','Muestra / Periodo'); valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor2=get(handles.intro2,'String'); ffs=str2num(valor2);% Convertir de char a num. valor3=get(handles.intro3,'String'); xmax=str2num(valor3);% Convertir de char a num. valor5=get(handles.intro5,'String'); FP=str2num(valor5);% Convertir de char a num. 11 valor4=get(handles.intro4,'String'); N=str2num(valor4);% Convertir de char a num. % Grafica de la senal y el pulso t = (0:(N-1)); y = sin(2*pi*ffs/fs*t); % esta es la Señal deterministica periodo=(fs/FP); a=[1 zeros(1,periodo) -1]; d=[1 zeros(1,N)]; tren=filter(1,a,d); n=1:(N+1); plot(handles.fig2,t,y,n,tren,'linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 xmax*(fs/ffs)],'Ylim',[-1.5 1.5]); sound(y,fs); elseif hObject == handles.radio4 set(handles.salida,'String','Frecuencia [Hz]'); valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor2=get(handles.intro2,'String'); ffs=str2num(valor2);% Convertir de char a num. valor4=get(handles.intro4,'String'); N=str2num(valor4);% Convertir de char a num. % Grafica del espectro de la senal t = (0:1/fs:N/fs); y = sin(2*pi*ffs*t); % esta es la Señal deterministica a=fft(y,1024); b=abs(a)/512; f1=fs*(1:512)/1024; plot(handles.fig2,f1,b(1:512),'g','linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 7000]); elseif hObject == handles.radio5 set(handles.salida,'String','Muestra / Periodo'); valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor2=get(handles.intro2,'String'); ffs=str2num(valor2);% Convertir de char a num. valor3=get(handles.intro3,'String'); xmax=str2num(valor3);% Convertir de char a num. valor5=get(handles.intro5,'String'); FP=str2num(valor5);% Convertir de char a num. valor4=get(handles.intro4,'String'); N=str2num(valor4);% Convertir de char a num. %Generacion de la Senal PAM t = (0:(N)); y = sin(2*pi*ffs/fs*t); % esta es la Señal deterministica periodo=(fs/FP); a=[1 zeros(1,periodo) -1]; d=[1 zeros(1,N)]; tren=filter(1,a,d); mul=y.*tren; 12 stem(handles.fig2,t,mul,'g','linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 xmax*(fs/ffs)],'Ylim',[-1.5 1.5]); sound(mul,fs); elseif hObject == handles.radio6 set(handles.salida,'String','Frecuencia [Hz]'); valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor2=get(handles.intro2,'String'); ffs=str2num(valor2);% Convertir de char a num. valor4=get(handles.intro4,'String'); N=str2num(valor4);% Convertir de char a num. valor5=get(handles.intro5,'String'); FP=str2num(valor5);% Convertir de char a num. t = (0:(N)); y = sin(2*pi*ffs/fs*t); % esta es la Señal deterministica periodo=(fs/FP); a=[1 zeros(1,periodo) -1]; d=[1 zeros(1,N)]; tren=filter(1,a,d); n=1:(N+1); mul=y.*tren; a=fft(mul,1024); b=abs(a)/512; f1=fs*(1:512)/1024; plot(handles.fig2,f1,b(1:512),'g','linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 7000]); end % --- Executes on slider movement. function slider2_Callback(hObject, eventdata, handles) % hObject handle to slider2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'Value') returns position of slider % get(hObject,'Min') and get(hObject,'Max') to determine range of slider % --- Executes during object creation, after setting all properties. function slider2_CreateFcn(hObject, eventdata, handles) % hObject handle to slider2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: slider controls usually have a light gray background. if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); 13 end % --- Executes on slider movement. function deslis1_Callback(hObject, eventdata, handles) set(handles.salida,'String','tiempo [s]'); valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor5=get(handles.intro5,'String'); FP=str2num(valor5);% Convertir de char a num. valor3=get(handles.intro3,'String'); muestras=str2num(valor3);% Convertir de char a num. [x FS nbit]=wavread('bueno'); v=get(handles.deslis1,'Value') N=length(x) t = (0:1/fs:(N-1)/fs); plot(handles.fig1,t,x,'linewidth',2); set(handles.fig1, 'xgrid', 'on' , 'ygrid', 'on'); periodo=(fs/FP); a=[1 zeros(1,periodo) -1]; d=[1 zeros(1,N-1)]; tren=filter(1,a,d); tren=tren'; mul=x.*tren; %n = (0:(N-1)); stem(handles.fig2,t,mul,'g','linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[v (16.01v)],'Ylim',[-1 1]); % --- Executes during object creation, after setting all properties. function deslis1_CreateFcn(hObject, eventdata, handles) % hObject handle to deslis1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: slider controls usually have a light gray background. if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end % --- Executes when selected object is changed in uipanel5. function uipanel5_SelectionChangeFcn(hObject, eventdata, handles) if hObject == handles.radio7 set(handles.salida,'String','Frecuencia [Hz]'); valor1=get(handles.intro1,'String'); 14 fs=str2num(valor1);% Convertir de char a num. valor5=get(handles.intro5,'String'); FP=str2num(valor5);% Convertir de char a num. [x FS nbit]=wavread('bueno'); y=fft(x,1024); a=abs(y); f=fs*(1:512)/1024; db=20*log(a); plot(handles.fig2,f,a(1:512),'g','linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 fs/2]); elseif hObject == handles.radio8 set(handles.salida,'String','Frecuencia [Hz]'); valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor2=get(handles.intro2,'String'); ffs=str2num(valor2);% Convertir de char a num. valor5=get(handles.intro5,'String'); FP=str2num(valor5);% Convertir de char a num. [x FS nbit]=wavread('bueno'); N=length(x) periodo=(fs/FP); a=[1 zeros(1,periodo) -1]; d=[1 zeros(1,N-1)]; tren=filter(1,a,d); length(tren) x=x'; mul=x.*tren; a=fft(mul,1024); b=abs(a); f1=fs*(1:512)/1024; plot(handles.fig2,f1,b(1:512),'g','linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 fs/2]); end COMO FUNCIONA EL PROGRAMA GUIDE Tal como dijimos en la sección anterior el código fuente presentado genera una interfaz grafica, que grafica cualquier señal deterministica y una señal aleatoria especifica única, de acuerdo a un archivo de audio grabado, que contiene el mensaje “ Esta es la tarea de Comunicaciones”. La interfaz grafica es la que se presenta a continuación. 15 Parámetros la señal deterministica: Este conjunto de datos a introducir, representan las características de la señal a graficar, en cuanto a la velocidad de la señal la resolución de esta y los periodos que queremos desplegar en cada uno de los graficadores. Fs: Es la frecuencia de muestreo para formar la señal analogía, que entre más grande mejor se aproxima a las características de la señal requerida. F : Es la frecuencia de la señal mensaje, que en este caso será una deterministica. El ultimo campo solo nos dice cuantos veces queremos repetir la señal periódica a graficar, que solo actúa para la señal deterministica. Este par de campos actúan tanto para la señal muestreadora que es un tren de impulsos como par la señal deterministica tal como se detalla para cada uno de ellos: 16 P: Es el número de puntos que queremos tomar de la señal deterministica para mostrar en los graficadores, de tal manera que si la Fs es igual que P se estará graficando para un segundo de tiempo. Este parámetro actúa tanto para la señal del tren de pulsos como para la señal deterministica. F: Es la frecuencia de la señal muestreadora, de tal manera que si esta frecuencia coincide con la del mensaje el programa estará tomando una muestra de la señal que contiene la información. Que para nuestro caso funge como la frecuencia de muestreo para la generación de muestras PAM. Los Group Botton no necesitan descripción alguna pues se detalla en la interfaz grafica de usuario, y cualquier persona con el conocimiento mínimo de procesamiento de señales conocerá su funcionamiento con solo observar la GUIDE. ZOOM: este actúa solo para la señal aleatoria, el cual proporciona una acercamiento a un grupo de muestras identificado. Para un optimo funcionamiento en este caso se desarrollaron las señales PAM solo utilizando señales deterministicas cosenoidales. La versión de Matlab con la que trabaja este código es la 7.10 (R2010a), se recomiendo no usar otra versión distinta para conservar los resultados expuestos en este documento. 17 GENERACIÓN DE SEÑALES PAM. Para el desarrollo de generación de señales PAM se trabajara sobre un periodo de la señal mensaje, y una frecuencia de muestreo alta para mejorar la cercanía a una señal continua construida, que difiere de la frecuencia de muestreo de captura de datos generada con el tren de impulsos. Cumpliendo lo pedido con el perfil de la tarea, construimos una señal con las siguientes características: Señal de 300 Hz Fm = 300 Hz F(pulso) = 900Hz Fs = 44100 Hz ; que será la frecuencia de muestreo. ; esta es la frecuencia de muestreo pero para dibujar las graficas. El resultado es lo siguiente: Se muestra la señal mensaje, y la señal mensaje con la función muestreadora. 18 Tal como se esperaba el espectro de la señal original esta en los 300 Hz. En esta grafica se presentan las tres muestras, con una de ellas de cero, por el hecho que la señal mensaje pasa por cero en el momento de tomar la muestra. Tomando en cuenta que estamos muestreando al triple de la frecuencia de señal mensaje. 19 Para una Señal de 1000 Hz Fm = 1000 Hz F(pulso) = 3000Hz Fs = 100900 Hz graficas. ; que será la frecuencia de muestreo. ; esta es la frecuencia de muestreo pero para dibujar las El resultado es lo siguiente: Se muestra la señal mensaje, y la señal mensaje con la función muestreadora. Hay que considerar que para todos los casos estaremos tomando 3 muestras de la señal mensaje lo cual equivale a tener una frecuencia de muestreo del tren de impulsos del triple de la señal deterministica cosenoidal. 20 Tal como se esperaba el espectro de la señal original esta en los 1000 Hz. En esta grafica se presentan las tres muestras, con una de ellas de cero, por el hecho que la señal mensaje pasa por cero en el momento de tomar la muestra. Tomando en cuenta que estamos muestreando al triple de la frecuencia de señal mensaje. 21 Para una Señal de 5000 Hz Fm = 1000 Hz F(pulso) = 50000Hz Fs = 100900 Hz graficas. ; que será la frecuencia de muestreo. ; esta es la frecuencia de muestreo pero para dibujar las El resultado es lo siguiente: Se muestra la señal mensaje, y la señal mensaje con la función muestreadora. De la grafica que muestra la señal mensaje superpuesta al tren muestreador, se puede observar que las muestras son tomadas con una de ellas siendo cero, esto se debe a que cuando el pulso aparece la señal mensaje pasa por cero. 22 Tal como se esperaba el espectro de la señal original esta en los 5000 Hz. Prácticamente sigue siendo la misma representación anterior, por el simple hecho de estar utilizando la misma frecuencia de muestreo. 23 Y como se puede observar el espectro de la señal PAM se mantiene como en la señal original, cuando te muestrea a una frecuencia mayor al doble de la frecuencia de la señal mensaje. Después de haber analizado una señal tan básica como una senoidal periódica, al transformar una señal de audio compuesta, a una señal pan se obtiene el siguiente resultado. 24 Haciendo un acercamiento a la señal muestreada, esto es lo que se observa: La cual representa un conjunto de muestras espaciadas en el tiempo que es el objetivo del muestreo PAM. La grafica anterior nos muestra que el ancho de banda de la señal es de aproximadamente 5kHz. 25 CONCLUSIONES Al finalizar este informe se pudo comprobar la modulación por pulsos PAM, se observo que los valores de la modulación PAM eran exactamente proporcional a los valores de la señal de información, también su valor tomado con el espectrómetro, esto se debe básicamente a que al hacer el muestreo, gracias a la señal de pulsos incorporada, mantenía sus valores, solamente, como su nombre lo indica sacaba muestras a la señal de información y lo transportaba o modulaba a la señal PAM final. De lo que se pudo comprobar con el desarrollo de este proyecto es que después de efectuado el muestreó, una señal se puede recuperar siempre y cuando esta se haya obtenido con una frecuencia de muestreo del doble de la señal mensaje por lo menos, de lo contrario si esta es menor existe un solapamiento de espectros de frecuencias producidas por la modulación, y la señal original contiene otras frecuencias diferentes a la de la señal original y por lo tanto no es posible filtrar la señal para recuperarla. 26 BIBLIOGRAFÍA Wikipedia.org Señales y Sistemas segunda edición, Oppenheim Sistemas de comunicaciones cuarta edición, Bruce Carlson 27
Please download to view
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
...

PAM

by fe-pa

on

Report

Category:

Documents

Download: 0

Comment: 0

3

views

Comments

Description

Download PAM

Transcript

TAREA #2 GENERACION DE SEÑALES PAM i ÍNDICE INTRODUCCION. ........................................................................................................... 1 OBJETIVOS .................................................................................................................... 2 MARCO TEORICO.......................................................................................................... 3  Modulación de amplitud de pulso (PAM) ........................................................... 3  MATLAB ............................................................................................................ 6  Codigo Fuente del Programa ............................................................................ 6 COMO FUNCIONA EL PROGRAMA GUIDE ................................................................ 15 CONCLUSIONES.......................................................................................................... 26 BIBLIOGRAFIA ............................................................................................................. 27 ii INTRODUCCIÓN. La modulación de señales es un concepto fundamental en comunicaciones, y consiste en usar una señal base para modificar las propiedades de una portadora. Este tipo de modulación la cual codificada de señal analógica - digital es denominada PAM. La señal PAM es una señal de banda lateral doble de modo que se requiere dos veces el ancho de banda requerida para la transmisión banda base. Esta manera de modulación de la señal no es más que recoger la señal analógica, la muestrea a su vez generando una serie de pulsos. Este ciclo es muy eficiente para transmisión de datos. Una de las características de la modulación por codificación de pulsos es esencialmente es que la amplitud de pulsos es cuantizada y representada por un patrón binario. En este documento se presenta el desarrollo de un programa en matlab para generar señales PAM, de funciones deterministicas y aleatorias como pude ser el audio compuesto por múltiples frecuencias. Además como encontraremos en el cuerpo de este documento, se utilizaran las señales deterministicas para enumerar cada una de las propiedades del muestreo y el teorema de Nyquist, para la recuperación de una señal original en base a un conjunto de muestras capturado. 1 OBJETIVOS  Investigar la teoría necesaria, para construir señales moduladas por amplitud de pulso.  Desarrollar un software en Matlab para la generación de señales PAM.  Investigar las terminologías de señales deterministicas y aleatorias, que son los tipos de señales que se van a procesar.  Analizar las gráficas obtenidas y dar interpretación de los resultados.  Respaldar lo aprendido en clases, sobre modulación de amplitud de pulso, con el desarrollo realizado en este documento. 2 MARCO TEÓRICO. Modulación de amplitud de pulso (PAM) Es una de las modulaciones digitales. Esta técnica recoge información analógica, (la muestra ó la prueba), y genera una serie de pulsos basados en los resultados de la prueba. El término prueba se refiere a la medida de la amplitud de la señal a intervalos iguales. El método de prueba usado en PAM es más eficaz en otras áreas de ingeniería que en la comunicación de datos (informática). Aunque PAM está en la base de un importante método de codificación analógica - digital llamado modulación de código de pulso (PCM). En PAM, la señal original se muestrea a intervalos iguales, PAM usa una técnica llamada probada y tomada. En un momento dado el nivel de la señal es leído y retenido brevemente. El valor mostrado sucede solamente de modo instantáneo a la forma actual de la onda, pero es generalizada por un periodo todavía corto pero medible en el resultado de PAM. La modulación por amplitud de pulso modifica una señal de banda base, al tomar un conjunto de muestras de una señal que contiene la información tal como se ve en las fig.1 y fig.2, en la cual la señal que se muestra en color rojo representa la señal mensaje y el tren de pulsos es la señal generadora de las muestras PAM. 3 Fig 1. Principio de la modulación por amplitud de pulsos (PAM); (1) Señal original, (2) SeñalPAM, (a) Amplitud de la señal, (b) Tiempo Fig 2. Primero Señales Deterministas 4 La idea básica de la modulación por pulsos se fundamenta en el concepto de que es posible recuperar completamente una señal analógica desde algunas muestras de ella. Esto sucede siempre y cuando la cantidad de muestras sea la suficiente para la cantidad de información que se desea recuperar. Estos conceptos se fundamentan en el “Teorema del Muestreo” de Nyquist que permite determinar la cantidad de muestras o velocidad de muestreo para cualquier señal que se pretenda recuperar. Transmitir muestras en lugar de señales analógicas completas nos lleva a una gran ventaja, la información está contenida en la amplitud del impulso sin que la duración del impulso tenga importancia. Del párrafo anterior se desprende que la relación señal / ruido tiende a mejorar debido a que, en términos estadísticos, el ruido afectara menos al tren de pulsos que a la señal completa. Otra de las ventajas importantes de la transmisión de Impulsos, es que entre pulso y pulso de una misma señal analógica existe tiempo ocioso del canal de transmisión; esto indica que por un mismo canal físico podrán enviarse varias señales diferentes. Recuperación de una señal de las muestras tomadas de la original. 5 MATLAB El objeto básico usado en MATLAB es una matriz numérica con la posibilidad de almacenar números complejos. Los datos encontrados en el estudio de señales y sistemas son siempre, muy bien representados en forma de matrices. En esta sección se usará MATLAB para la generación de señales elementales como lo son las señales exponenciales, sinodales, etc. En MATLAB una señal discreta en el tiempo se representa exactamente, porque los valores de la señal son representados como los elementos de un vector. Sin embargo las señales de tiempo continuo en MATLAB son tan solo aproximaciones. La aproximación consiste de un vector cuyos elementos son muestras de la verdadera señal de tiempo continuo. Cuando se usa esta técnica para la representación de señales continuas es importante escoger el intervalo de muestreo lo suficientemente pequeño para asegurar que las muestras capturan todos los detalles de la señal. Código Fuente del Programa El código fuente de este programa se realizo utilizando la herramienta de interfaz grafica proporcionada por Matlab la cual se llama GUIDE. Esta herramienta nos genera un código base el cual tiene que ver con la interfaz grafica de usuario. El código que genera el procesamiento de las señales se va introduciendo en cada uno de los segmentos de función provistos por el programa base tal como se muestra en el siguiente código que representa la totalidad del programa que genera todo el procesamiento de señales que se nos piden. function varargout = buenoPAM(varargin) % BUENOPAM M-file for buenoPAM.fig % BUENOPAM, by itself, creates a new BUENOPAM or raises the existing % singleton*. % % H = BUENOPAM returns the handle to a new BUENOPAM or the handle to % the existing singleton*. % % BUENOPAM('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in BUENOPAM.M with the given input arguments. % 6 % BUENOPAM('Property','Value',...) creates a new BUENOPAM or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before buenoPAM_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to buenoPAM_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help buenoPAM % Last Modified by GUIDE v2.5 15-Sep-2011 11:52:17 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @buenoPAM_OpeningFcn, ... 'gui_OutputFcn', @buenoPAM_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before buenoPAM is made visible. function buenoPAM_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to buenoPAM (see VARARGIN) % Choose default command line output for buenoPAM handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes buenoPAM wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = buenoPAM_OutputFcn(hObject, eventdata, handles) 7 % % % % varargout hObject eventdata handles cell array for returning output args (see VARARGOUT); handle to figure reserved - to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% GRAFICO UNO %%%%%%%%%%%%%%%%%%%%%%%%%% function intro1_Callback(hObject, eventdata, handles) % hObject handle to intro1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of intro1 as text % str2double(get(hObject,'String')) returns contents of intro1 as a double % --- Executes during object creation, after setting all properties. function intro1_CreateFcn(hObject, eventdata, handles) % hObject handle to intro1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function intro2_Callback(hObject, eventdata, handles) % hObject handle to intro2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of intro2 as text % str2double(get(hObject,'String')) returns contents of intro2 as a double % --- Executes during object creation, after setting all properties. function intro2_CreateFcn(hObject, eventdata, handles) % hObject handle to intro2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. 8 % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function intro3_Callback(hObject, eventdata, handles) % hObject handle to intro3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of intro3 as text % str2double(get(hObject,'String')) returns contents of intro3 as a double % --- Executes during object creation, after setting all properties. function intro3_CreateFcn(hObject, eventdata, handles) % hObject handle to intro3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end %%%%%%%%%%%%%%%%%%%%%%%%% -HASTS AQUI LOS TRES INTRO Y EL PANEL %%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%% - DE LA SENAL SENOIDAL- %%%%%%%%%%%%%%%%%%%%% function intro5_Callback(hObject, eventdata, handles) % hObject handle to intro5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of intro5 as text % str2double(get(hObject,'String')) returns contents of intro5 as a double % --- Executes during object creation, after setting all properties. function intro5_CreateFcn(hObject, eventdata, handles) % hObject handle to intro5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. 9 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function intro4_Callback(hObject, eventdata, handles) % hObject handle to intro4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of intro4 as text % str2double(get(hObject,'String')) returns contents of intro4 as a double % --- Executes during object creation, after setting all properties. function intro4_CreateFcn(hObject, eventdata, handles) % hObject handle to intro4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end %%%%%%%%%%%%%%%%%%%%%%%%% -HASTS AQUI LOS TRES INTRO Y EL PANEL %%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%% - DE LA SENAL CUADRADA- %%%%%%%%%%%%%%%%%%%%% % --- Executes when selected object is changed in uipanel3. function uipanel3_SelectionChangeFcn(hObject, eventdata, handles) if hObject == handles.radio1 valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor2=get(handles.intro2,'String'); ffs=str2num(valor2);% Convertir de char a num. valor3=get(handles.intro3,'String'); xmax=str2num(valor3);% Convertir de char a num. valor4=get(handles.intro4,'String'); N=str2num(valor4);% Convertir de char a num. % Grafica en la Opción 1 t = (0:1/fs:N/fs); y = sin(2*pi*ffs*t); % esta es la Señal deterministica plot(handles.fig1,t,y,'linewidth',2); set(handles.fig1, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 xmax*(1/ffs)],'Ylim',[-1.5 1.5]); elseif hObject == handles.radio2 10 set(handles.salida,'String','tiempo [s]'); valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor5=get(handles.intro5,'String'); FP=str2num(valor5);% Convertir de char a num. valor3=get(handles.intro3,'String'); muestras=str2num(valor3);% Convertir de char a num. [x FS nbit]=wavread('bueno'); N=length(x) t = (0:1/fs:(N-1)/fs); plot(handles.fig1,t,x,'linewidth',2); set(handles.fig1, 'xgrid', 'on' , 'ygrid', 'on'); periodo=(fs/FP); a=[1 zeros(1,periodo) -1]; d=[1 zeros(1,N-1)]; tren=filter(1,a,d); tren=tren'; mul=x.*tren; %n = (0:(N-1)); stem(handles.fig2,t,mul,'g','linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 15],'Ylim',[-1 1]); sound(x,fs); pause(16); sound(mul,fs); y=fft(x,1024); a=abs(y)*2/512; f=fs*(1:512)/1024; db=20*log(a); %figure(1) %plot(f,db(1:512));title('Espectro de la Señal ORIGIANAL'),grid %xlabel('Frecuencia [Hz]');ylabel('Joule'); end %%%%%%%%%%%%%%%%%%%%%% -PARA EL PRIMER PAR DE RADIO BOTTONS- %%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % --- Executes when selected object is changed in uipanel4. function uipanel4_SelectionChangeFcn(hObject, eventdata, handles) if hObject == handles.radio3 set(handles.salida,'String','Muestra / Periodo'); valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor2=get(handles.intro2,'String'); ffs=str2num(valor2);% Convertir de char a num. valor3=get(handles.intro3,'String'); xmax=str2num(valor3);% Convertir de char a num. valor5=get(handles.intro5,'String'); FP=str2num(valor5);% Convertir de char a num. 11 valor4=get(handles.intro4,'String'); N=str2num(valor4);% Convertir de char a num. % Grafica de la senal y el pulso t = (0:(N-1)); y = sin(2*pi*ffs/fs*t); % esta es la Señal deterministica periodo=(fs/FP); a=[1 zeros(1,periodo) -1]; d=[1 zeros(1,N)]; tren=filter(1,a,d); n=1:(N+1); plot(handles.fig2,t,y,n,tren,'linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 xmax*(fs/ffs)],'Ylim',[-1.5 1.5]); sound(y,fs); elseif hObject == handles.radio4 set(handles.salida,'String','Frecuencia [Hz]'); valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor2=get(handles.intro2,'String'); ffs=str2num(valor2);% Convertir de char a num. valor4=get(handles.intro4,'String'); N=str2num(valor4);% Convertir de char a num. % Grafica del espectro de la senal t = (0:1/fs:N/fs); y = sin(2*pi*ffs*t); % esta es la Señal deterministica a=fft(y,1024); b=abs(a)/512; f1=fs*(1:512)/1024; plot(handles.fig2,f1,b(1:512),'g','linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 7000]); elseif hObject == handles.radio5 set(handles.salida,'String','Muestra / Periodo'); valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor2=get(handles.intro2,'String'); ffs=str2num(valor2);% Convertir de char a num. valor3=get(handles.intro3,'String'); xmax=str2num(valor3);% Convertir de char a num. valor5=get(handles.intro5,'String'); FP=str2num(valor5);% Convertir de char a num. valor4=get(handles.intro4,'String'); N=str2num(valor4);% Convertir de char a num. %Generacion de la Senal PAM t = (0:(N)); y = sin(2*pi*ffs/fs*t); % esta es la Señal deterministica periodo=(fs/FP); a=[1 zeros(1,periodo) -1]; d=[1 zeros(1,N)]; tren=filter(1,a,d); mul=y.*tren; 12 stem(handles.fig2,t,mul,'g','linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 xmax*(fs/ffs)],'Ylim',[-1.5 1.5]); sound(mul,fs); elseif hObject == handles.radio6 set(handles.salida,'String','Frecuencia [Hz]'); valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor2=get(handles.intro2,'String'); ffs=str2num(valor2);% Convertir de char a num. valor4=get(handles.intro4,'String'); N=str2num(valor4);% Convertir de char a num. valor5=get(handles.intro5,'String'); FP=str2num(valor5);% Convertir de char a num. t = (0:(N)); y = sin(2*pi*ffs/fs*t); % esta es la Señal deterministica periodo=(fs/FP); a=[1 zeros(1,periodo) -1]; d=[1 zeros(1,N)]; tren=filter(1,a,d); n=1:(N+1); mul=y.*tren; a=fft(mul,1024); b=abs(a)/512; f1=fs*(1:512)/1024; plot(handles.fig2,f1,b(1:512),'g','linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 7000]); end % --- Executes on slider movement. function slider2_Callback(hObject, eventdata, handles) % hObject handle to slider2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'Value') returns position of slider % get(hObject,'Min') and get(hObject,'Max') to determine range of slider % --- Executes during object creation, after setting all properties. function slider2_CreateFcn(hObject, eventdata, handles) % hObject handle to slider2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: slider controls usually have a light gray background. if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); 13 end % --- Executes on slider movement. function deslis1_Callback(hObject, eventdata, handles) set(handles.salida,'String','tiempo [s]'); valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor5=get(handles.intro5,'String'); FP=str2num(valor5);% Convertir de char a num. valor3=get(handles.intro3,'String'); muestras=str2num(valor3);% Convertir de char a num. [x FS nbit]=wavread('bueno'); v=get(handles.deslis1,'Value') N=length(x) t = (0:1/fs:(N-1)/fs); plot(handles.fig1,t,x,'linewidth',2); set(handles.fig1, 'xgrid', 'on' , 'ygrid', 'on'); periodo=(fs/FP); a=[1 zeros(1,periodo) -1]; d=[1 zeros(1,N-1)]; tren=filter(1,a,d); tren=tren'; mul=x.*tren; %n = (0:(N-1)); stem(handles.fig2,t,mul,'g','linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[v (16.01v)],'Ylim',[-1 1]); % --- Executes during object creation, after setting all properties. function deslis1_CreateFcn(hObject, eventdata, handles) % hObject handle to deslis1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: slider controls usually have a light gray background. if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end % --- Executes when selected object is changed in uipanel5. function uipanel5_SelectionChangeFcn(hObject, eventdata, handles) if hObject == handles.radio7 set(handles.salida,'String','Frecuencia [Hz]'); valor1=get(handles.intro1,'String'); 14 fs=str2num(valor1);% Convertir de char a num. valor5=get(handles.intro5,'String'); FP=str2num(valor5);% Convertir de char a num. [x FS nbit]=wavread('bueno'); y=fft(x,1024); a=abs(y); f=fs*(1:512)/1024; db=20*log(a); plot(handles.fig2,f,a(1:512),'g','linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 fs/2]); elseif hObject == handles.radio8 set(handles.salida,'String','Frecuencia [Hz]'); valor1=get(handles.intro1,'String'); fs=str2num(valor1);% Convertir de char a num. valor2=get(handles.intro2,'String'); ffs=str2num(valor2);% Convertir de char a num. valor5=get(handles.intro5,'String'); FP=str2num(valor5);% Convertir de char a num. [x FS nbit]=wavread('bueno'); N=length(x) periodo=(fs/FP); a=[1 zeros(1,periodo) -1]; d=[1 zeros(1,N-1)]; tren=filter(1,a,d); length(tren) x=x'; mul=x.*tren; a=fft(mul,1024); b=abs(a); f1=fs*(1:512)/1024; plot(handles.fig2,f1,b(1:512),'g','linewidth',2); set(handles.fig2, 'xgrid', 'on' , 'ygrid', 'on','Xlim',[0 fs/2]); end COMO FUNCIONA EL PROGRAMA GUIDE Tal como dijimos en la sección anterior el código fuente presentado genera una interfaz grafica, que grafica cualquier señal deterministica y una señal aleatoria especifica única, de acuerdo a un archivo de audio grabado, que contiene el mensaje “ Esta es la tarea de Comunicaciones”. La interfaz grafica es la que se presenta a continuación. 15 Parámetros la señal deterministica: Este conjunto de datos a introducir, representan las características de la señal a graficar, en cuanto a la velocidad de la señal la resolución de esta y los periodos que queremos desplegar en cada uno de los graficadores. Fs: Es la frecuencia de muestreo para formar la señal analogía, que entre más grande mejor se aproxima a las características de la señal requerida. F : Es la frecuencia de la señal mensaje, que en este caso será una deterministica. El ultimo campo solo nos dice cuantos veces queremos repetir la señal periódica a graficar, que solo actúa para la señal deterministica. Este par de campos actúan tanto para la señal muestreadora que es un tren de impulsos como par la señal deterministica tal como se detalla para cada uno de ellos: 16 P: Es el número de puntos que queremos tomar de la señal deterministica para mostrar en los graficadores, de tal manera que si la Fs es igual que P se estará graficando para un segundo de tiempo. Este parámetro actúa tanto para la señal del tren de pulsos como para la señal deterministica. F: Es la frecuencia de la señal muestreadora, de tal manera que si esta frecuencia coincide con la del mensaje el programa estará tomando una muestra de la señal que contiene la información. Que para nuestro caso funge como la frecuencia de muestreo para la generación de muestras PAM. Los Group Botton no necesitan descripción alguna pues se detalla en la interfaz grafica de usuario, y cualquier persona con el conocimiento mínimo de procesamiento de señales conocerá su funcionamiento con solo observar la GUIDE. ZOOM: este actúa solo para la señal aleatoria, el cual proporciona una acercamiento a un grupo de muestras identificado. Para un optimo funcionamiento en este caso se desarrollaron las señales PAM solo utilizando señales deterministicas cosenoidales. La versión de Matlab con la que trabaja este código es la 7.10 (R2010a), se recomiendo no usar otra versión distinta para conservar los resultados expuestos en este documento. 17 GENERACIÓN DE SEÑALES PAM. Para el desarrollo de generación de señales PAM se trabajara sobre un periodo de la señal mensaje, y una frecuencia de muestreo alta para mejorar la cercanía a una señal continua construida, que difiere de la frecuencia de muestreo de captura de datos generada con el tren de impulsos. Cumpliendo lo pedido con el perfil de la tarea, construimos una señal con las siguientes características: Señal de 300 Hz Fm = 300 Hz F(pulso) = 900Hz Fs = 44100 Hz ; que será la frecuencia de muestreo. ; esta es la frecuencia de muestreo pero para dibujar las graficas. El resultado es lo siguiente: Se muestra la señal mensaje, y la señal mensaje con la función muestreadora. 18 Tal como se esperaba el espectro de la señal original esta en los 300 Hz. En esta grafica se presentan las tres muestras, con una de ellas de cero, por el hecho que la señal mensaje pasa por cero en el momento de tomar la muestra. Tomando en cuenta que estamos muestreando al triple de la frecuencia de señal mensaje. 19 Para una Señal de 1000 Hz Fm = 1000 Hz F(pulso) = 3000Hz Fs = 100900 Hz graficas. ; que será la frecuencia de muestreo. ; esta es la frecuencia de muestreo pero para dibujar las El resultado es lo siguiente: Se muestra la señal mensaje, y la señal mensaje con la función muestreadora. Hay que considerar que para todos los casos estaremos tomando 3 muestras de la señal mensaje lo cual equivale a tener una frecuencia de muestreo del tren de impulsos del triple de la señal deterministica cosenoidal. 20 Tal como se esperaba el espectro de la señal original esta en los 1000 Hz. En esta grafica se presentan las tres muestras, con una de ellas de cero, por el hecho que la señal mensaje pasa por cero en el momento de tomar la muestra. Tomando en cuenta que estamos muestreando al triple de la frecuencia de señal mensaje. 21 Para una Señal de 5000 Hz Fm = 1000 Hz F(pulso) = 50000Hz Fs = 100900 Hz graficas. ; que será la frecuencia de muestreo. ; esta es la frecuencia de muestreo pero para dibujar las El resultado es lo siguiente: Se muestra la señal mensaje, y la señal mensaje con la función muestreadora. De la grafica que muestra la señal mensaje superpuesta al tren muestreador, se puede observar que las muestras son tomadas con una de ellas siendo cero, esto se debe a que cuando el pulso aparece la señal mensaje pasa por cero. 22 Tal como se esperaba el espectro de la señal original esta en los 5000 Hz. Prácticamente sigue siendo la misma representación anterior, por el simple hecho de estar utilizando la misma frecuencia de muestreo. 23 Y como se puede observar el espectro de la señal PAM se mantiene como en la señal original, cuando te muestrea a una frecuencia mayor al doble de la frecuencia de la señal mensaje. Después de haber analizado una señal tan básica como una senoidal periódica, al transformar una señal de audio compuesta, a una señal pan se obtiene el siguiente resultado. 24 Haciendo un acercamiento a la señal muestreada, esto es lo que se observa: La cual representa un conjunto de muestras espaciadas en el tiempo que es el objetivo del muestreo PAM. La grafica anterior nos muestra que el ancho de banda de la señal es de aproximadamente 5kHz. 25 CONCLUSIONES Al finalizar este informe se pudo comprobar la modulación por pulsos PAM, se observo que los valores de la modulación PAM eran exactamente proporcional a los valores de la señal de información, también su valor tomado con el espectrómetro, esto se debe básicamente a que al hacer el muestreo, gracias a la señal de pulsos incorporada, mantenía sus valores, solamente, como su nombre lo indica sacaba muestras a la señal de información y lo transportaba o modulaba a la señal PAM final. De lo que se pudo comprobar con el desarrollo de este proyecto es que después de efectuado el muestreó, una señal se puede recuperar siempre y cuando esta se haya obtenido con una frecuencia de muestreo del doble de la señal mensaje por lo menos, de lo contrario si esta es menor existe un solapamiento de espectros de frecuencias producidas por la modulación, y la señal original contiene otras frecuencias diferentes a la de la señal original y por lo tanto no es posible filtrar la señal para recuperarla. 26 BIBLIOGRAFÍA Wikipedia.org Señales y Sistemas segunda edición, Oppenheim Sistemas de comunicaciones cuarta edición, Bruce Carlson 27
Fly UP