Está en la página 1de 8

Quiz 4.

Filtro promedio móvil implementado en Python

Jhonatan Humberto Avellaneda Gutierrez


Codigo:1023008536

Docente: MSc(c). José Daniel Ramírez Corzo


Materia: Sistemas Embebidos 3

Universidad de Pamplona
Facultad de Ingenierías y Arquitectura
Ingeniería Electrónica
Pamplona, Norte de Santander
2021

“Formando líderes para la construcción de un nuevo país en paz”


Universidad de Pamplona
Pamplona - Norte de Santander - Colombia 1
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750
SC-CER96940 www.unipamplona.edu.co
Quiz 4. Filtro promedio móvil implementado en Python

Código en Python:

El código que se realizo para esta actividad de calcular el filtro promedio móvil de una
lista ingresada por teclado es el siguiente:

##Función que calcule el filtro promedio móvil de una lista de datos


##Importación de las librerias o paquetes.
import numpy as np
import matplotlib.pyplot as plt

##Definir las funciones.


def filtro_promedio(lista,ventana):
suma = 0 # Definimos una variable llamada suma
concatenacion = ventana - 1 # Hallamos la cantidad de ceros que se deben añadir a la izquierda
lista_con = [0]*concatenacion # Creamos una lista de ceros dependiendo del resultado anterior
lista_con.extend(lista) # Agregamos la lista ceros a la izquiera de la lista original
longitud2 = len(lista_con) # Calculamos la longitud de la nueva lista
resultado = list(0 for x in lista_con) # Creamos una lista que se llame resultado
for i in range(0,ventana):
suma = suma + lista_con[i]
resultado[i] = suma/(i + 1)
for j in range(ventana, longitud2):
suma = suma - lista_con[j - ventana] + lista_con[j]
resultado[j] = suma/ventana
for k in range (0,concatenacion):
resultado.remove(0)
return resultado

##Código principal, llamado de las funciones MEAN.

“Formando líderes para la construcción de un nuevo país en paz”


Universidad de Pamplona
Pamplona - Norte de Santander - Colombia 2
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750
SC-CER96940 www.unipamplona.edu.co
datos = [ ] # Creamos una lista vacia
longitud_lista = int(input("Ingrese la longitud de la lista: ")) # Le solicitamos al usuario que digite la longitud
de la lista
print() # Hacemos un salto de linea
for a in range(longitud_lista): # Un for que recorra hasta el tamaño de la lista que el usuario quiere
print("Ingrese el valor de la lista #", a + 1)
valor = int(input("El valor es: ")) # Le solicitamos al usuario que ingrese los valores
datos.append(valor) #Agregamos esos valores
print() # Salto de linea
ven = int(input("Ingrese el valor de la ventana: ")) # Le solicitamos al usuario que ingrese la ventana
print() # Salto de linea
print(f"La lista a la cual se le va a calcular filtro promedio móvil es: {datos}") # Imprimimos la lista
ingresada por el usuario
f = filtro_promedio(datos,ven) # Llamamos a la función que creamos anteriormente
print() # Salto de linea
print(f"El filtro promedio móvil es: {f}") # Imprimimos el calculo que hace la función

Explicación del código:

Ahora vamos a explicar este código para hacerlo un poco más sencillo e ilustrativo
vamos a utilizar pantallazos del código en Python, para esto tenemos:

Lo primero que hacemos es importar las librerías numpy y matplotlib, por si acaso
requerimos de alguna.

Figura 1. Explicación del código.

“Formando líderes para la construcción de un nuevo país en paz”


Universidad de Pamplona
Pamplona - Norte de Santander - Colombia 3
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750
SC-CER96940 www.unipamplona.edu.co
Ahora lo que hacemos es definir la función que nos va a calcular el filtro promedio móvil
de conjunto de datos ingresados, en este caso yo llame a mi función filtro_promedio.
Dentro de la función defino una variable llamada suma y la inicializo en cero, en esta
variable se guardará la suma de los datos dependiendo de la ventana. Luego
calculamos cuantos ceros debemos concatenar a la izquierda para que el filtro funcione
de manera adecuada, recordemos que es el numero de la ventana menos uno.
Seguidamente creamos una lista de ceros dependiendo del resultado anterior y lo que
hacemos es añadir esta lista de ceros a la izquierda de la lista original, para esto
utilizamos la operación extend que en este caso vamos a añadir al final de la lista_con
la lista original. Después calculamos la longitud de la nueva lista y creamos una lista
llamada resultado del mismo tamaño de la lista_con que es donde se van a guardar los
valores hallados por el filtro.

