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 Werner Meléndez
ALUMNOS: Fuentes Quintanilla, Tony Edwin
FQ01002
CIUDAD UNIVERSITARIA, UNIVERSITARIA, Martes 20 de diciembre del 2011. 2011.
Sistemas de Comunicaciones I
TEMA:
Modulación FM utilizando utilizando Matlab
La modulación FM utilizando matlab se da cuando se escriben programas que permitan visualizar de manera clara la forma de comportamiento de una señal que será trasportada por medio de una señal portadora variando el ángulo de desfase de esta última, recordemos que existen tres tipos de modulación analogía, la modulación AM, la modulación PM y la modulación FM. La modulación FM básicamente consiste en variar el ángulo de fase de la portadora con un valor correspondiente a la razón de cambio del mensaje. Dicho cambio proporciona una alteración en la fase de la portadora. portadora. Una cantidad importante importante es el índice de modulación de fase o desviación de fase que es análoga al índice de modulación en las modulaciones AM comercial y representa la máximo desplazamiento de f(t) en relación con la frecuencia portadora fc portadora fc.. En la Figura 1 se muestra el entorno de trabajo para la modulación FM. Consta de simples botones que al hacer hacer click sobre sobre cualquiera de ellos nos nos muestra las las graficas correspondientes a cualquier forma forma de onda; las cuales pueden pueden ser, la señal original, la señal portadora, la señal modulada, la señal demodulada y hacer una comparación entre la señal de entrada y la señal de salida. Dichas formas de onda se muestran al pasar datos de entrada. La amplitud de la señal mensaje y su frecuencia, la amplitud y frecuencia de la señal portadora y la desviación de fase.
Figura 1: Entorno de Trabajo para modulación FM
Tarea # 5 Modulación FM utilizando Matlab “
”
Sistemas de Comunicaciones I
Funcionamiento:
Como primer argumento para la modulación FM se necesita un mensaje, el mensaje puede ser cualquier señal, ya sea determinística o aleatoria. En este caso será una señal determinística cosenoidal con frecuencia de interés para el caso de 100 Hz y amplitud unitaria; como se indica en la figura 2.
Figura 2: señal 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 señal mensaje. Estos datos se pueden variar al pasar nuevos argumentos a la entrada de datos de la señal mensaje. La señal portadora, debe de poseer una frecuencia mucho mayor que la señal mensaje, en este caso se tendrá una portadora de 1000 Hz o 1 Khz. Que resultara en una señal como se ve en la de la figura 3.
Figura 3: portadora con frecuencia de 1000Hz. Tarea # 5 Modulación FM utilizando Matlab “
”
Sistemas de Comunicaciones I
A simple vista parece que ambas señales fueran iguales, pero si se observa con detalle se aprecia que la frecuencia y el espectro cambian en una razón de 10, es decir, la portadora tendrá una frecuencia 10 veces mayor. Al modular ambas señales se obtendrán los resultados que se muestran en la figura 4. Para este caso es necesario introducir el dato de la desviación de fase. Este parámetro es importante porque se ve cuando el ancho de banda de una señal cambia desde banda angosta hasta banda ancha. En señales de banda angosta la modulación se parece mucho a la modulación de amplitud. Aquí, es interesante ver que el ancho de banda cambia al variar la desviación de fase.
Figura 4: modulación con valor de cero en la desviación de fase.
Cuando la desviacion de fase es cero, no hay alteracion en la señal portadora y es igual a la portadora original, figura 4. La señal demodulada se ve en la figura 5, observamos que cuando la desviacion de fase es cero, la señal no se parece en nada al mensaje original y lo que se tiene es ruido ya que su amplitud es muy pequeña.
Figura 5. Señal recuperada con desviacion de fase de valor cero Tarea # 5 Modulación FM utilizando Matlab “
”
Sistemas de Comunicaciones I
Al hacer una comparacion de la señal recuperada con el mensaje, se llega a la comclusion que la amplitud de la señal recuperada es muy pequeña, 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 Modulación FM utilizando Matlab “
”
Sistemas de Comunicaciones I
Figura 7. Valor optimo Además, el ancho de banda varía a menudo que se incrementa la desviación de fase.
Graficas con Valores distintos de Desviación de fase
Desviación de Fase igual a 0.01.
Tarea # 5 Modulación FM utilizando Matlab “
”
Sistemas de Comunicaciones I
Desviación de Fase con valor de 0.02
Desviación de Fase con valor de 0.03
Tarea # 5 Modulación FM utilizando Matlab “
”
Sistemas de Comunicaciones I
Desviación de Fase con valor de 0.05
Tarea # 5 Modulación FM utilizando Matlab “
”
Sistemas de Comunicaciones I
Desviación de Fase con valor de 0.06
Desviación de Fase con valor de 0.07
Tarea # 5 Modulación FM utilizando Matlab “
”
Sistemas de Comunicaciones I
Desviación de Fase Fase con valor de 0.1
Tarea # 5 Modulación 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 según Nyquist fm=80000; %Frecuencia de muesreo según 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); %División de tiempo para recolectar L muestras 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 Modulación 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 Modulación 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 Modulación FM utilizando Matlab “
”
Sistemas de Comunicaciones I
global n; global t1; global M; global f; A=handles.am; F=handles.fm; %Se genera la señal a modular Am=A; %Amplitud de la señal a modular wm=2*pi*F; %Frecuencia de la señal a modular phi=0; %Fase de la señal a modular mt=Am*cos(wm*n+phi); %Señal a modular axes(handles.axes1) plot(n,mt,'linewidth', 3, 'color', 'black') title('Dominio del tiempo de la señal mensaje'); xlabel('Tiempo [S]'); ylabel('Amplitud m(t) '); texto=strcat('mensaje de ', num2str(F), 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 señal 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)); %Cálculo de las componentes de fase de la señal axes(handles.axes2) plot(f,abs(Y1)/norm1,'linewidth', 3, 'color', 'black'); legend('Espectro de m(t)'); title('Espectro continuo en magnitud de la señal 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 Modulación FM utilizando Matlab “
”
Sistemas de Comunicaciones I
global t1; global M; global f; A=handles.ap; F=handles.fp; Ac=A; %Amplitud de la señal portadora wc=2*pi*F; %Frecuencia de la señal portadora st=Ac*cos(wc*n); %Señal FM axes(handles.axes1) plot(n,st,'linewidth',3, 'color', 'black') title('Dominio del tiempo de señal portadora'); xlabel('Tiempo [S]'); ylabel('Amplitud de c(t)'); texto=strcat('portadora de de ', num2str(F), 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 señal 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)); %Cálculo de las componentes de fase de la señal axes(handles.axes2) plot(f,abs(Y1)/norm1, 'linewidth', 3, 'color', 'black'); title('Espectro continuo en magnitud de la señal 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 Modulación FM utilizando Matlab “
”
Sistemas de Comunicaciones I
A2=handles.ap; F2=handles.fp; Am=A; %Amplitud de la señal a modular wm=2*pi*F; %Frecuencia de la señal a modular phi=0; %Fase de la señal a modular mt=Am*cos(wm*n+phi); %Señal a modular %Parametros necesarios para la modulación FM beta=inm; %Indice de modulación kw=beta*wm/Am; %Desviación de frecuencia phi=-pi/2; %Se desfasa la señal mt1=Am*cos(wm*n+phi); %Se utiliza la señal original para generar el desf=beta*mt1; %Desfase de la portadora %Se genera la señal FM Ac=A2; %Amplitud de la señal portadora wc=2*pi*F2; %Frecuencia de la señal portadora st=Ac*cos(wc*n+desf); %Señal FM indk=beta; gfm = modulate(mt,wc/(2*pi),fm,' modulate(mt,wc/(2*pi),fm,'fm',indk); fm',indk); axes(handles.axes1) plot(n,gfm,'linewidth', 3, 'color', 'black'); title('Señal FM resultante a partir de m(t)'); xlabel('Tiempo [S]'); ylabel('s(t)'); texto=strcat('señal modulada con beta = ', num2str(beta)); legend(texto ); grid on; %¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ Y1=fft(gfm,Nfft); %FFT de Nfft puntos para la señal 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)); %Cálculo de las componentes de fase de la señal axes(handles.axes2) plot(f,abs(Y1)/norm1, 'linewidth', 3, 'color', 'black'); title('Espectro continuo en magnitud de la señal 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 Modulación 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 señal a modular wm=2*pi*F; %Frecuencia de la señal a modular phi=0; %Fase de la señal a modular mt=Am*cos(wm*n+phi); %Señal a modular %Parametros necesarios para la modulación FM beta=inm; %Indice de modulación kw=beta*wm/Am; %Desviación de frecuencia phi=-pi/2; %Se desfasa la señal mt1=Am*cos(wm*n+phi); %Se utiliza la señal original para generar el desf=beta*mt1; %Desfase de la portadora %Se genera la señal FM Ac=A2; %Amplitud de la señal portadora wc=2*pi*F2; %Frecuencia de la señal portadora st=Ac*cos(wc*n+desf); %Señal FM indk=beta; gfm = modulate(mt,wc/(2*pi),fm,' modulate(mt,wc/(2*pi),fm,'fm',indk); fm',indk); rmt1=5*demod(gfm,wc/(2*pi),fm,'fm'); axes(handles.axes1) plot(n,rmt1, 'linewidth', 3, 'color', 'black'); title('Señal FM generada a partir de m(t)'); xlabel('Tiempo[S]'); ylabel('s(t)'); legend('Señal Recuperada'); grid on; %¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ Y1=fft(rmt1,Nfft); %FFT de Nfft puntos para la señal 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)); %Cálculo de las componentes de fase de la señal axes(handles.axes2) plot(f,abs(Y1)/norm1, 'linewidth', 3, 'color', 'black'); title('Espectro continuo en magnitud de la señal portadora'); xlabel('Frecuencia (Hz)'); ylabel('Magnitud normalizada |FFT|'); legend('Espectro de señal recuperada'); xlim([-35*F 35*F]); Tarea # 5 Modulación 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 señal a modular wm=2*pi*F; %Frecuencia de la señal a modular phi=0; %Fase de la señal a modular mt=Am*cos(wm*n+phi); %Señal a modular %Parametros necesarios para la modulación FM beta=inm; %Indice de modulación kw=beta*wm/Am; %Desviación de frecuencia phi=-pi/2; %Se desfasa la señal mt1=Am*cos(wm*n+phi); %Se utiliza la señal original para generar el desf=beta*mt1; %Desfase de la portadora %Se genera la señal FM Ac=A2; %Amplitud de la señal portadora wc=2*pi*F2; %Frecuencia de la señal portadora st=Ac*cos(wc*n+desf); %Señal FM indk=beta; gfm = modulate(mt,wc/(2*pi),fm,' modulate(mt,wc/(2*pi),fm,'fm',indk); fm',indk); rmt1=27*demod(gfm,wc/(2*pi),fm,'fm'); axes(handles.axes1) plot(n,mt, 'linewidth', 3, 'color', 'black'); title('Señal Original vrs Señal demodulafa'); xlabel('Tiempo [S]'); ylabel('s(t)'); legend('Señal Original'); grid on; axes(handles.axes2) plot(n, rmt1, 'linewidth', 3, 'color', 'blue'); title('Señal FM generada a partir de m(t)'); xlabel('Tiempo[s]'); ylabel('s(t)'); Tarea # 5 Modulación FM utilizando Matlab “
”
Sistemas de Comunicaciones I
legend('Señal Recuperada'); grid on;
Tarea # 5 Modulación FM utilizando Matlab “
”