Está en la página 1de 5

Universidad Mayor de San Andres

Facultad de Ingeniería
Carrera de Ingeniería Eléctrica

Guía de laboratorio de Diseño de Sistemas de Control JTP


Tema 2: Lenguajes y Algoritmos

Introducción
La interfaz para desarrollar un sistema que procese información, es por medio de un
lenguaje que contempla instrucciones recurrentes que puedan ser traducidas a códigos que
pueda interpretados y ejecutados un sistema de computación.
Se han desarrollado y están en constante evolución lenguajes de programación de
propósito general y específico, siendo el más utilizado y base de otros más el lenguaje “C”,
pues su estructura asemeja más a un lenguaje matemático, por ello en muchos casos se lo
denomina lenguaje de ingeniería.
Algunas tareas recurrentes como condiciones y bucles, son funciones
preestablecidas del lenguaje e implementadas por defecto. Otras tareas más especializadas
y comunes en todos o la mayoría de los sistemas de computación son implementadas como
librerías, de estas y las primeras se agrupan en un estándar como lo es el estándar ANSI C
en sus diferentes versiones. Existen más librerías y funciones que un fabricante de
hardware y/o software desarrolla y su gran variedad depende de la evolución de la
tecnología.

Objetivos

Objetivo General
● Conocer las ventajas de optar por técnicas alternativas para optimizar los
cálculos y así reducir el tiempo de procesamiento en los sistemas de
computación.

Objetivo Secundarios
1. Conocer las cualidades de la elección de un algoritmo en la multiplicación
2. Conocer las cualidades de los cálculos de grandes grupos de números
3. Aplicar la cualidad de precalificar valores en tablas para su acceso inmediato.
4. Aplicación de algoritmos desarrollados para procesamiento de señales
Universidad Mayor de San Andres
Facultad de Ingeniería
Carrera de Ingeniería Eléctrica
Marco teórico

Los algoritmos para operaciones algebraicas suelen tomar el


tiempo mayor en el procesamiento de tareas, como son la multiplicación
por sumas sucesivas y el ordenamiento de valores, y otras más
complejas como son la diferenciación y la integración. Otros cálculos
más especializados como funciones trigonométricas, logarítmicas, y
otras más, teniendo que llamar a librerías especializadas para poder
evaluar las funciones.
multiplicación
𝑎+𝑎+𝑎+...+𝑎
𝑎*𝑏= 𝑏 𝑣𝑒𝑐𝑒𝑠
una operación repetitiva
en una algoritmo
dados a, b (enteros)

c=0;
for(i=1:b)
c=c+a;
end
c
Al analizar el código podemos para cuantificar el rendimiento respecto al tiempo de
ejecución, podemos asignar un T por cada operación, esto daría:
por cada incremento de i T entonces bT
por cada operación de suma + T entonces bT
por actualizar el valor de c entonces bT
a pesar que la inicialización y el despliegue de el resultado pueden tomarse no son
relevantes para valores grandes de b, por consecuencia el tiempo de ejecución será
Te=3bT. Si tomamos como base un número entero b=255, serían 765 veces T tiempos de
procesamiento.
Ahora si consideramos la multiplicación en un sistema binario
10𝑑 * 5𝑑 = 1010𝑏 * 101𝑏 =?
debemos notar que multiplicar por dos puede desarrollarse como como una rotación a la
izquierda adicionando un cero a la izquierda, así:
1010𝑏 * 2𝑑 = 10100𝑏
si se multiplicará por 3𝑑 = 11𝑏 = 10𝑏 + 1𝑏 aprovechando la propiedad distributiva de la
multiplicación respecto a la suma, podría desarrollarse la siguiente operación:
10𝑑 * 3𝑑 = 1010𝑏 * 11𝑏 = 1010𝑏 * 10𝑏 + 1010𝑏 * 1𝑏 = 10100𝑏 + 1010𝑏 = 11110𝑏 = 30𝑑
si comparamos el caso de b=255, que no se tomó a la ligera, ya que 255𝑑 = 11111111𝑏, así
la multiplicación,
10𝑑 * 255𝑑 = 1010𝑏 * 11111111𝑏 =
= 1010𝑏 * 10000000𝑏 +
1010𝑏 * 1000000𝑏 +
Universidad Mayor de San Andres
Facultad de Ingeniería
Carrera de Ingeniería Eléctrica
1010𝑏 * 100000𝑏 +
1010𝑏 * 10000𝑏 +
1010𝑏 * 1000𝑏 +
1010𝑏 * 100𝑏 +
1010𝑏 * 10𝑏 +
1010𝑏 * 1𝑏 = 100111110110𝑏 = 2550𝑑
si contamos las operaciones que se deben realizar en un algoritmo:
dados a y b
e=b
i=1
while (e!=0)
if(a && 1 )
d[i]=a
i++;
end
a=a<<1
e=e>>1
end
c=sum(d)

