Está en la página 1de 11

INSTITUTO POLITÉCNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA


UNIDAD PROFESIONAL CULHUACÁN

INGENIERÍA EN COMPUTACIÓN

GRUPO 6CM23
MODULACIÓN DIGITAL
TURNO MATUTINO

Practica 1, primer departamental:


Generador de funciones en MATLAB

Equipo 3

INTEGRANTES:

 Gutiérrez Meléndez Jazmín


 Reyes Palma Néstor Alan
 Zerecero Guerrero Jonathan Omar
Introducción:

Un generador de señales, de funciones o de formas de onda es un dispositivo


electrónico de laboratorio que genera patrones de señales periódicas o no
periódicas tanto analógicas como digitales.

Una señal es un suceso que sirve para comenzar una acción o al menos es
capaz de iniciarla, es decir, puede incitar a la acción.

Elementos básicos de una señal:

- Amplitud (A): La amplitud es el valor máximo, tanto positivo como


negativo, que puede llegar a adquirir la onda.
- Frecuencia (ω): Es el número de oscilaciones que una onda efectúa en
un determinado intervalo de tiempo. El número de ciclos por segundo se
llama hercio (Hz) y es la unidad con la cual se mide la frecuencia.
- Fase (θ): Es el momento o punto en el que dos señales se encuentran en
un instante determinado. Cada punto de una onda posee una fase
definida que indica cuánto ha avanzado dicho punto a través del ciclo
básico de la onda.

La forma básica de una función cosenoidal con los elementos antes


mencionados
Objetivo:

Con ayuda de algún lenguaje programación, diseñar un generador de funciones


virtual, con la opción de modificar: amplitud, fase, frecuencia y tiempo de la señal
que el usuario desee generar

Desarrollo:

Usando el IDE de MATLAB se crean variables encargadas de almacenar los


datos que requiere la señal (tiempo, frecuencia, amplitud, frecuencia y fase). Y
algunas variables predefinidas como “pi” (con valor de 3.14159265), que
posteriormente se usarán como parámetros de entrada de funciones del propio IDE
(por cuestiones de practicidad), como lo son: “sin”, “cos”, “square” y “sawtooth” para
los tipos de señal que podrá seleccionar el usuario y “plot” para graficar los datos
obtenidos con respecto al tiempo y de este modo visualizar la gráfica deseada.

Con ayuda de los datos introducidos por el usuario se hacen los cálculos
pertinentes para introducirse a las funciones como parámetros como la frecuencia
angular (2*pi*frecuencia* tiempo), que ayuda a visualizar el No. De periodos
deseados de la señal. Entre otros que se deben considerar como la frecuencia de
muestreo entre otros.

Posteriormente se grafican dichos datos. Además de apoyarse de la facilidad


con la que en ese IDE se pueden generar Interfaces Gráficas de Usuario para así
hacer más intuitivo el uso de este generador de funciones virtual, como se podrá
apreciar más adelante.
Código:

function varargout = Generador_funciones_Interfaz(varargin)


% GENERADOR_FUNCIONES_INTERFAZ MATLAB code for
Generador_funciones_Interfaz.fig
% Last Modified by GUIDE v2.5 20-Aug-2018 12:15:42

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn',
@Generador_funciones_Interfaz_OpeningFcn, ...
'gui_OutputFcn', @Generador_funciones_Interfaz_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 Generador_funciones_Interfaz is made visible.


function Generador_funciones_Interfaz_OpeningFcn(hObject, eventdata,
handles, varargin)

% Choose default command line output for Generador_funciones_Interfaz


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

% --- Outputs from this function are returned to the command line.
function varargout = Generador_funciones_Interfaz_OutputFcn(hObject,
eventdata, handles)

% Get default command line output from handles structure


varargout{1} = handles.output;
function ciclos_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties.


function ciclos_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),


get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function fase_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties.


function fase_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),


get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function frecuencia_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties.


function frecuencia_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% __________________________ FUNCION SENO


_________________________________
function fseno_Callback(hObject, eventdata, handles)
global A c fa f R %Variables globales para
controlar los datos de la función
hold off %Elimina la gráfica anterior
fs = 30*f; %Frecuencia de muestreo a
30 muestras por ciclo
ciclo=c; %Obtiene el número de
ciclos deseados
nciclos=(1/f)*ciclo; %Genera el número de
ciclos
v = 0 : 1/fs : nciclos; %Vector del tiempo que
va desde 0 con pasos de 1/10000 hasta t
Z=zeros(size(v)) %Vector de zeros para
trazar línea roja
fsin=A*sin((2*pi*f*v)+R); %Genera la señal
seno
axes(handles.axes1); %Elige el axes de la
interfaz
plot(v, fsin); %y grafica la función
xlabel('TIEMPO [seg]'); %Etiqueta de tiempo
ylabel('AMPLITUD [V]'); %Etiqueta de
amplitudplot(v,fsin); %y grafica la función
grid on %Marca los cuadros del
plano para visualizar mejor la gráfica
hold on %Mantiene la línea roja y la
gráfica en el mismo plano
plot(v, Z, 'r'); %Traza la línea roja

% ________________________ FUNCION COSENO