Ahora tenemos tres for, los tres están conectados de alguna porque cumplen la función
de calcular el filtro, pero cada uno tiene una función especifica que son: el primer for
tiene como objetivo recorrer la lista desde 0 hasta la ventana y sumar esos tres valores
almacenándolos en la variable suma después dividimos esa suma en la posición i + 1 y
almacenamos en resultado en la posición de i. El segundo for tiene como objetivo
recorrer desde ventana hasta la longitud de la lista concatenada y se hace algo
parecido con la diferencia de que se resta a suma la posición menos la ventana de la
lista y se suma la posición en j de la misma, con eso aseguramos que la operación se
haga de forma correcta y vaya sumando cada tres datos a la par que va corriendo esa
suma como nos indica la formula del filtro promedio móvil, luego lo que hacemos es
dividir esa suma sobre la ventana y se guarda en resultado en la posición j. El ultimo for
tiene como objetivo eliminar los ceros que queda a la izquierda al concatenar los ceros,
recordemos que al final se debe tener los mismos valores que la lista original.

“Formando líderes para la construcción de un nuevo país en paz”


Universidad de Pamplona
Pamplona - Norte de Santander - Colombia 4
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750
SC-CER96940 www.unipamplona.edu.co
Figura 2. Explicación del código.

Por último, tenemos el código principal en este lo que hacemos es crear una lista vacía
que llame datos, le pedimos al usuario que ingrese la longitud que quiere que tanga la
lista de datos a ingresar y también convertimos este valor a entero porque si
recordamos cuando ingresamos algo por teclado así sean números lo tenemos como
de tipo string. Luego tenemos un for que es el encargado de solicitarle al usuario que
valores numéricos quiere en la lista de datos. Después le solicitamos al usuario el
número de la ventana que tendrá el filtro. Por último, llamamos a la función que
definimos anteriormente e imprimimos los valores obtenidos de hacer el filtro promedio
móvil.

“Formando líderes para la construcción de un nuevo país en paz”


Universidad de Pamplona
Pamplona - Norte de Santander - Colombia 5
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750
SC-CER96940 www.unipamplona.edu.co
Figura 3. Explicación del código.

Ejemplo del funcionamiento del código:

Ahora lo que haremos será resolver un ejercicio para comprobar el funcionamiento del
código, para esto utilizaremos el ejemplo que se encuentra en la presentación llamada
PROCESAMIENTO.ppt, donde nos piden calcular el filtro promedio de
X [ n ] =[2, 4 , 3 ,3 , 1 ,6 ,5] y tiene que dar como resultado y [ n ] =[0.66 , 2.0 , 3.0 ,2.33 , 3.33 , 4.0]
con una ventana de M = 3.

“Formando líderes para la construcción de un nuevo país en paz”


Universidad de Pamplona
Pamplona - Norte de Santander - Colombia 6
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750
SC-CER96940 www.unipamplona.edu.co
Figura 4. Ejemplo del funcionamiento del código.

Como podemos observar primero se pide la longitud de la lista de datos y luego se le


pide al usuario que digite cada uno de los valores de esta lista, después se pide que se
ingrese el valor a la ventana, luego de esto se muestra la lista a la cual se le aplicara el
filtro y por último, nos muestra el resultado del filtro promedio móvil. Se pude reconocer
que da el mismo resultado que al hacerlo con la fórmula teórica. Y si se hace con otros
datos u otra ventana de igual manera funciona y arroja un resultado correcto.

Conclusión:

Podemos concluir que el filtro promedio móvil nos puede servir para filtrar señales con
mucho ruido, que el proceso de esta técnica se puede hacer en Python y que este no
es muy complejo debido a la misma simplicidad de la técnica y que, aunque se pueden
utilizar algunas bibliotecas para llegar al mismo resultado y hacerlo un poco más
sencillo, en este caso solo se hizo el análisis matemático para la implementación en
código de esta técnica. Este filtro consiste en la realización de una media aritmética o

“Formando líderes para la construcción de un nuevo país en paz”


Universidad de Pamplona
Pamplona - Norte de Santander - Colombia 7
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750
SC-CER96940 www.unipamplona.edu.co
promedio entre determinadas muestras dependiendo de la ventana. Este filtro pude ser
utilizado para hacer análisis de un conjunto de datos. Se puede decir que esta técnica
es una técnica de predicción porque toma en consideración muestras pasadas según la
ventana que se le indique. Aunque en este ejercicio se hace solo la matemática del
filtro, este podría ser utilizado para cosas un poco más complejas como el filtrado de
señales tomadas en un sistema de adquisición de datos y hacer un poco más suaves
estas señales o que contengan la mínima cantidad de ruido.

“Formando líderes para la construcción de un nuevo país en paz”


Universidad de Pamplona
Pamplona - Norte de Santander - Colombia 8
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750
SC-CER96940 www.unipamplona.edu.co

También podría gustarte