7 sumas entonces 7T
6 actualizaciones, rotaciones e inicialización entonces 6*8= 48 T
en total 56 veces T.
que es mucho menos que el primer procedimiento.

Los Procesos de diferenciación numérica de han estudiado he optimizado con


diferentes técnicas, así podemos mencionar los algoritmos de método expansión de Taylor y
sus modificaciones por medio de restas de números o valores que al ser ordenados en
forma de vectores, podría expresarse como la diferencia de vectores reducidos al inicio y al
final y restar dos vectores multiplicando por el inverso del incremento.

𝑓 = [𝑥1, 𝑥2,..., 𝑥𝑛−1, 𝑥𝑛]


𝑓' = ([𝑥2,..., 𝑥𝑛] − [𝑥1, 𝑥2,..., 𝑥𝑛−1]) * (1/ℎ)

En el caso de las integrales podemos mencionar los métodos trapezoidales,


trapezoidal extendidos y transformaciones exponenciales.
Para el cálculo de proyecciones geométricas repetitivas, sería reduciría el costo
computacional si previamente pre calculamos y almacenamos en memoria los valores en un
dominio definido. como se muestra a continuación:
for(i=0:pi*100)
cos_[i]=cos(i/100)
end
Aplicar esta técnica podría acelerar el resultado final por que simplemente sería el
acceso a la memoria para el cálculo de una proyección.
Universidad Mayor de San Andres
Facultad de Ingeniería
Carrera de Ingeniería Eléctrica
Una importante aplicación de los algoritmos en el procesamiento de señales son la
transformada de fourier discreta como lo es la transformada rápida de fourier o fft. Es
importante aclarar que equipos especializados implementan circuitos especializados para
este cálculo como son los coprocesadores matemáticos. Un ejemplo de este caso son los
controladores discretos de señales como dspic30fXXX de la familia pic.

Materiales
Tarjetas de desarrollo Arduino UNO, MEGA, DUE
Software de desarrollo de Arduino
Computador de sobremesa
Software de Matlab

Procedimiento
1. Multiplicación de números de punto flotante, en el entorno de Arduino
a. Almacenar dos número en formato de 32 bits (4 bytes)
b. Realizar la multiplicación de los dos números en formato de 32 bits
i. realizar 100 multiplicaciones y validar el tiempo de ejecución
float a=1.2
float b=2.554
for (i=0:i<100:i++){
float c=a*b
}
Serial.printfln(c);
ii. enviar los datos a la PC y y ejecutar las 100 multipliciones

c. verificar el costo computacional


2. Cálculo de la integral doble
a. Integral bidimensional y tridimensional en el entorno de arduino y la PC
b. verificar el costo computacional
3. Matriz de Rotación
a. Rotar una barra y su proyección en la PC por medio de un cálculo constante
y luego por medio de acceso a memoria
4. Cálculo de la transformada de Fourier de una función
Universidad Mayor de San Andres
Facultad de Ingeniería
Carrera de Ingeniería Eléctrica
a. Desarrollar el algoritmo de FFT para una secuencia de 1024 datos en la PC y
el entorno de Arduino

Análisis de resultados
Realizar la comparativa en diferentes lenguajes de programación, por medio de
comentarios de cada una de los resultados obtenidos.

Investigación complementaria
1. Que es un coprocesador matemàtico
2. Que es un DSP
3. Que es un Filtro Digital
4. Que es la Transformada Z

Bibliografía
1. Centro de ayuda de Matlab https://la.mathworks.com/help/index.html
2. Guia de referencia de Arduino https://www.arduino.cc/reference/en/

También podría gustarte