_________________________________
function fcoseno_Callback(hObject, eventdata, handles)
global A c fa f R %Variables globales para
controlar los datos de la función
hold off %Elimina la gráfica anterior
fs = 30*f; %Frecuencia de muestreo a
30 muestras por ciclo
ciclo=c; %Obtiene el número de
ciclos deseados
nciclos=(1/f)*ciclo; %Genera el número de
ciclos
v = 0 : 1/fs : nciclos; %Vector del tiempo que
va desde 0 con pasos de 1/10000 hasta t
Z=zeros(size(v)) %Vector de zeros para
trazar línea roja
fcos=A*cos((2*pi*f*v)+R); %Genera la señal
coseno
axes(handles.axes1); %Elige el axes de la
interfaz
plot(v,fcos); %y grafica la función
xlabel('TIEMPO [seg]'); %Etiqueta de tiempo
ylabel('AMPLITUD [V]'); %Etiqueta de
amplitud
grid on %Marca los cuadros del
plano para visualizar mejor la gráfica
hold on %Mantiene la línea roja y la
gráfica en el mismo plano
plot(v, Z, 'r'); %Traza la línea roja

% ____________________ FUNCION CUADRATICA


_________________________________
function fcuadrada_Callback(hObject, eventdata, handles)
global A c fa f R %Variables globales para
controlar los datos de la función
hold off %Elimina la gráfica anterior
fs = 30*f; %Frecuencia de muestreo a
30 muestras por ciclo
ciclo=c; %Obtiene el número de
ciclos deseados
nciclos=(1/f)*ciclo; %Genera el número de
ciclos
v = 0 : 1/fs : nciclos; %Vector del tiempo que
va desde 0 con pasos de 1/10000 hasta tZ=zeros(size(v))
%Vector de zeros para trazar línea roja
fsqu=A*square((2*pi*f*v)+R); %Genera la señal
cuadrática
axes(handles.axes1); %Elige el axes de la
interfaz
plot(v,fsqu); %y grafica la función
stem(v, fsqu); %Rellena cada pulso y lo
hace más visible
xlabel('TIEMPO [seg]'); %Etiqueta de tiempo
ylabel('AMPLITUD [V]'); %Etiqueta de
amplitud
grid on %Marca los cuadros del
plano para visualizar mejor la gráfica
hold on %Mantiene la línea roja y la
gráfica en el mismo plano
plot(v, Z, 'r'); %Traza la línea roja

% ___________________ FUNCION DIENTE DE SIERRA


____________________________
function fdiente_Callback(hObject, eventdata, handles)
global A c fa f R %Variables globales para
controlar los datos de la función
hold off %Elimina la gráfica anterior
fs = 30*f; %Frecuencia de muestreo a
30 muestras por ciclo
ciclo=c; %Obtiene el número de
ciclos deseados
nciclos=(1/f)*ciclo; %Genera el número de
ciclos
v = 0 : 1/fs : nciclos; %Vector del tiempo que
va desde 0 con pasos de 1/10000 hasta t
Z=zeros(size(v)) %Vector de zeros para
trazar línea roja
fsaw=A*sawtooth((2*pi*f*v)+R); %Genera la señal
diente de sierra
axes(handles.axes1); %Elige el axes de la
interfaz
plot(v,fsaw); %y grafica la función
xlabel('TIEMPO [seg]'); %Etiqueta de tiempo
ylabel('AMPLITUD [V]'); %Etiqueta de
amplitud
grid on %Marca los cuadros del
plano para visualizar mejor la gráfica
hold on %Mantiene la línea roja y la
gráfica en el mismo plano
plot(v, Z, 'r'); %Traza la línea roja

% ___________________ VALORES PARA LA GRÁFICA


_____________________________
function OK_Callback(hObject, eventdata, handles)
global A c fa f R %Variables globales para
controlar los datos de la función
A = str2num(get(handles.amplitud, 'string')); %Obtiene
cadena de caracteres del campo amplitud y los convierte a número
f = str2num(get(handles.frecuencia, 'string')); %Obtiene
cadena de caracteres del campo frecuencia y los convierte a número
c = str2num(get(handles.ciclos, 'string')); %Obtiene
cadena de caracteres del campo tiempo y los convierte a número
fa = str2num(get(handles.fase, 'string')); %Obtiene cadena
de caracteres del campo fase y los convierte a número
R = deg2rad(fa);

function amplitud_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties.


function amplitud_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),


get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
Capturas:

1) Gráfica de Diente de Sierra

2) Gráfica Cosenoidal
3) Gráfica Cuadrada

4) Gráfica Senoidal

Conclusiones:

Jazmín: A través de la presente práctica realizamos un programa que genera


señales cuadradas, sinusoidales o diente de sierra; con parámetros dados por el
usuario. Para que el programa pueda funcionar adecuadamente la frecuencia de
muestreo tiene que ser dependiente de la frecuencia de la señal: contrastado con
cálculos vistos en clase.
Nestor: Pudimos comprobar el comportamiento de la señal al variar cada una de
las componentes. Además de tomar en cuenta otros teoremas para la generación
correcta de la señal, como lo es el teorema de muestreo y usar un sólo sistema de
unidades en los parámetros para obtener el resultado esperado.

Omar: En la práctica empleamos conocimientos de la materia de “Análisis de


señales analógicas”. Principalmente la interpretación gráfica al suponer los valores
y parámetros de una función analógica.

Sentí confusión en el programa, porque debía pedir el número de ciclos a graficar


en lugar del “tiempo” de duración de la función.

Referencias:

Libros:

Introducción a los Sistemas de Comunicación | 3ra Edición | Ferrel G. Stremler

LINKs:

https://es.wikipedia.org/wiki/Generador_de_se%C3%B1ales

http://cursos.clavijero.edu.mx/cursos/153_rI/modulo1/contenidos/tema1.2.html

También podría gustarte