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 𝑛
𝑓' = ([𝑥 ,..., 𝑥 ] − [𝑥 , 𝑥 ,..., 𝑥 ]) * (1/ℎ)
2 𝑛 1 2 𝑛−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
}
[Link](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 [Link]
2. Guia de referencia de Arduino [Link]