Estoy trabajando en un robot móvil controlado a través de un enlace inalámbrico de 2,4 GHz. El receptor está conectado al Arduino Uno que sirve a bordo como el controlador principal. El canal de entrada más crítico (y principal) procedente del receptor produce una señal muy ruidosa, lo que conduce a muchos cambios menores en la salida de los actuadores, aunque éstos no son necesarios. Estoy buscando bibliotecas que pueden realizar suavizado eficiente. ¿Hay alguna señal de suavizado de las bibliotecas disponibles para el Arduino (Uno) preguntó Feb 16 14 a las 13:57 Creo que veo un montón de picos de ruido de una sola muestra en su señal ruidosa. El filtro mediano hace mejor en deshacerse de picos de ruido de una sola muestra que cualquier filtro lineal. (Es mejor que cualquier filtro de paso bajo, promedio móvil, promedio móvil ponderado, etc., en términos de su tiempo de respuesta y su capacidad para ignorar tales valores extremos de picos de ruido de una sola muestra). De hecho, hay muchas bibliotecas de suavizado de señal para el Arduino, muchas de las cuales incluyen un filtro mediano. Bibliotecas de suavizado de señales en arduino. cc: bibliotecas de suavización de señales en github: ¿Funcionaría algo así en tu robot (La mediana de 3 requiere muy poca potencia de CPU, y por lo tanto rápida): Podrías filtrar esto digitalmente usando un valor bajo Filtro de paso: Cambie el 0.99 para cambiar la frecuencia de corte (más cerca de 1.0 es la frecuencia más baja). La expresión real para ese valor es exp (-2pif / fs) donde f es la frecuencia de corte que desea y fs es la frecuencia en la que se muestrea la información. Otro tipo de filtro digital es un filtro de eventos. Funciona bien en datos que tienen valores extremos, p. 9,9,8,10,9,25,9. Un filtro de eventos devuelve el valor más frecuente. Estadísticamente este es el modo. Los promedios estadísticos como Media, Modo etc. se pueden calcular utilizando la Biblioteca media de Arduino. Un ejemplo tomado de la página de la Biblioteca de Arduino se refiere a: Introducción Una de las principales aplicaciones de la placa Arduino es la lectura y registro de datos de sensores. Por ejemplo uno monitorea la presión cada segundo del día. Como frecuencias de muestreo altas a menudo generan picos en los gráficos, también se quiere tener un promedio de las mediciones. Como las mediciones no son estáticas en el tiempo lo que a menudo se necesita es un promedio de funcionamiento. Éste es el promedio de un cierto período y muy valioso al hacer análisis de la tendencia. La forma más simple de un promedio de ejecución se puede hacer por el código que se basa en el promedio anterior de ejecución: Si uno no quiere utilizar matemáticas punto flotante - como esto ocupa la memoria y disminuye la velocidad - uno puede hacer lo mismo completamente en el dominio entero. La división por 256 en el código de ejemplo es un desplazamiento a la derecha 8, que es más rápido que decir división por ejemplo. 100. Esto es cierto para cada potencia de 2 como divisor y sólo uno debe tener cuidado la suma de los pesos es igual a la potencia de 2. Y por supuesto uno debe tener cuidado no hay desbordamiento intermedio (considere el uso de unsigned largo) Si necesita Un promedio de ejecución más preciso, in concreto de las últimas 10 mediciones, se necesita una matriz (o lista vinculada) para mantenerlos. Esta matriz actúa como un amortiguador circular y con cada nueva medida se elimina la más antigua. El promedio de ejecución se calcula como la suma de todos los elementos divididos por el número de elementos de la matriz. El código para el promedio de ejecución será algo como esto: Desventaja de este código es que la matriz para contener todos los valores puede llegar a ser bastante grande. Si usted tiene una medición por segundo y desea un promedio de ejecución por minuto que necesita una matriz de 60 un promedio por hora necesitaría una matriz de 3600. Eso no podría hacerse de esta manera en un Arduino, ya que sólo tiene 2 K de RAM. Sin embargo, mediante la construcción de un promedio de 2 etapas se puede abordar bastante bien (renuncia: no para todas las mediciones). En el código psuedo: Como una nueva matriz estática interna es necesaria para cada función runningAverage, esto grita para ser implementado como una clase. Biblioteca RunningAverage La biblioteca runningAverage crea una clase de la función anterior para que pueda usarse varias veces en un boceto. Desacopla la función add () y avg () para que sea un poco más flexible, p. Uno puede llamar al promedio varias veces sin agregar nada. Tenga en cuenta que cada instancia de la clase añade su propia matriz para realizar mediciones, y que esto se suma al uso de la memoria. La interfaz de la clase se mantiene lo más pequeña posible. Nota: con la versión 0.2 los nombres de los métodos se hacen más descriptivos. Uso Un pequeño bosquejo muestra cómo se puede utilizar. Un generador aleatorio se utiliza para imitar un sensor. En setup () el myRA se borra para que podamos empezar a agregar nuevos datos. En loop () primero se genera un número aleatorio y se convierte en un flotador que se agregará a myRA. A continuación, el valor de ejecución se imprime en el puerto serie. También se puede mostrar en algunos LCD o enviar a través de Ethernet, etc Cuando se añaden 300 elementos myRA se borra para empezar de nuevo. Notas Para utilizar la biblioteca, cree una carpeta en su SKETCHBOOKPATHlibaries con el nombre RunningAverage y coloque allí. h y. cpp. Opcionalmente, haga un subdirectorio de ejemplos para colocar la aplicación de ejemplo. Historia 2011-01-30: inicial versión 2011-02-28: fijo desaparecido destructor en archivo. h 2011-02-28: eliminado por defecto constructor 2012--. Añadido fillValue () refactorizado para la publicación 2014-07-03: agregó código de protección de la memoria - si la matriz interna no se puede asignar tamaño Se convierte en 0. Esto es para solucionar el problema descrito aquí - forum. arduino. cc/index. phptopic50473.msg1790086msg1790086 - Todo Pruebe extensivamente. Clase de la plantilla RunningAverage. h RunningAverage. cppArduino Tutorial: Filtro simple de paso alto, de paso de banda y de parada de banda En este mensaje we8217ll le mostrará cómo implementar un pase alto muy simple. Band-pass y band-stop en un Arduino. Es muy recomendable leer nuestro post anterior sobre los potenciómetros y el filtrado EMA (Exponential Moving Average), así como el de trazar varios valores en el IDE de Arduino antes de continuar ya que usamos circuitos similares, método de filtrado y método de trazado en este tutorial. Usamos un potenciómetro simple y el ADC para crear una señal que corremos a través de los filtros. Diferentes tipos de filtros. El eje X es la frecuencia y el eje Y es 8220gain8221, que es la cantidad de señal que se deja pasar (oa veces incluso se amplifica). (Fuente: Wikipedia) Filtro de paso alto El filtrado de paso alto es lo opuesto al filtrado de paso bajo. En lugar de suavizar una señal, se queda con todo el ruido y cambios rápidos. Cuando la señal original se estabiliza alrededor de cualquier valor constante, la señal de paso alto pasa a cero. 8230 ejecute un filtro de paso bajo y resta el resultado de la señal original. Existen muchas maneras más correctas y eficientes de implementar filtros de paso alto, pero la forma en que nos gusta hacerlo es ejecutar un filtro de paso bajo y restar el resultado de la señal original. De esta manera se quedará con sólo las altas frecuencias de la señal original. Esta es la forma en que lo implementamos en un Arduino Leonardo: Filtro de paso de banda Imagine que tiene una señal filtrada de paso alto que es demasiado ruidosa. Entonces un filtro de paso de banda puede ser para usted. Una señal filtrada de paso de banda es básicamente una señal filtrada paso alto suave. 8230 funcionan con dos filtros EMA separados con diferentes frecuencias de corte. Nuestra idea detrás de la implementación de un filtro de paso de banda es que ejecutamos dos filtros separados EMA con diferentes frecuencias de corte. A continuación, resta la señal filtrada con la frecuencia de corte más baja de la señal filtrada con la frecuencia de corte más alta. De esa manera nos quedamos con las frecuencias entre las dos frecuencias de corte, que son cruciales para obtener el rendimiento que desea del filtro. Es fácil ver la diferencia entre la señal de paso alto (azul) y la señal de paso de banda (naranja). Esta última es, en la práctica, una señal de paso alto filtrada de paso bajo. Filter-stop Filtering Este es el que podría ser el más difícil de envolver la cabeza. Este filtro sólo deja pasar las frecuencias más baja y más alta. Esto significa que se diferencia bastante del paso alto y del paso de banda, ya que no vuelve a cero todo el tiempo, sino que sigue el valor constante de la señal (como un filtro de paso bajo). Sin embargo, a diferencia de un filtro de paso bajo, también incluye altas frecuencias tales como ruido y cambios rápidos. 8230 resta la señal filtrada de paso de banda de la señal original. Nuestra idea detrás de esta implementación es restar la señal filtrada de paso de banda de la señal original. Esto acaba siendo un filtro de paso de banda inverso. Las dos frecuencias de corte son tan importantes aquí como en el filtro de paso de banda. En este gráfico se puede observar que en frecuencias bajas la señal de parada de banda (roja) se comporta como la señal de paso bajo (naranja), mientras que en frecuencias más altas se comporta más como la señal original (azul). Un fenómeno interesante en el que la señal de parada de banda en una respuesta de paso (próxima) sigue a la señal original antes, después de un transitorio, se comporta como la señal de baja pasada. El Capítulo Pequeño en el Fondo Como se ha mencionado anteriormente, Eficiente o más correcta para implementar este tipo de filtros. Sin embargo, si necesita algunas implementaciones de filtro rápidas y sucias, éstas podrían no ser demasiado pobres. Recuerde que el retardo en la parte inferior de los bucles en estos ejemplos es crucial tanto para la tasa de trazado como para las características del filtro. Pruébelo usted mismo, juegue con las frecuencias de corte y diviértase.
Promedio móvil (MA) El indicador MA (Indicador de media móvil) es uno de los indicadores técnicos modernos más antiguos y el indicador más utilizado en el análisis técnico. Un promedio móvil es un promedio de un cuerpo cambiante de datos, como se ve desde su nombre. Por ejemplo, una media móvil de 10 días se obtiene agregando los precios de cierre para los últimos 10 períodos que se están midiendo y dividiendo por 10. El término movimiento se utiliza como sólo los últimos 10 días se utilizan en la medición. Es por eso que el cuerpo de datos es promediado desplazado hacia adelante con cada día de negociación siguiente. La línea de media móvil se colocará directamente en el gráfico de cambio de precios. El promedio móvil se mide con un período predefinido definido. La sensibilidad del promedio móvil es más débil si el período es más largo. La probabilidad de señales falsas es mayor si el período es más corto. En general, el promedio móvil es una herramienta de suavizado. Los precios bajo...
Comments
Post a Comment