Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERÍA
SIMULACION DE SISTEMAS
“Diferenciadores”
Grupo: 8HW1
Derivada sucia
Alta ganancia
No Lineal (Utkin-Drakunov)
Exacto (Levan)
Equivalente (Muñoz-Vázquez)
Todos ellos vistos en la materia simulación de sistemas I dirigida por el PhD. Aldo
Jonathan Muñoz Vázquez.
La derivada sucia “Dirty Derivative Method” se puede clasificar como un filtro estable
pasa altas de primer orden con grado relativo cero, cuya salida tiende al valor de la
derivada de la entrada. Este método de diferenciación es aproximado. Se ha
comprobado que con la derivada sucia se obtiene un mejor desempeño que con el
enfoque tradicional de diferenciación numérica, por lo que es comúnmente utilizada en
aplicaciones que requieren regulación de velocidad.
Como se puede observar en el presente código las variables base son h, tf, t y n.
h= Variable que se usa para determinar el incremento entre los valores en el vector
“t” y en la subrutina del código como variable maximizante ya que divide el
resultado del proceso del cálculo entre este incremento.
t= Vector inicial unidimensional cuyos valores oscilan de 0 hasta 5 en incrementos
de .002, siendo “tf” el límite superior y “h” el valor incremental.
n= Variable de control de los ciclos internos del método, este controlara el número
de veces que se ejecuta la fórmula del diferenciador para la señal con ruido y la
señal sin ruido, este valor comúnmente es en miles.
f1= Función de entrada al derivador en su estado primitivo. Es un vector
unidimensional de tamaño ‘t’ ya que la función seno se evalúa con cada valor
3
Este segmento de código corresponde al primer grafico en el cual se muestran dos señales,
la primer señal es “t” vs “f2” , que es la función con ruido y el vector unidimensional
calculado con un incremento “h”, la segunda señal es “t” vs “f1”, que de igual forma
emplea el vector unidimensional “t” y la función inicial propuesta.
Gráfico de Entrada
Filtro a la función
sin ruido.
Filtro a la función
con ruido.
El presente segmento de código aplica la fórmula del segmento de derivador sucio, por inspección
se observa que la variable “i” empieza en 2 hasta el valor de “n” con incrementos por default de 1,
cabe señalar que el valor de “n” anteriormente lo describí.
Como podemos observar “df1” y “df2” son los vectores de resultados que arrogan las evaluaciones
del método tanto del vector de la función intacta y el vector de la función con ruido, básicamente
el método consiste en restar el valor de la posición con índice “uno” menos el valor de la posición
con índice “cero” y a esta diferencia dividirla entre el incremento inicial que se propone en este
caso contenido en la variable “h”, hasta llegar al último valor de la última posición del vector de
entrada.
𝑉𝑒𝑐𝑓𝑢𝑛𝑐𝑖𝑜𝑛(𝑛) − 𝑉𝑒𝑐𝑓𝑢𝑛𝑐𝑖𝑜𝑛(𝑛 − 1)
𝑉𝑒𝑐𝑅𝑒𝑠𝑢𝑙𝑡𝑎𝑑𝑜(𝑛) =
𝑉𝑖𝑛𝑐𝑟𝑒𝑚𝑒𝑛𝑡𝑎𝑙
Observaciones de la fórmula:
“n” hace alusión a la posición actual de evaluación del índice del vector de valores de entrada,
5
por ende “n” tiene que integrar inicialmente el valor de inicio + 1 para poder evaluar en la
formula el valor inicial, esto es restarlo del valor siguiente.
Este segmento de código grafica el resultado “df1” contra los valores del vector “t”, además de
graficar la derivada analítica de la función inicial seno(t) -> coseno(t) contra los valores del vector
“t”.
Por ultimo tenemos el bloque de código cuya función es graficar los resultados obtenidos del
método derivada sucia a la función inicial con ruido y la derivada analítica de la función inicial
propuesta.
Se puede observar que el método es efectivo en el caso de que la función de entrada no tenga
ruido, o en su defecto tenga mucho muy poco ruido, de lo contrario el método se verá limitado
para cumplir su cometido que es lograr una diferenciación perfecta de la función, se realizaron
pruebas minimizando la cantidad del ruido de la función y se logró obtener un resultado con una
mejora considerable, pero en la vida real es prácticamente imposible encontrar señales sin ruido,
o señales perfectas, por lo cual desde mi óptica personal se descarta este método como la mejor
vertiente de diferenciación.
Como se puede observar en el presente código, las explicación para las variables iniciales es la
misma, se contemplan los mismos dos vectores de evaluación: el de la función objetivo y el de
dicha función con el ruido añadido, sin embargo se observa que existen cuatro nuevas variables
que van a interactuar en si con la lógica del método cuyos nombres son: “z” , “dz”, “e”, “k”, los
valores de “z” y “e” deben de ser inicialmente cero, sin embargo para el valor de “k” se puede
experimentar ya que es un valor constante, “dz” es un valor de apoyo calculado que depende
8
Gráfico de Entrada
Al igual que el método de derivada sucia, cada ciclo se emplea para el cálculo del vector con los
nuevos valores resultado de la metodología del método en cuestión, como podemos observar la
variable “e” contiene el resultado de la diferencia de la posición “i” del vector de la función base
en cuestión y la variable “z”, “dz” es el resultado del producto entre la constante “k” y
propiamente la variable de juego “e”, el resultado que tendrá el nuevo vector en la posición actual
es el valor que se calculó en la variable “dz”. Por último la variable “z” se auto incrementa con su
propio valor “+=” más el resultado del producto de la variable “dz” y la constante de incremento
“h” cuyo valor se propone a consideración desde las primeras líneas del script.
9
A continuación se presentan los resultados obtenidos con los valores propuestos por default:
Se observa una notoria mejora comparando con k=10, por lo cual se deduce que es un método
interesante para señales que incorporan poco ruido, sin embargo no es ideal para aplicaciones de
la vida real que mezclan ruido en sus valores, ya que realice pruebas otorgando mayor ruido .002 y
11
Gráfico de Entrada
que conforme avancen los ciclos de la estructura “for” hira tomando valores diferentes, “dz” es el
resultado de la multiplicación de la constante “k” por la tangente hiperbólica cuyos argumentos a
los parámetros de esta función trigonométrica es el producto aritmético de la constante “beta”
por “e”, el nuevo valor calculado del vector saliente “df1(i)” es igual al valor numérico de “dz”,
para finalizar el algoritmo descrito se denota que la variable “z” se autoincrementa así misma y
además adhiere el resultado del producto de “dz” con la variable incremental “h” que vista desde
una perspectiva de programación estructurada, entra en la denominación de una constante
aritmetica. Cabe hacer mención de nueva cuenta que la variable controladora del ciclo en este
caso lleva por nombre “i” que empieza desde 1 hasta el valor de la variable “n” que depende del
valor incremental “h” y la variable de tiempo final “tf” en incrementos del valor unidad.
Sin más sincopas de usiría a continuación se presentan los resultados obtenidos con los valores
propuestos presentados en el script inicial:
Se logra observar que este método presenta una demora de tiempo en el transitorio, el proceso
de filtrado de la función original, es decir los valores que no incorporan ruido se nota un trabajo
decente observando el resultado, sin embargo no es lo mismo para la señal filtrada con ruido, ya
15
que dista demasiado de su derivada analitica. Jugando un poco con las constantes que fluctúan el
rendimiento de este método se logró obtener pequeñas mejoras empleando “k=4” y “beta = 4”, a
continuación se añaden las evidencias correspondientes para Usía.
El penúltimo método que se tratara en el presente reporte también comparte la misma estructura
de código que los métodos previos, este incorpora las variables especiales para su binomio de
17
interacción: “z” , “z1” , “e”, “L” , “k1” y “k0” al igual que “dz” y “dz1” estas dos últimas serán
tratadas como se puede observar dentro de la implementación de las instrucciones del método
matemático, “L”, “k1” y “k0” son los parámetros constantes con los cuales se pueden realizar
ajustes para la optimización de los resultados del método en base a circunstancias presentes como
se puede observar inicialmente se plantea para “L=100”, para “k1 = 1.5” multiplicado por la raíz
cuadrada de “L” y para “k0” se tiene el valor de 1.1 multiplicado por “L”.
Gráfico de Entrada
Al haber descrito esta serendipia de oxímoron doy paso a mostrar los resultado obtenidos con los
valores iniciales propuestos:
Con los valores iniciales que se presentan de facto en el código de introducción se obtienen
resultados interesantes, tanto en el vector sin ruido y en el que incorpora ruido, pero sin lugar a
duda en el que se observa una aproximación bastante buena y respetable de su diferencial es en el
resultado filtrado del vector sin ruido, básicamente se logra apreciar un escalonado que hace
alusión a la buena aproximación del proceso de diferenciación numérico al analítico, el proceso en
el cual se obtiene el nuevo vector de salida de los valores con ruido se aprecia que se pudo mitigar
un poco las atenuaciones fluctuantes que radican en los picos paralelos de la derivada analitica, sin
20
embargo modificando los argumentos a los parámetros del método establecido se logró mejorar
palpablemente tal resultado, a continuación se muestra evidencia del proceso junto con los
valores nuevos de chequeo, se advierte que existe un desfase en el transitorio aun con el ajuste.
Por ende hasta el momento para los valores de la función seno(t) y el ruido propuesto, este
método por inspección ha mostrado los mejores resultados, el ajuste a “L=50” debidamente
21
En este quinto y último método se destaca una complejidad mesuradamente mayor a los 4
métodos anteriormente descritos, como se ha venido planteando este método también se basa en
la estructura básica de Diferenciación y se apoya de igual forma en los valores propuestos para
todos los métodos a excepción de que añade variables de control nuevas, este es el método que
incorpora una mayor cantidad de parámetros, dichos parámetros son: “z”,”z1”, “e”, “k1”, “k2”,
“beta1”, “beta2”, “k3” y “k4” además de “u1”, “u2”, “dz”, “dz1”, que más adelante se describirá la
manera en la que se interactúa con los mismos.
22
Gráfico de Entrada
La metodología de manejo de los datos de los vectores de entrada es la misma se requiere un ciclo
por vector que itere el número de veces que equidista al número de posiciones que contiene el
vector, son ocho pasos que se deben de seguir acabo para cada valor del vector de entrada, a
continuación se describen tales pasos de manera litera: la variable “e” integra el valor de la
23
posición “i” del vector de entrada ( recordemos que “i” es el índice de iteración del arreglo
controlador por el bucle for) menos el valor de la variable “z”, el segundo paso radica en asignarle
el valor a la variable “u1” del producto de la variable “k1” multiplicado por la función tangente
hiperbólica que toma como argumentos la multiplicación de la variable “beta1” por “e” a este
resultado arrogado se le agrega de igual forma el valor del producto “k3” por la variable “e”, el
tercer paso es asignar el valor del producto “k2” por la tangente hiperbólica del resultado “beta2
por u1”, además añadiéndoles el resultado de la multiplicación de la variable “k4” por “u1”. El
cuarto paso es asignarle a la variable “dz” el valor de la suma de “z1” mas “u1”. El quinto paso es
usar una bandera y asignarle a la variable “dz1” el valor de la variable “u2”, El sexto paso es
autoincrementar la variable “z1” y añadirle el valor del resultado del producto de “dz1”” por “h”
que es la constante de incremento. El séptimo y último pasó pues es asignar el nuevo valor de
salida calculado a la posición del vector salida actual. Cabe señalar que los valores de las variables
“z”, “z1” y “e” deben de estar en ceros antes de realizar una evaluación a un conjunto de datos
dados. Proteicas de platón descritas se procede a presentar los resultados para los valores
iniciales.
Es cuánto.
25
Bibliografía
Community, C. (s.f.). wikipedia. Obtenido de
https://es.wikipedia.org/wiki/Ruido_(comunicaci%C3%B3n)
Levant, A. (1998). Robust exact differentiation via sliding mode technique. XIEEE.