Está en la página 1de 19

UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA ESCUELA DE INGENIERIA ELECTRICA SISTEMAS DE COMUNICACIONES I CICLO II - 2011

TAREA #5 MODULACION FM UTILIZANDO MATLAB

CATEDRATICO: Ing. Werner Melndez

ALUMNOS: Fuentes Quintanilla, Tony Edwin FQ01002

CIUDAD UNIVERSITARIA, Martes 20 de diciembre del 2011.

Sistemas de Comunicaciones I

TEMA: Modulacin FM utilizando Matlab

La modulacin FM utilizando matlab se da cuando se escriben programas que permitan visualizar de manera clara la forma de comportamiento de una seal que ser trasportada por medio de una seal portadora variando el ngulo de desfase de esta ltima, recordemos que existen tres tipos de modulacin analoga, la modulacin AM, la modulacin PM y la modulacin FM. La modulacin FM bsicamente consiste en variar el ngulo de fase de la portadora con un valor correspondiente a la razn de cambio del mensaje. Dicho cambio proporciona una alteracin en la fase de la portadora. Una cantidad importante es el ndice de modulacin de fase o desviacin de fase que es anloga al ndice de modulacin en las modulaciones AM comercial y representa la mximo desplazamiento de f(t) en relacin con la frecuencia portadora fc. En la Figura 1 se muestra el entorno de trabajo para la modulacin FM. Consta de simples botones que al hacer click sobre cualquiera de ellos nos muestra las graficas correspondientes a cualquier forma de onda; las cuales pueden ser, la seal original, la seal portadora, la seal modulada, la seal demodulada y hacer una comparacin entre la seal de entrada y la seal de salida. Dichas formas de onda se muestran al pasar datos de entrada. La amplitud de la seal mensaje y su frecuencia, la amplitud y frecuencia de la seal portadora y la desviacin de fase.

Figura 1: Entorno de Trabajo para modulacin FM

Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

Funcionamiento:

Como primer argumento para la modulacin FM se necesita un mensaje, el mensaje puede ser cualquier seal, ya sea determinstica o aleatoria. En este caso ser una seal determinstica cosenoidal con frecuencia de inters para el caso de 100 Hz y amplitud unitaria; como se indica en la figura 2.

Figura 2: seal mensaje con frecuencia de 100Hz. Como se puede apreciar en la figura 2, al pasar dichos datos al entorno de trabajo, mostrara la grafica en el dominio del tiempo y en el dominio de la frecuencia de la seal mensaje. Estos datos se pueden variar al pasar nuevos argumentos a la entrada de datos de la seal mensaje. La seal portadora, debe de poseer una frecuencia mucho mayor que la seal mensaje, en este caso se tendr una portadora de 1000 Hz o 1 Khz. Que resultara en una seal como se ve en la de la figura 3.

Figura 3: portadora con frecuencia de 1000Hz. Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

A simple vista parece que ambas seales fueran iguales, pero si se observa con detalle se aprecia que la frecuencia y el espectro cambian en una razn de 10, es decir, la portadora tendr una frecuencia 10 veces mayor. Al modular ambas seales se obtendrn los resultados que se muestran en la figura 4. Para este caso es necesario introducir el dato de la desviacin de fase. Este parmetro es importante porque se ve cuando el ancho de banda de una seal cambia desde banda angosta hasta banda ancha. En seales de banda angosta la modulacin se parece mucho a la modulacin de amplitud. Aqu, es interesante ver que el ancho de banda cambia al variar la desviacin de fase.

Figura 4: modulacin con valor de cero en la desviacin de fase. Cuando la desviacion de fase es cero, no hay alteracion en la seal portadora y es igual a la portadora original, figura 4. La seal demodulada se ve en la figura 5, observamos que cuando la desviacion de fase es cero, la seal no se parece en nada al mensaje original y lo que se tiene es ruido ya que su amplitud es muy pequea.

Figura 5. Seal recuperada con desviacion de fase de valor cero Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

Al hacer una comparacion de la seal recuperada con el mensaje, se llega a la comclusion que la amplitud de la seal recuperada es muy pequea, Figura 6.

