Universidad Mayor de San Andrés
Facultad de Ingeniería Electrónica
PROYECTO
LINUX
GENERADOR DE
FUNCIONES
ETN 903 – SISTEMAS DE COMPUTACION
PRESENTADO POR: GRUPO 13
EDWIN JHONNY COHARITA CALLISAYA
RAUL FERNANDO GONZALES TICONA
WILLIAMS QUISPE LUCANA
DOCENTE: Ing. JAVIER SANABRIA GARCIA
FECHA: 16/06/2023
LA PAZ - BOLIVIA
1. ANTECEDENTES
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.
Se emplea normalmente en el diseño, prueba y reparación de dispositivos electrónicos; aunque también
puede tener usos artísticos y ser empleado en la medicina.
En junio de 1928, el General Radio 403, fue el primer generador de señal comercial que fue comercializado. Admitía un
rango de frecuencia de 500Hz a 1.5MHz.1 Además, en abril de 1929, General Radio comercializó el primer estándar de
frecuencia comercial con una frecuencia de 50 kHz
OBJETIVO:
Desarrollar un generador de funciones en entorno Linux para aplicaciones posteriores y uso como
herramienta en laboratorio.
ANALISIS:
Para generar las funciones se codifico de la siguiente manera:
Onda sinusoidal:
/*-------------------------Dibuja sin(x)------------------------*/
int seno(float F)
#define DELTA 2
#define N 360
#define W M_PI/180
{
float t=0, y;
int X[500], Y[500];
SDL_SetRenderDrawColor(artist, 0x0, 0x0, 0x0, 255);
for(i=0;i<=N/DELTA;i++)
{
X[i] = floor(t) + MidX;
y = floor(Amp*sin(F*W*t));
Y[i] = -y + MidY;
t = t + DELTA;
}
for(i=0;i<=N/DELTA-1;i++)
SDL_RenderDrawLine(artist,X[i],Y[i],X[i+1],Y[i+1]);
}
Para la onda cuadrada:
/*-------------------------Dibuja onda cuadrada------------------------*/
int cuadrada(float F)
#define DELTA 2
#define N 360
#define W M_PI/180//M_PI constante 3,14159
{
float t=0, y; //variables
int X[500], Y[500]; //locales
SDL_SetRenderDrawColor(artist, 0x0, 0x0, 0x33, 255);
for(i=0;i<=N/DELTA;i++)
{
//floor redondea al entero menor
X[i] = floor(t) + MidX;
y = floor(Amp*sin(F*W*t));
if(y>=0)
y=Amp;
else
y=-Amp;
Y[i] = -y + MidY;
t = t + DELTA;
}
for(i=0;i<=N/DELTA-1;i++)
//SDL_RenderDrawLine funcion para dibujar una linea
SDL_RenderDrawLine(artist,X[i],Y[i],X[i+1],Y[i+1]);
}
Para la onda triangular:
/*-------------------------Dibuja onda triangular------------------------*/
int triangular(float F)
#define DELTA 2
#define N 360
#define W M_PI/180//M_PI constante 3,14159
{
float t=0, y, h,j=1,fact=0;
int X[500], Y[500];
SDL_SetRenderDrawColor(artist, 0x66, 0xFF, 0x00, 255);
for(i=0;i<=N/DELTA;i++)
{
X[i] = floor(t) + MidX;
y = (floor(Amp*t*F/90)*pow((-1),(j+1)))+(pow((-1),(j))*fact*Amp);
h = fabs(y);
if (h<=fabs(Amp))
Y[i]=-y+MidY;
else
{Y[i]=MidY+pow((-1),(j))*fabs(Amp);
j++;
fact=fact+2;}
t=t+DELTA;
}
for(i=0;i<=N/DELTA-1;i++)
//SDL_RenderDrawLine funcion para dibujar una linea
SDL_RenderDrawLine(artist,X[i],Y[i],X[i+1],Y[i+1]);
}
Para la onda diente de sierra:
/*-------------------------Dibuja onda diente de sierra------------------------*/
int sierra(float F) //funcion recibe el parametro F
#define DELTA 2
#define N 360
#define W M_PI/180//M_PI constante 3,14159
{
float t=0, y, g=0;
int X[500], Y[500];
SDL_SetRenderDrawColor(artist, 0x66, 0xFF, 0x00, 255);
for(i=0;i<=N/DELTA;i++)
{
X[i] = floor(t) + MidX;
y = floor((Amp*t*F/(180))-Amp)-g*Amp;
if (y<=Amp)
Y[i]=-y+MidY;
else
{Y[i]=MidY-fabs(Amp);
g=g+2;}
t=t+DELTA;
}
for(i=0;i<=N/DELTA-1;i++)
SDL_RenderDrawLine(artist,X[i],Y[i],X[i+1],Y[i+1]);
}
APLICACIÓN:
Se implementa las señales en base al programa proporcionado:
CONCLUSIONES:
Se logro el funcionamiento de las señales requeridas
Por carencia de tiempo queda realizar mejoras y complementar.