Figura 6. Comparacion entre la entrada con la salida Al hacer una serie de pruebas se llega al valor de la desviacion de fase que mejor recupera el mensaje figura 7.

Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

Figura 7. Valor optimo Adems, el ancho de banda vara a menudo que se incrementa la desviacin de fase.

Graficas con Valores distintos de Desviacin de fase Desviacin de Fase igual a 0.01.

Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

Desviacin de Fase con valor de 0.02

Desviacin de Fase con valor de 0.03

Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

Desviacin de Fase con valor de 0.05

Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

Desviacin de Fase con valor de 0.06

Desviacin de Fase con valor de 0.07

Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

Desviacin de Fase con valor de 0.1

Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

ANEXO. CODIGO FUENTE function varargout = FMM(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @FMM_OpeningFcn, ... 'gui_OutputFcn', @FMM_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin & isstr(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 %================================================================== function FMM_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); global L_medio; %Mitad de la cantidad de muestras a recolectar L_medio=1000; global Nfft; %Cantidad de puntos para calcular la FFT Nfft=2048; global fm; %Frecuencia de muesreo segn Nyquist fm=80000; %Frecuencia de muesreo segn Nyquist global treq; %Tiempo requerido para recolectar L muestras treq=2*L_medio/fm; %Tiempo requerido para recolectar L muestras global fs; fs=((2*L_medio-1)/treq); %Divisin de tiempo para recolectar L muestras global n; %Vector de muestras a recolectar n=0:1/fs:treq; global t1; %Vector en cantidad de muestras recolectadas t1=0:length(n)-1; %Vector de frecuencias para los espectros en frecuencia global M; M=Nfft/2; faux(M+1:Nfft)=0:M-1; %Vector de frecuencias desordenado faux(1:M)=-M:-1; %Vector de frecuencias ordenado global f; Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

f=fm*faux/(Nfft); %Vector de frecuencias normalizado x=0; axes(handles.axes1) plot(n,x) title('Dominio del tiempo'); xlabel('Tiempo [S]'); AXIS([0 0.006 -1 1]) set(handles.axes1,'XMinorTick','on') grid on axes(handles.axes2) plot(f,x) title('Domininio del la Frecuencia'); xlabel('Frecuencia [Hz]'); AXIS([0 2000 0 1]) set(handles.axes2,'XMinorTick','on') grid on %================================================================== function varargout = FMM_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; %================================================================== function am_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end %================================================================== function am_Callback(hObject, eventdata, handles) Val=get(hObject,'String'); NewVal = str2double(Val); handles.am=NewVal; guidata(hObject,handles); %================================================================== function fm_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end %================================================================== function fm_Callback(hObject, eventdata, handles) Val=get(hObject,'String'); NewVal = str2double(Val); handles.fm=NewVal; guidata(hObject,handles);

Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

%================================================================== function ap_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end %================================================================== function ap_Callback(hObject, eventdata, handles) Val=get(hObject,'String'); NewVal = str2double(Val); handles.ap=NewVal; guidata(hObject,handles); %================================================================== function fp_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end %================================================================== function fp_Callback(hObject, eventdata, handles) Val=get(hObject,'String'); NewVal = str2double(Val); handles.fp=NewVal; guidata(hObject,handles); %================================================================== function im_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end %================================================================== function im_Callback(hObject, eventdata, handles) Val=get(hObject,'String'); NewVal = str2double(Val); handles.im=NewVal; guidata(hObject,handles); %================================================================== function psmensaje_Callback(hObject, eventdata, handles) global L_medio; global Nfft; global fm; global treq; global fs; Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

global n; global t1; global M; global f; A=handles.am; F=handles.fm; %Se genera la seal a modular Am=A; %Amplitud de la seal a modular wm=2*pi*F; %Frecuencia de la seal a modular phi=0; %Fase de la seal a modular mt=Am*cos(wm*n+phi); %Seal a modular axes(handles.axes1) plot(n,mt,'linewidth', 3, 'color', 'black') title('Dominio del tiempo de la seal mensaje'); xlabel('Tiempo [S]'); ylabel('Amplitud m(t) '); texto=strcat('mensaje de ', num2str(F), 'Hz'); legend(texto); AXIS([0 2*(1/F) -A A]); set(handles.axes1,'XMinorTick','on') grid on %************************************************************************** Y1=fft(mt,Nfft); %FFT de Nfft puntos para la seal FM Y1=fftshift(Y1); %Reordenamiento de los valores de la FFT length(Y1); norm1=max(abs(Y1)); %Para normalizar el espectro en magnitud Yf1=unwrap(angle(Y1)); %Clculo de las componentes de fase de la seal axes(handles.axes2) plot(f,abs(Y1)/norm1,'linewidth', 3, 'color', 'black'); legend('Espectro de m(t)'); title('Espectro continuo en magnitud de la seal mensaje'); xlabel('Frecuencia (Hz)'); ylabel('Magnitud normalizada |FFT|'); legend('Espectro Mensaje m(t)'); xlim([-8*F 8*F]); grid on; %================================================================== function psportadora_Callback(hObject, eventdata, handles) global L_medio; global Nfft; global fm; global treq; global fs; global n; Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

global t1; global M; global f; A=handles.ap; F=handles.fp; Ac=A; %Amplitud de la seal portadora wc=2*pi*F; %Frecuencia de la seal portadora st=Ac*cos(wc*n); %Seal FM axes(handles.axes1) plot(n,st,'linewidth',3, 'color', 'black') title('Dominio del tiempo de seal portadora'); xlabel('Tiempo [S]'); ylabel('Amplitud de c(t)'); texto=strcat('portadora de ', num2str(F), 'Hz'); legend(texto); AXIS([0 2*(1/F) -A A]) set(handles.axes1,'XMinorTick','on') grid on %************************************************************************** Y1=fft(st,Nfft); %FFT de Nfft puntos para la seal FM Y1=fftshift(Y1); %Reordenamiento de los valores de la FFT norm1=max(abs(Y1)); %Para normalizar el espectro en magnitud Yf1=unwrap(angle(Y1)); %Clculo de las componentes de fase de la seal axes(handles.axes2) plot(f,abs(Y1)/norm1, 'linewidth', 3, 'color', 'black'); title('Espectro continuo en magnitud de la seal portadora'); xlabel('Frecuencia (Hz)'); ylabel('Magnitud normalizada |FFT|'); legend('Espectro Portadora c(t)'); xlim([-8*F 8*F]); grid on; %************************************************************************** function pssmodulada_Callback(hObject, eventdata, handles) global L_medio; global Nfft; global fm; global treq; global fs; global n; global t1; global M; global f; A=handles.am; F=handles.fm; inm=handles.im; Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

A2=handles.ap; F2=handles.fp; Am=A; %Amplitud de la seal a modular wm=2*pi*F; %Frecuencia de la seal a modular phi=0; %Fase de la seal a modular mt=Am*cos(wm*n+phi); %Seal a modular %Parametros necesarios para la modulacin FM beta=inm; %Indice de modulacin kw=beta*wm/Am; %Desviacin de frecuencia phi=-pi/2; %Se desfasa la seal mt1=Am*cos(wm*n+phi); %Se utiliza la seal original para generar el desf=beta*mt1; %Desfase de la portadora %Se genera la seal FM Ac=A2; %Amplitud de la seal portadora wc=2*pi*F2; %Frecuencia de la seal portadora st=Ac*cos(wc*n+desf); %Seal FM indk=beta; gfm = modulate(mt,wc/(2*pi),fm,'fm',indk); axes(handles.axes1) plot(n,gfm,'linewidth', 3, 'color', 'black'); title('Seal FM resultante a partir de m(t)'); xlabel('Tiempo [S]'); ylabel('s(t)'); texto=strcat('seal modulada con beta = ', num2str(beta)); legend(texto ); grid on; % Y1=fft(gfm,Nfft); %FFT de Nfft puntos para la seal FM Y1=fftshift(Y1); %Reordenamiento de los valores de la FFT norm1=max(abs(Y1)); %Para normalizar el espectro en magnitud Yf1=unwrap(angle(Y1)); %Clculo de las componentes de fase de la seal axes(handles.axes2) plot(f,abs(Y1)/norm1, 'linewidth', 3, 'color', 'black'); title('Espectro continuo en magnitud de la seal resultante FM'); xlabel('Frecuencia (Hz)'); ylabel('Magnitud normalizada |FFT|'); legend('Espectro FM'); xlim([-35*F 35*F]); grid on; function pssdmodulada_Callback(hObject, eventdata, handles) global L_medio; global Nfft; global fm; global treq; global fs; Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

global n; global t1; global M; global f; A=handles.am; F=handles.fm; inm=handles.im; A2=handles.ap; F2=handles.fp; Am=A; %Amplitud de la seal a modular wm=2*pi*F; %Frecuencia de la seal a modular phi=0; %Fase de la seal a modular mt=Am*cos(wm*n+phi); %Seal a modular %Parametros necesarios para la modulacin FM beta=inm; %Indice de modulacin kw=beta*wm/Am; %Desviacin de frecuencia phi=-pi/2; %Se desfasa la seal mt1=Am*cos(wm*n+phi); %Se utiliza la seal original para generar el desf=beta*mt1; %Desfase de la portadora %Se genera la seal FM Ac=A2; %Amplitud de la seal portadora wc=2*pi*F2; %Frecuencia de la seal portadora st=Ac*cos(wc*n+desf); %Seal FM indk=beta; gfm = modulate(mt,wc/(2*pi),fm,'fm',indk); rmt1=5*demod(gfm,wc/(2*pi),fm,'fm'); axes(handles.axes1) plot(n,rmt1, 'linewidth', 3, 'color', 'black'); title('Seal FM generada a partir de m(t)'); xlabel('Tiempo[S]'); ylabel('s(t)'); legend('Seal Recuperada'); grid on; % Y1=fft(rmt1,Nfft); %FFT de Nfft puntos para la seal FM Y1=fftshift(Y1); %Reordenamiento de los valores de la FFT norm1=max(abs(Y1)); %Para normalizar el espectro en magnitud Yf1=unwrap(angle(Y1)); %Clculo de las componentes de fase de la seal axes(handles.axes2) plot(f,abs(Y1)/norm1, 'linewidth', 3, 'color', 'black'); title('Espectro continuo en magnitud de la seal portadora'); xlabel('Frecuencia (Hz)'); ylabel('Magnitud normalizada |FFT|'); legend('Espectro de seal recuperada'); xlim([-35*F 35*F]); Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

grid on; function pushbutton5_Callback(hObject, eventdata, handles) global L_medio; global Nfft; global fm; global treq; global fs; global n; global t1; global M; global f; A=handles.am; F=handles.fm; inm=handles.im; A2=handles.ap; F2=handles.fp; Am=A; %Amplitud de la seal a modular wm=2*pi*F; %Frecuencia de la seal a modular phi=0; %Fase de la seal a modular mt=Am*cos(wm*n+phi); %Seal a modular %Parametros necesarios para la modulacin FM beta=inm; %Indice de modulacin kw=beta*wm/Am; %Desviacin de frecuencia phi=-pi/2; %Se desfasa la seal mt1=Am*cos(wm*n+phi); %Se utiliza la seal original para generar el desf=beta*mt1; %Desfase de la portadora %Se genera la seal FM Ac=A2; %Amplitud de la seal portadora wc=2*pi*F2; %Frecuencia de la seal portadora st=Ac*cos(wc*n+desf); %Seal FM indk=beta; gfm = modulate(mt,wc/(2*pi),fm,'fm',indk); rmt1=27*demod(gfm,wc/(2*pi),fm,'fm'); axes(handles.axes1) plot(n,mt, 'linewidth', 3, 'color', 'black'); title('Seal Original vrs Seal demodulafa'); xlabel('Tiempo [S]'); ylabel('s(t)'); legend('Seal Original'); grid on; axes(handles.axes2) plot(n, rmt1, 'linewidth', 3, 'color', 'blue'); title('Seal FM generada a partir de m(t)'); xlabel('Tiempo[s]'); ylabel('s(t)'); Tarea # 5 Modulacin FM utilizando Matlab

Sistemas de Comunicaciones I

legend('Seal Recuperada'); grid on;

Tarea # 5 Modulacin FM utilizando Matlab