Como otros han mencionado, debe considerar un filtro IIR (respuesta de impulso infinito) en lugar del filtro FIR (respuesta de impulso finito) que está utilizando ahora. Hay más, pero a primera vista los filtros FIR se implementan como convoluciones explícitas y filtros IIR con ecuaciones. El filtro IIR particular que uso mucho en los microcontroladores es un filtro de paso simple de un solo paso. Este es el equivalente digital de un simple filtro analógico R-C. Para la mayoría de las aplicaciones, éstas tendrán mejores características que el filtro de caja que está utilizando. La mayoría de los usos de un filtro de caja que he encontrado son el resultado de alguien que no presta atención en la clase de procesamiento de señal digital, no como resultado de necesitar sus características particulares. Si sólo desea atenuar las altas frecuencias que usted sabe son el ruido, un filtro de un solo paso de paso bajo es mejor. La mejor manera de implementar uno digitalmente en un microcontrolador es generalmente: FILT lt-- FILT FF (NEW-FILT) FILT es una pieza de estado persistente. Esta es la única variable persistente que necesita para calcular este filtro. NUEVO es el nuevo valor que se está actualizando el filtro con esta iteración. FF es la fracción del filtro. Que ajusta la pesadez del filtro. Mire este algoritmo y vea que para FF 0 el filtro es infinitamente pesado ya que la salida nunca cambia. Para FF 1, su realmente ningún filtro en absoluto, ya que la salida sólo sigue la entrada. Los valores útiles están intermedios. En los sistemas pequeños, se selecciona FF para que sea 1/2 N de modo que la multiplicación por FF se pueda realizar como un desplazamiento a la derecha por N bits. Por ejemplo, FF puede ser 1/16 y multiplicar por FF por lo tanto un desplazamiento a la derecha de 4 bits. De lo contrario este filtro sólo necesita un substracto y un agregado, aunque los números generalmente necesitan ser más anchos que el valor de entrada (más en precisión numérica en una sección separada a continuación). Normalmente tomo lecturas de A / D mucho más rápido de lo que se necesitan y aplico dos de estos filtros en cascada. Este es el equivalente digital de dos filtros R-C en serie, y se atenúa por 12 dB / octava por encima de la frecuencia de rolloff. Sin embargo, para las lecturas de A / D su generalmente más relevante mirar el filtro en el dominio del tiempo considerando su respuesta del paso. Esto le indica cuán rápido su sistema verá un cambio cuando cambie la cosa que está midiendo. Para facilitar el diseño de estos filtros (que sólo significa escoger FF y decidir cuantos de ellos a la cascada), uso mi programa FILTBITS. Se especifica el número de bits de cambio para cada FF en la serie de filtros en cascada y se calcula la respuesta de paso y otros valores. En realidad, por lo general, ejecutar esto a través de mi script wrapper PLOTFILT. Esto ejecuta FILTBITS, que hace un archivo CSV, luego traza el archivo CSV. Por ejemplo, aquí está el resultado de PLOTFILT 4 4: Los dos parámetros de PLOTFILT significan que habrá dos filtros en cascada del tipo descrito anteriormente. Los valores de 4 indican el número de bits de cambio para realizar la multiplicación por FF. Los dos valores FF son por lo tanto 1/16 en este caso. El rastro rojo es la respuesta de la etapa de la unidad, y es la cosa principal a mirar. Por ejemplo, esto le dice que si la entrada cambia instantáneamente, la salida del filtro combinado se establecerá en 90 del nuevo valor en 60 iteraciones. Si te importa el tiempo de solución de 95, entonces usted tiene que esperar alrededor de 73 iteraciones, y por 50 tiempo de solución sólo 26 iteraciones. El rastro verde le muestra la salida de una sola espiga de amplitud completa. Esto le da una idea de la supresión de ruido aleatorio. Parece que ninguna muestra causará más de un cambio de 2.5 en la salida. El rastro azul es dar una sensación subjetiva de lo que hace este filtro con el ruido blanco. Esto no es una prueba rigurosa, ya que no hay garantía de que exactamente el contenido de los números aleatorios elegidos como el ruido blanco de entrada para esta ejecución de PLOTFILT. Es sólo para darle una sensación áspera de cuánto será aplastado y lo suave que es. PLOTFILT, tal vez FILTBITS, y muchas otras cosas útiles, especialmente para el desarrollo de firmware PIC está disponible en la versión de software PIC Development Tools en mi página de descargas de software. Agregado acerca de la precisión numérica veo de los comentarios y ahora una nueva respuesta que hay interés en discutir el número de bits necesarios para implementar este filtro. Tenga en cuenta que la multiplicación por FF creará Log 2 (FF) nuevos bits por debajo del punto binario. En sistemas pequeños, FF se elige generalmente para ser 1/2 N de modo que esta multiplicación se realice realmente por un desplazamiento a la derecha de N bits. FILT es por lo tanto un entero de punto fijo. Tenga en cuenta que esto no cambia ninguna de las matemáticas desde el punto de vista de los procesadores. Por ejemplo, si está filtrando lecturas A / D de 10 bits y N 4 (FF 1/16), entonces necesita 4 bits de fracción por debajo de las lecturas A / D de enteros de 10 bits. Uno de los procesadores más, youd estar haciendo operaciones enteras de 16 bits debido a las lecturas de 10 bits A / D. En este caso, todavía puede hacer exactamente las mismas operaciones enteras de 16 bits, pero comience con las lecturas A / D a la izquierda desplazadas por 4 bits. El procesador no sabe la diferencia y no necesita. Hacer la matemática en todo enteros de 16 bits funciona si usted los considera 12,4 puntos fijos o enteros verdaderos de 16 bits (16,0 puntos fijos). En general, es necesario agregar N bits cada polo de filtro si no desea añadir ruido debido a la representación numérica. En el ejemplo anterior, el segundo filtro de dos tendría que tener 1044 18 bits para no perder información. En la práctica en una máquina de 8 bits que significa youd utilizar valores de 24 bits. Técnicamente sólo el segundo polo de dos necesitaría el valor más amplio, pero para la simplicidad del firmware usualmente utilizo la misma representación, y por lo tanto el mismo código, para todos los polos de un filtro. Normalmente escribo una subrutina o macro para realizar una operación de polo de filtro, y luego aplicarla a cada polo. Si una subrutina o macro depende de si los ciclos o la memoria del programa son más importantes en ese proyecto en particular. De cualquier manera, utilizo un cierto estado del rasguño para pasar NUEVO en la subrutina / macro, que pone al día FILT, pero también las cargas que en el mismo estado del rasguño que NUEVO estaba adentro. Esto hace fácil aplicar los postes múltiples puesto que el FILT actualizado de un poste es El NUEVO de la siguiente. Cuando una subrutina, es útil tener un puntero apuntan a FILT en el camino, que se actualiza justo después de FILT a la salida. De esta manera la subrutina opera automáticamente en filtros consecutivos en memoria si se llama varias veces. Con una macro usted no necesita un puntero puesto que usted pasa en la dirección para funcionar en cada iteración. Ejemplos de código Aquí hay un ejemplo de una macro como se describe anteriormente para un PIC 18: Y aquí hay una macro similar para un PIC 24 o dsPIC 30 o 33: Ambos ejemplos se implementan como macros utilizando mi preprocesador de ensamblador PIC. Que es más capaz que cualquiera de las instalaciones macro incorporadas. Clabacchio: Otro problema que debería haber mencionado es la implementación de firmware. Puede escribir una subrutina de filtro de paso bajo de un solo polo una vez, luego aplicarla varias veces. De hecho, por lo general escribo una subrutina de este tipo para tomar un puntero en la memoria al estado del filtro, a continuación, hacer avanzar el puntero para que pueda ser llamado en sucesión fácilmente para realizar filtros multipolares. Ndash Olin Lathrop Apr 20 12 at 15:03 1. Muchas gracias por sus respuestas - todas ellas. Decidí usar este filtro IIR, pero este filtro no se utiliza como un filtro LowPass estándar, ya que necesito valorar los valores promedio de los contadores y compararlos para detectar cambios en un determinado rango. Ya que estos Valores van de dimensiones muy diferentes dependiendo de Hardware que quería tomar un promedio para poder reaccionar a estos cambios específicos de hardware automáticamente. Ndash sensslen May 21 12 at 12:06 Si se puede vivir con la restricción de un poder de dos números de elementos a la media (es decir, 2,4,8,16,32 etc), entonces la división puede ser fácil y eficiente de una manera De bajo rendimiento micro sin división dedicada, ya que se puede hacer como un cambio de bits. Cada turno a la derecha es una potencia de dos por ejemplo: El OP pensó que tenía dos problemas, dividiendo en un PIC16 y la memoria para su amortiguador de anillo. Esta respuesta muestra que la división no es difícil. Es cierto que no aborda el problema de la memoria, pero el sistema SE permite respuestas parciales, y los usuarios pueden tomar algo de cada respuesta por sí mismos, o incluso editar y combinar las respuestas de otros. Dado que algunas de las otras respuestas requieren una operación de división, son igualmente incompletas, ya que no muestran cómo lograr esto de manera eficiente en un PIC16. Ndash Martin Apr 20 12 at 13:01 Hay una respuesta para un verdadero filtro de media móvil (también conocido como filtro de caja) con menos requisitos de memoria, si no te importa el downsampling. Su llamado un filtro integrador-peine en cascada (CIC). La idea es que usted tiene un integrador que tomar las diferencias de más de un período de tiempo, y la clave de ahorro de memoria dispositivo es que mediante el muestreo, no tienes que almacenar todos los valores del integrador. Se puede implementar utilizando el pseudocódigo siguiente: Su longitud media móvil efectiva es decimationFactorstatesize, pero sólo necesita mantener alrededor de las muestras de estado. Obviamente, puede obtener un mejor rendimiento si su stateize y decimationFactor son potencias de 2, de modo que la división y los operadores de resto se sustituye por cambios y máscara-ands. Postscript: Estoy de acuerdo con Olin que siempre debe considerar simples filtros IIR antes de un filtro de media móvil. Si no necesita la frecuencia-nulos de un filtro de vagón, un filtro de paso bajo de 1 o 2 polos probablemente funcione bien. Por otro lado, si está filtrando para fines de decimación (tomando una entrada de alta tasa de muestreo y promediándola para su uso por un proceso de baja velocidad) entonces un filtro de CIC puede ser justo lo que está buscando. (Especialmente si se puede usar statesize1 y evitar el ringbuffer en conjunto con sólo un único valor de integrador anterior) Theres algunos análisis en profundidad de la matemática detrás de la utilización de la primera orden IIR filtro que Olin Lathrop ya ha descrito en el Digital Signal Processing stack exchange (Incluye muchas imágenes bonitas). La ecuación para este filtro IIR es: Esto se puede implementar usando sólo números enteros y sin división usando el siguiente código (podría necesitar un poco de depuración como estaba escribiendo desde la memoria.) Este filtro se aproxima a una media móvil de Los últimos K muestras estableciendo el valor de alfa a 1 / K. Hacer esto en el código precedente definiendo BITS a LOG2 (K), es decir para K 16 fijado BITS a 4, para K 4 fijado BITS a 2, etc. (Mal verificar el código enumerado aquí tan pronto como consiga un cambio y Edite esta respuesta si es necesario.) Respondió Jun 23 12 at 4:04 Heres un filtro de paso bajo de un solo polo (promedio móvil, con frecuencia de corte CutoffFrequency). Muy simple, muy rápido, funciona muy bien, y casi no hay sobrecarga de memoria. Nota: Todas las variables tienen un alcance más allá de la función de filtro, excepto la pasada en newInput Nota: Este es un filtro de una sola etapa. Múltiples etapas se pueden conectar en cascada para aumentar la nitidez del filtro. Si utiliza más de una etapa, tendrá que ajustar DecayFactor (en relación con la frecuencia de corte) para compensar. Y, obviamente, todo lo que necesita son las dos líneas colocadas en cualquier lugar, no necesitan su propia función. Este filtro tiene un tiempo de aceleración antes de que el promedio móvil represente el de la señal de entrada. Si necesita omitir ese tiempo de aceleración, sólo puede inicializar MovingAverage al primer valor de newInput en lugar de 0 y esperar que el primer newInput no sea un outlier. (CutoffFrequency / SampleRate) tiene un intervalo entre 0 y 0,5. DecayFactor es un valor entre 0 y 1, por lo general cerca de 1. Flotadores de precisión simple son lo suficientemente buenos para la mayoría de las cosas, sólo prefiero dobles. Si necesitas pegarte con números enteros, puedes convertir DecayFactor y Factor de Amplitud en enteros fraccionarios, en los que el numerador se almacena como el entero, y el denominador es una potencia entera de 2 (así puedes cambiar a la derecha como el número Denominador en lugar de tener que dividir durante el bucle del filtro). Por ejemplo, si DecayFactor 0.99 y desea utilizar números enteros, puede establecer DecayFactor 0.99 65536 64881. Y luego, cada vez que multiplique por DecayFactor en su bucle de filtro, simplemente cambie el resultado 16. Para más información sobre esto, En línea, capítulo 19 sobre filtros recursivos: www. dspguide / ch19.htm PS Para el paradigma de la media móvil, un enfoque diferente para establecer DecayFactor y AmplitudeFactor que puede ser más relevante para sus necesidades, digamos que desea que el anterior, alrededor de 6 elementos promediados juntos, hacerlo discretamente, youd añadir 6 elementos y dividir por 6, por lo que Puede establecer el AmplitudeFactor a 1/6, y DecayFactor a (1.0 - AmplitudeFactor). Respondió May 14 12 at 22:55 Todo el mundo ha comentado a fondo sobre la utilidad de IIR vs FIR, y en la división de poder de dos. La identificación apenas tiene gusto de dar algunos detalles de la puesta en práctica. Lo siguiente funciona bien en pequeños microcontroladores sin FPU. No hay multiplicación, y si mantienes N una potencia de dos, toda la división es de un solo ciclo de desplazamiento de bits. Búfer de anillo FIR básico: guarda un buffer de ejecución de los últimos N valores, y una SUM corriente de todos los valores en el búfer. Cada vez que llega una nueva muestra, resta el valor más antiguo en el buffer de SUM, reemplázalo por el nuevo, añada la nueva muestra a SUM y SUM / N. Búfer de anillo IIR modificado: mantener una SUM corriente de los últimos N valores. Cada vez que llega una nueva muestra, SUM - SUM / N, agregue la nueva muestra, y la salida SUM / N. Si le estoy leyendo bien, usted está describiendo un filtro IIR de primer orden, el valor que está restar es el valor más antiguo que está cayendo, pero es el promedio de los valores anteriores. Los filtros IIR de primer orden pueden sin duda ser útiles, pero no estoy seguro de lo que quiere decir cuando sugiere que la salida es la misma para todas las señales periódicas. A una frecuencia de muestreo de 10KHz, alimentar una onda cuadrada de 100Hz en un filtro de caja de 20 etapas producirá una señal que se eleva uniformemente para 20 muestras, se sienta alto para 30, cae uniformemente para 20 muestras y se sienta bajo para 30. Un primer orden Filtro IIR. Ndash supercat Aug 28 13 a las 15:31 producirá una onda que empieza bruscamente a subir y gradualmente se nivela cerca (pero no en) el máximo de entrada, luego empieza a caer bruscamente y gradualmente se nivela cerca (pero no) del mínimo de entrada. Comportamiento muy diferente. Ndash supercat August 28 13 at 15:32 Un problema es que un simple promedio móvil puede o no ser útil. Con un filtro IIR, puede obtener un filtro agradable con relativamente pocos calcs. La FIR que usted describe sólo puede darle un rectángulo en el tiempo - un sinc en freq - y no puede administrar los lóbulos laterales. Puede ser bien vale la pena para lanzar en un número entero multiplica para que sea una buena sintonía sintonizable FIR si se puede ahorrar las garrapatas del reloj. Ndash Scott Seidman: No hay necesidad de multiplicar si uno simplemente tiene cada etapa de la FIR o la salida de la media de la entrada a esa etapa y su valor almacenado anterior, y luego almacenar la entrada (si se tiene El rango numérico, se podría usar la suma en lugar de la media). Si ese filtro es mejor que un filtro de caja depende de la aplicación (la respuesta de paso de un filtro de caja con un retardo total de 1ms, por ejemplo, tendrá un pico d2 / dt desagradable cuando el cambio de entrada, y 1ms más tarde, pero tendrá El mínimo posible d / dt para un filtro con un retraso total de 1ms). Ndash supercat Como dijo mikeselectricstuff, si realmente necesita reducir sus necesidades de memoria, y no te importa su respuesta al impulso que es un exponencial (en lugar de un pulso rectangular), me gustaría ir para un filtro de media móvil exponencial . Los uso ampliamente. Con ese tipo de filtro, usted no necesita ningún búfer. Usted no tiene que almacenar N muestras pasadas. Solo uno. Por lo tanto, sus requisitos de memoria se redujo por un factor de N. También, no necesita ninguna división para eso. Sólo multiplicaciones. Si tiene acceso a aritmética de punto flotante, use multiplicaciones de coma flotante. De lo contrario, haga multiplicaciones enteras y desplaza hacia la derecha. Sin embargo, estamos en 2012, y te recomiendo que utilices compiladores (y MCUs) que te permitan trabajar con números de coma flotante. Además de ser más eficiente de la memoria y más rápido (usted no tiene que actualizar los elementos en cualquier búfer circular), yo diría que es también más natural. Porque una respuesta de impulso exponencial coincide mejor con la forma en que se comporta la naturaleza, en la mayoría de los casos. Un problema con el filtro IIR como casi tocado por olin y supercat pero aparentemente ignorado por otros es que el redondeo hacia abajo introduce cierta imprecisión (y potencialmente sesgo / truncamiento). Suponiendo que N es una potencia de dos, y sólo se utiliza la aritmética entera, el desplazamiento a la derecha elimina sistemáticamente los LSB de la nueva muestra. Eso significa que la duración de la serie nunca podría ser, el promedio nunca tendrá en cuenta. Por ejemplo, supongamos una serie que disminuye lentamente (8, 8, 8, 7, 7, 7, 7, 6, 6) y asuma que el promedio es realmente 8 al principio. La muestra del puño 7 llevará la media a 7, independientemente de la resistencia del filtro. Sólo para una muestra. La misma historia para 6, etc. Ahora piensa en lo opuesto. La serie sube. El promedio se mantendrá en 7 para siempre, hasta que la muestra es lo suficientemente grande como para que cambie. Por supuesto, puede corregir el sesgo añadiendo 1 / 2N / 2, pero eso no resolverá realmente el problema de precisión. En ese caso la serie decreciente permanecerá para siempre en 8 hasta que la muestra sea 8-1 / 2 (N / 2). Para N4 por ejemplo, cualquier muestra por encima de cero mantendrá el promedio sin cambios. Creo que una solución para eso implicaría mantener un acumulador de los LSB perdidos. Pero no lo hice lo suficientemente lejos para tener el código listo, y no estoy seguro de que no perjudicaría la potencia IIR en algunos otros casos de serie (por ejemplo, si 7,9,7,9 promedio a 8 entonces). Olin, su cascada de dos etapas también necesitaría alguna explicación. ¿Se refiere a la celebración de dos valores medios con el resultado de la primera alimentado en el segundo en cada iteración. ¿Cuál es el beneficio de este procesamiento de señal / Filtros digitales Los filtros digitales son por esencia sistemas muestreados. Las señales de entrada y salida están representadas por muestras con igual distancia de tiempo. Los filtros de respuesta de implantes finitos (FIR) se caracterizan por una respuesta de tiempo que depende solamente de un número dado de las últimas muestras de la señal de entrada. En otros términos: una vez que la señal de entrada ha caído a cero, la salida del filtro hará lo mismo después de un número dado de períodos de muestreo. La salida y (k) viene dada por una combinación lineal de las últimas muestras de entrada x (k i). Los coeficientes b (i) dan el peso para la combinación. También corresponden a los coeficientes del numerador de la función de transferencia de filtro de dominio z. La figura siguiente muestra un filtro FIR de orden N 1: Para los filtros de fase lineal, los valores de los coeficientes son simétricos alrededor del medio y la línea de retardo puede plegarse alrededor de este punto medio para reducir el número de multiplicaciones. La función de transferencia de los filtros FIR sólo muestra un numerador. Esto corresponde a un filtro cero. Los filtros FIR normalmente requieren pedidos altos, en la magnitud de varios cientos. Por lo tanto, la elección de este tipo de filtros necesitará una gran cantidad de hardware o CPU. A pesar de esto, una razón para elegir una aplicación de filtro FIR es la capacidad de lograr una respuesta de fase lineal, que puede ser un requisito en algunos casos. Sin embargo, el diseñador principal tiene la posibilidad de elegir filtros IIR con una buena linealidad de fases en la banda de paso, como los filtros Bessel. O para diseñar un filtro allpass para corregir la respuesta de fase de un filtro IIR estándar. Moving Average Filters (MA) Los modelos de media móvil (MA) son modelos de proceso en la forma: MA procesos es una representación alternativa de los filtros FIR. Filtros Promedio Editar Un filtro que calcula el promedio de las N últimas muestras de una señal Es la forma más simple de un filtro FIR, con todos los coeficientes iguales. La función de transferencia de un filtro promedio está dada por: La función de transferencia de un filtro promedio tiene N ceros igualmente espaciados a lo largo del eje de frecuencia. Sin embargo, el cero en DC está enmascarado por el polo del filtro. Por lo tanto, hay un lóbulo más grande un DC que da cuenta de la banda de paso del filtro. Filtros integrados en cascada (CIC) Editar Un filtro integrador-peine en cascada (CIC) es una técnica especial para implementar filtros promedio colocados en serie. La colocación en serie de los filtros medios mejora el primer lóbulo en DC comparado con todos los otros lóbulos. Un filtro CIC implementa la función de transferencia de N filtros promedio, calculando cada uno el promedio de muestras R M. Su función de transferencia se da así: Los filtros CIC se utilizan para diezmar el número de muestras de una señal por un factor R o, en otros términos, para remuestrear una señal a una frecuencia más baja, arrojando muestras R 1 fuera de R. El factor M indica cuánto del primer lóbulo es utilizado por la señal. El número de etapas de filtro promedio, N. Indica qué tan bien se amortiguan otras bandas de frecuencia, a expensas de una función de transferencia menos plana alrededor de DC. La estructura de CIC permite implementar todo el sistema con sólo sumadores y registros, sin utilizar multiplicadores que sean codiciosos en términos de hardware. El downsampling por un factor de R permite aumentar la resolución de la señal mediante bits log 2 (R) (R). Filtros canónicos Los filtros canónicos implementan una función de transferencia de filtros con un número de elementos de retardo igual al orden del filtro, un multiplicador por coeficiente de numerador, un multiplicador por coeficiente de denominador y una serie de sumadores. Similarmente a los filtros activos, las estructuras canónicas, este tipo de circuitos mostraron ser muy sensibles a los valores de los elementos: un pequeño cambio en los coeficientes tuvo un gran efecto sobre la función de transferencia. Aquí también, el diseño de los filtros activos se ha desplazado de los filtros canónicos a otras estructuras tales como cadenas de secciones de segundo orden o filtros de salto de altura. Cadena de secciones de segunda orden Editar sección de segunda orden. A menudo referido como biquad. Implementa una función de transferencia de segundo orden. La función de transferencia de un filtro puede dividirse en un producto de funciones de transferencia, cada uno asociado a un par de polos y posiblemente un par de ceros. Si el orden de las funciones de transferencia es impar, entonces se debe añadir una sección de primer orden a la cadena. Esta sección está asociada al polo real y al cero real si hay uno. Directa-forma 1 directa-forma 2 directa-forma 1 transpuesta directa-forma 2 transpuesta La forma directa 2 transpuesta de la siguiente figura es especialmente interesante en términos de hardware necesario, así como la señal y el coeficiente de cuantificación. Filtros de Leapfrog Digital Editar Filtro Estructura Editar Filtros de salto digital basados en la simulación de filtros de salto analógico activo. El incentivo para esta elección es heredar de las excelentes propiedades de sensibilidad de banda de paso del circuito de escalera original. El siguiente filtro paso a paso de paso bajo todo-polo de 4º orden se puede implementar como un circuito digital reemplazando los integradores analógicos con acumuladores. El reemplazo de los integradores analógicos con acumuladores corresponde a simplificar la transformación Z a z 1 s T. Que son los dos primeros términos de la serie de Taylor de z e x p (s T). Esta aproximación es suficientemente buena para los filtros en los que la frecuencia de muestreo es mucho mayor que el ancho de banda de la señal. Transfer Function Edit La representación del espacio de estado del filtro anterior puede escribirse como: A partir de este conjunto de ecuaciones, se pueden escribir las matrices A, B, C, D como: A partir de esta representación, herramientas de procesamiento de señales como Octave o Matlab permiten trazar La respuesta de frecuencia de los filtros o para examinar sus ceros y polos. En el filtro de salto digital, los valores relativos de los coeficientes establecen la forma de la función de transferencia (Butterworth, Chebyshev.), Mientras que sus amplitudes establecen la frecuencia de corte. Dividiendo todos los coeficientes por un factor de dos desplaza la frecuencia de corte por una octava (también un factor de dos). Un caso especial es el Buterworth 3 ª orden filtro que tiene constantes de tiempo con valores relativos de 1, 1/2 y 1. Debido a eso, este filtro puede ser implementado en hardware sin ningún multiplicador, pero utilizando cambios en su lugar. Los modelos de autoregresión (AR) son modelos de procesos en la forma: Donde u (n) es la salida del modelo, x (n) es la entrada del modelo y u (n - m) son anteriores Muestras del valor de salida del modelo. Estos filtros se denominan autoregresivos porque los valores de salida se calculan sobre la base de regresiones de los valores de salida anteriores. Los procesos AR pueden ser representados por un filtro todo-polo. ARMA Filters Editar Autoregressive Moving-Average (ARMA) filtros son combinaciones de AR y MA filtros. La salida del filtro se da como una combinación lineal tanto de la entrada ponderada como de las muestras de salida ponderadas: los procesos ARMA pueden considerarse como un filtro IIR digital, con polos y ceros. Los filtros AR se prefieren en muchos casos porque pueden analizarse usando las ecuaciones de Yule-Walker. Los procesos MA y ARMA, por otra parte, pueden ser analizados por complicadas ecuaciones no lineales que son difíciles de estudiar y modelar. Si tenemos un proceso AR con coeficientes de ponderación a (a vector de a (n), a (n - 1).) Una entrada de x (n). Y una salida de y (n). Podemos usar las ecuaciones del yule-andador. Decimos que x2 es la varianza de la señal de entrada. Tratamos la señal de datos de entrada como una señal aleatoria, aunque sea una señal determinista, porque no sabemos cuál será el valor hasta que lo recibamos. Podemos expresar las ecuaciones de Yule-Walker como: Donde R es la matriz de correlación cruzada de la salida del proceso Y r es la matriz de autocorrelación de la salida del proceso: Variación Edición Podemos demostrar que: Podemos expresar la varianza de la señal de entrada como: , Expandiendo y sustituyendo por r (0). Podemos relacionar la varianza de salida del proceso con la varianza de entrada: Comprender los filtros integrados en combinación con filtros en cascada Guardar en Mi biblioteca Seguir Comentarios Richard LyonsMarch 31, 2005 El filtro previamente oscuro de CIC es ahora vital para muchas tareas y equipos de comunicaciones inalámbricas de alto volumen. El uso de filtros de CIC puede reducir costos, mejorar la confiabilidad y ayudar al rendimiento. Heres una cartilla para empezar. Los filtros digitales en cascada de integrador-peine (CIC) son implementaciones eficientes desde el punto de vista computacional de filtros de paso bajo de banda estrecha y están a menudo incorporados en implementaciones de hardware de decimación e interpolación en modernos sistemas de comunicaciones. Los filtros de CIC fueron introducidos a la comunidad de procesamiento de señales, por Eugene Hogenauer, hace más de dos décadas, pero sus posibilidades de aplicación han crecido en los últimos años. 1 Las mejoras en la tecnología de chip, el aumento en el uso de las técnicas de filtrado polifásico, los avances en las implementaciones de convertidores delta-sigma y el crecimiento significativo en las comunicaciones inalámbricas han despertado mucho interés en los filtros de CIC. Si bien el comportamiento y la implementación de estos filtros no es complicado, su cobertura ha sido escasa en la literatura de sistemas embebidos. Este artículo intenta aumentar el cuerpo de la literatura para los ingenieros de sistemas embebidos. Después de describir algunas aplicaciones para los filtros de CIC, Ill presentará su estructura y comportamiento, presentará el desempeño del dominio de frecuencia de los filtros CIC y discutirá varios aspectos prácticos importantes en la construcción de estos filtros. Aplicaciones de filtro CIC Los filtros CIC son adecuados para el filtrado antialiasing antes de la diezmación (reducción de la frecuencia de muestreo), como se muestra en la Figura 1a y para el filtrado antiimagen para señales interpoladas (aumento de la frecuencia de muestreo) como en la Figura 1b. Ambas aplicaciones están asociadas con un filtrado de alta velocidad de datos, como modulación en cuadratura de hardware y demodulación en sistemas inalámbricos modernos y convertidores A / D y D / A delta-sigma. Figura 1: Aplicaciones del filtro CIC Haga clic en la imagen para ampliarla. Debido a que sus sobres de respuesta de magnitud de frecuencia son sin (x) / x, los filtros de CIC normalmente son seguidos o precedidos por filtros FIR de línea de retardo de paso lineal de paso lineal de mayor rendimiento cuyas tareas son compensar los filtros CIC no - banda de paso plana. Esa arquitectura de filtro en cascada tiene valiosos beneficios. Por ejemplo, con la decimación, puede reducir en gran medida la complejidad computacional del filtro de paso bajo de banda estrecha en comparación con si youd utilizó un único filtro de respuesta de impulso finito (FIR) de paso bajo. Además, el filtro FIR de seguimiento funciona a velocidades de reloj reducidas minimizando el consumo de energía en aplicaciones de hardware de alta velocidad. Una ventaja crucial en el uso de filtros CIC, y una característica que los hace populares en los dispositivos de hardware, es que no requieren multiplicación. La aritmética necesaria para implementar estos filtros digitales es estrictamente adiciones y sustracciones solamente. Dicho esto, vamos a ver cómo funcionan los filtros CIC. Los filtros CIC de filtro de acumulación recursiva se originan de la noción de un filtro recursivo de suma corriente. Que es en sí misma una forma eficiente de un medidor móvil no recursivo. Recuerde el proceso de media móvil de punto D estándar en la Figura 2a. Aquí vemos que D -1 sumaciones (más una multiplicar por 1 / D) son necesarias para calcular la salida promedio y (n). La salida en tiempo de los filtros de media móvil D - point se expresa como: donde n es nuestro índice del dominio del tiempo. La expresión de dominio z para este averager móvil es: mientras que su función de transferencia de z-dominio H (z) es: Proporciono estas ecuaciones para no complicar las cosas, sino porque son útiles. La ecuación 1 nos dice cómo construir un medidor móvil, y la ecuación 3 está en la forma utilizada por el software de procesamiento de señales comerciales para modelar el comportamiento del dominio de frecuencia del medidor móvil. El siguiente paso en nuestro camino hacia la comprensión de los filtros CIC es considerar una forma equivalente del averager móvil, el filtro recursivo de la suma corriente representado en la Figura 2b. Aquí vemos que se añade la muestra de entrada actual x (n), y la muestra de entrada más antigua x (n - D) se resta de la media de salida anterior y (n - 1). Se llama recursiva porque tiene retroalimentación. Cada muestra de salida de filtro se retiene y se utiliza para calcular el siguiente valor de salida. La ecuación de diferencia de los filtros de la suma corriente es: teniendo la función de transferencia de H (z) de az de: Utilizamos la misma variable de H (z) para las funciones de transferencia del filtro de media móvil y del filtro de suma de carrera recursiva porque su Funciones de transferencia son iguales entre sí Su verdadero. La ecuación 3 es la expresión no recursiva y la ecuación 5 es la expresión recursiva para un medidor de punto D. La prueba matemática de esto se puede encontrar en mi libro sobre procesamiento de señal digital, pero en breve Ill demostrará que la equivalencia con un ejemplo. 2 Heres por qué nos preocupamos por los filtros recursive corriente-suma: el estándar promedio móvil en la Figura 2a debe realizar D -1 adiciones por muestra de salida. El filtro recursivo de suma corriente tiene la ventaja de que sólo se requiere una suma y una suma por muestra de salida, independientemente de la longitud de retardo D. Esta eficiencia computacional hace que el filtro recursivo de corriente-suma sea atractivo en muchas aplicaciones que buscan la reducción del ruido a través del promedio. A continuación veremos cómo un filtro CIC es, en sí mismo, un filtro recursivo de suma corriente. CIC filter structures If we condense the delay-line representation and ignore the 1/ D scaling in Figure 2b we obtain the classic form of a 1st-order CIC filter, whose cascade structure is shown in Figure 2c. The feedforward portion of the CIC filter is called the comb section, whose differential delay is D . while the feedback section is typically called an integrator . The comb stage subtracts a delayed input sample from the current input sample, and the integrator is simply an accumulator. The CIC filters difference equation is: and its z - domain transfer function is: Figure 3: Single-stage CIC filter time-domain responses when D 5 View full-sized image To see why the CIC filter is of interest, first we examine its time-domain behavior, for D 5, shown in Figure 3. If a unit-impulse-sequence, a unity-valued sample followed by many zero-valued samples, was applied to the comb stage, that stages output is as shown in Figure 3a. Now think, what would be the output of the integrator if its input was the comb stages impulse response The initial positive impulse from the comb filter starts the integrators all-ones output, as in Figure 3b. Then, D samples later, the negative impulse from the comb stage arrives at the integrator to zero all further CIC filter output samples. The key issue is that the combined unit-impulse response of the CIC filter, being a rectangular sequence, is identical to the unit-impulse responses of a moving-average filter and the recursive running-sum filter. (Moving averagers, recursive running-sum filters, and CIC filters are close kin. They have the same z - domain pole/zero locations, their frequency magnitude responses have identical shapes, their phase responses are identical, and their transfer functions differ only by a constant scale factor.) If you understand the time-domain behavior of a moving averager, then you now understand the time-domain behavior of the CIC filter in Figure 2c. Figure 4: Characteristics of a single-stage CIC filter when D 5 View full-sized image The frequency magnitude and linear-phase response of a D 5 CIC filter is shown in Figure 4a where the frequency s is the input-signal sample rate in Hz. We can obtain an expression for the CIC filters frequency response by evaluating Equation 7s H cic ( z ) transfer function on the z - planes unit circle, by setting z e j 2 . yielding: Using Eulers identity 2 j sin() e j - e j . we can write: If we ignore the phase factor in Equation 9, that ratio of sin() terms can be approximated by a sin( x )/ x function. This means the CIC filters frequency magnitude response is approximately equal to a sin( x )/ x function centered at 0Hz as we see in Figure 4a. (This is why CIC filters are sometimes called sinc filters.) Digital-filter designers like to see z - plane pole/zero plots, so we provide the z - plane characteristics of a D 5 CIC filter in Figure 4c, where the comb filter produces D zeros, equally spaced around the unit-circle, and the integrator produces a single pole canceling the zero at z 1. Each of the combs zeros, being a D th root of 1, are located at z ( m ) e j 2 m / D . where m 0, 1, 2. D -1, corresponding to a magnitude null in Figure 4a. The normally risky situation of having a filter pole directly on the unit circle need not trouble us here because there is no coefficient quantization error in our H cic ( z ) transfer function. CIC filter coefficients are ones and can be represented with perfect precision with fixed-point number formats. Although recursive, happily CIC filters are guaranteed stable, linear-phase shown in Figure 4b, and have finite-length impulse responses. At 0Hz (DC) the gain of a CIC filter is equal to the comb filter delay D . This fact, whose derivation is available, will be important to us when we actually implement a CIC filter in hardware. 2 Figure 5: Single-stage CIC filters used in decimation and interpolation View full-sized image Again, CIC filters are primarily used for antialiasing filtering prior to decimation and for anti-imaging filtering for interpolated signals. With those notions in mind we swap the order of Figure 2cs comb and integratorwere permitted to do so because those operations are linearand include decimation by a sample rate change factor R in Figure 5a. (You may wish to prove that the unit-impulse response of the integrator/comb combination, prior to the sample rate change, in Figure 5a is equal to that in Figure 3c.) In most CIC filter applications the rate change R is equal to the combs differential delay D . but well keep them as separate design parameters for now. Figure 6: Magnitude response of a 1st-order, D 8, decimating CIC filter: before decimation aliasiing after R 8 decimation View full-sized image The decimation operation R means discard all but every R th sample, resulting in an output sample rate of s, out s, in / R . To investigate a CIC filters frequency-domain behavior in more detail, Figure 6a shows the frequency magnitude response of a D 8 CIC filter prior to decimation. The spectral band, of width B . centered at 0Hz is the desired passband of the filter. A key aspect of CIC filters is the spectral folding that takes place due to decimation. Those B - width shaded spectral bands centered about multiples of s, in / R in Figure 6a will alias directly into our desired passband after decimation by R 8 as shown in Figure 6b. Notice how the largest aliased spectral component, in this example, is roughly 16dB below the peak of the band of interest. Of course the aliased power levels depend on the bandwidth B the smaller B is, the lower the aliased energy after decimation. Figure 7: 1st-order, D R 8, interpolating CIC filter spectra: input spectrum output spectral images View full-sized image Figure 5b shows a CIC filter used for interpolation where the R symbol means insert R -1 zeros between each x ( n ) sample, yielding a y ( n ) output sample rate of s, out R s, in. (In this CIC filter discussion, interpolation is defined as zeros-insertion followed by filtering.) Figure 7a shows an arbitrary baseband spectrum, with its spectral replications, of a signal applied to the D R 8 interpolating CIC filter of Figure 5b. The filters output spectrum in Figure 7b shows how imperfect filtering gives rise to the undesired spectral images. After interpolation, unwanted images of the B - width baseband spectrum reside at the null centers, located at integer multiples of s, out / R . If we follow the CIC filter with a traditional lowpass tappeddelay-line FIR filter, whose stopband includes the first image band, fairly high image rejection can be achieved. Figure 8: 3rd-order CIC decimation filter structure, and magnitude response before decimation when D R 8 View full-sized image Improving CIC attenuation The most common method to improve CIC filter anti-aliasing and image-reject attenuation is by increasing the order M of the CIC filter using multiple stages. Figure 8 shows the structure and frequency magnitude response of a 3rd-order ( M 3) CIC decimating filter. Notice the increased attenuation at s, out / R in Figure 8b compared with the 1st-order CIC filter in Figure 6a. Because the M 3 CIC stages are in cascade, the overall frequency magnitude response will be the product of their individual responses or: The price we pay for improved anti-alias attenuation is additional hardware adders and increased CIC filter passband droop. An additional penalty of increased filter order comes from the gain of the filter, which is exponential with the order. Because CIC filters generally must work with full precision to remain stable, the number of bits in the adders is M log 2 ( D ), which means a large data word-width penalty for higher order filters. Even so, this multistage implementation is common in commercial integrated circuits, where an M th-order CIC filter is often called a sinc M filter. Figure 9: Single-stage CIC filter implementations: for decimation for interpolation View full-sized image Building a CIC filter In CIC filters, the comb section can precede, or follow, the integrator section. Its sensible, however, to put the comb section on the side of the filter operating at the lower sample rate to reduce the storage requirements in the delay. Swapping the comb filters from Figure 5 with the rate-change operations results in the most common implementation of CIC filters, as shown in Figure 9. Notice the decimation filters comb section now has a delay length (differential delay) of N D / R . Thats because an N - sample delay after decimation by R is equivalent to a D - sample delay before decimation by R . Likewise for the interpolation filter an N - sample delay before interpolation by R is equivalent to a D - sample delay after interpolation by R . Those Figure 9 configurations yield two major benefits: first, the comb sections new differential delay is decreased to N D / R reducing data storage requirements second, the comb section now operates at a reduced clock rate. Both of these effects reduce hardware power consumption. Figure 10: CIC decimation filter responses: for various values of differential delay N . when R 8 for two decimation factors when N 2 View full-sized image The comb sections differential delay design parameter N is typically 1 or 2 for high sample-rate ratios as is often used in up/down-converters. N effectively sets the number of nulls in the frequency response of a decimation filter, as shown in Figure 10a. An important characteristic of a CIC decimator is that the shape of the filter response changes very little, as shown in Figure 10b, as a function of the decimation ratio. For values of R larger than roughly 16, the change in the filter shape is negligible. This allows the same compensation FIR filter to be used for variable-decimation ratio systems. The CIC filter suffers from register overflow because of the unity feedback at each integrator stage. The overflow is of no consequence as long as the following two conditions are met: the range of the number system is greater than or equal to the maximum value expected at the output, and the filter is implemented with twos complement (nonsaturating) arithmetic. Because a 1st-order CIC filter has a gain of D NR at 0Hz (DC), M cascaded CIC decimation filters have a net gain of ( NR ) M . Each additional integrator must add another NR bits width for stages. Interpolating CIC filters have zeros inserted between input samples reducing its gain by a factor of 1/ R to account for the zero-valued samples, so the net gain of an interpolating CIC filter is ( NR ) M / R . Because the filter must use integer arithmetic, the word widths at each stage in the filter must be wide enough to accommodate the maximum signal (full-scale input times the gain) at that stage. Although the gain of an Mth-order CIC decimation filter is ( NR ) M individual integrators can experience overflow. (Their gain is infinite at DC.) As such, the use of twos complement arithmetic resolves this overflow situation just so long as the integrator word width accommodates the maximum difference between any two successive samples (in other words, the difference causes no more than a single overflow). Using the twos complement binary format, with its modular wrap-around property, the follow-on comb filter will properly compute the correct difference between two successive integrator output samples. For interpolation, the growth in word size is one bit per comb filter stage and overflow must be avoided for the integrators to accumulate properly. So, we must accommodate an extra bit of data word growth in each comb stage for interpolation. There is some small flexibility in discarding some of the least significant bits (LSBs) within the stages of a CIC filter, at the expense of added noise at the filters output. The specific effects of this LSB removal are, however, a complicated issue you can learn more about the issue by reading Hogenauers paper. 1 While the preceding discussion focused on hard-wired CIC filters, these filters can also be implemented with programmable fixed-point DSP chips. Although those chips have inflexible data paths and word widths, CIC filtering can be advantageous for high sample-rate changes. Large word widths can be accommodated with multiword additions at the expense of extra instructions. Even so, for large sample-rate change factors the computational workload per output sample, in fixed-point DSP chips, may be small. Compensation filters In typical decimation/interpolation filtering applications we want reasonably flat passband and narrow transition-region filter performance. These desirable properties are not provided by CIC filters alone, with their drooping passband gains and wide transition regions. We alleviate this problem, in decimation for example, by following the CIC filter with a compensation nonrecursive FIR filter, as in Figure 1a, to narrow the output bandwidth and flatten the passband gain. Figure 11: Compensation FIR filter responses with a 1st-order decimation CIC filter with a 3rd-order decimation View full-sized image The compensation FIR filters frequency magnitude response is ideally an inverted version of the CIC filter passband response similar to that shown by the dashed curve in Figure 11a for a simple three-tap FIR filter whose coefficients are -1/16, 9/8, -1/16. With the dotted curve representing the uncompensated passband droop of a 1st-order R 8 CIC filter, the solid curve represents the compensated response of the cascaded filters. If either the passband bandwidth or CIC filter order increases the correction becomes greater, requiring more compensation FIR filter taps. An example of this situation is shown in Figure 11b where the dotted curve represents the passband droop of a 3rd-order R 8 CIC filter and the dashed curve, taking the form of x/sin(x)3, is the response of a 15-tap compensation FIR filter having the coefficients -1, 4, -16, 32, -64, 136, -352, 1312, -352, 136, -64, 32, -16, 4, -1. A wideband correction also means signals near s, out /2 are attenuated with the CIC filter and then must be amplified in the correction filter, adding noise. As such, practitioners often limit the passband width of the compensation FIR filter to roughly 1/4 the frequency of the first null in the CIC-filter response. Those dashed curves in Figure 11 represent the frequency magnitude responses of compensating FIR filters within which no sample-rate change takes place. (The FIR filters input and output sample rates are equal to the s, out output rate of the decimating CIC filter.) If a compensating FIR filter were designed to provide an additional decimation by two, its frequency magnitude response would look similar to that in Figure 12, where gt s, in is the compensation filters input sample rate. Figure 12: Frequency magnitude response of a decimate-by-2 compensation FIR filter View full-sized image Advanced techniques Heres the bottom line of our CIC-filter discussion: a decimating CIC filter is merely a very efficient recursive implementation of a moving-average filter, with NR taps, whose output is decimated by R . Likewise, the interpolating CIC filter is insertion of R -1 zero samples between each input sample followed by an NR - tap moving-average filter running at the output sample rate s, out . The cascade implementations in Figure 1 result in total computational workloads far less than using a single FIR filter alone for high sample-rate-change decimation and interpolation. CIC filter structures are designed to maximize the amount of low-sample-rate processing to minimize power consumption in high-speed hardware applications. Again, CIC filters require no multiplication their arithmetic is strictly addition and subtraction. Their performance allows us to state that, technically speaking, CIC filters are lean, mean filtering machines. In closing, there are ways to build nonrecursive CIC filters that ease the word-width growth problem of the traditional recursive CIC filters. Those advanced CIC filter architectures are discussed in my book Understanding Digital Signal Processing, 2E. 2 Richard Lyons is a consulting systems engineer and lecturer with Besser Associates in Mountain View, Ca. He is the author of Understanding Digital Signal Processing 2/E and an associate editor for the IEEE Signal Processing Magazine where he created and edits the DSP Tips amp Tricks column. You can reach him at r. lyonsieee. org. Hogenauer, Eugene. An Economical Class of Digital Filters For Decimation and Interpolation, IEEE Transactions on Acoustics, Speech and Signal Processing . Vol. ASSP-29, pp. 155-162, April 1981. Lyons, Richard, Understanding Digital Signal Processing, 2nd Ed . Prentice Hall, Upper Saddle River, New Jersey, 2004, pp. 556-561.Example of Cascaded Integrator Comb filter in Matlab Equivalence of Moving Average and CIC filter Let me briefly share my understanding on the cascaded integrator comb (CIC) filter, thanks to the nice article. For understanding the cascaded integrator comb (CIC) filter, firstly let us understand the moving average filter, which is accumulation latest samples of an input sequence . Figure: Moving average filter The frequency response of the moving average filter is: Moving Average filter N 10 xn sin(2pi0:.1:10) hn ones(1,N) y1n conv(xn, hn) transfer function of Moving Average filter hF fft(hn,1024) plot(-512:511/1024, abs(fftshift(hF))) xlabel(8216Normalized frequency8217) ylabel(8216Amplitude8217) title(8216frequency response of Moving average filter8217) Figure: Frequency response of moving average filter The moving average filter which is implemented as a direct form FIR type as shown above can also be implemented in a recursive form. It consists of a comb stage whose output is difference of the current sample and the sample which came prior. The difference is successively accumulated by an integrator stage . Together the circuits behave identically as the moving average filter described prior. It can be proved using a simple proof that: Figure: Cascaded Integrator Comb Filter Bit more details can be found in Sec2.5.2 Recursive and Non Recursive Realization of FIR systems in DSP-PROAKIS. As the system is linear, the position of the integrator and comb stage can be swapped. Now, using a small Matlab code snippet let us verify that the output from CIC realization is indeed the same as obtained from moving average filter. Implementing Cascaded Integrator Comb filter with the comb section following the integrator stage N 10 delayBuffer zeros(1,N) intOut 0 xn sin(2pi0:.1:10) for ii 1:length(xn) comb section combOut xn(ii) 8211 delayBuffer(end) delayBuffer(2:end) delayBuffer(1:end-1) delayBuffer(1) xn(ii) integrator intOut intOut combOut y2n(ii) intOut end err12 y1n(1:length(xn)) 8211 y2n err12dB 10log10(err12err128242/length(err12)) identical outputs close all Implementing Cascaded Integrator Comb filter with the integrator section following the comb stage N 10 delayBuffer zeros(1,N) intOut 0 xn sin(2pi0:.1:10) for ii 1:length(xn) integrator intOut intOut xn(ii) comb section combOut intOut 8211 delayBuffer(end) delayBuffer(2:end) delayBuffer(1:end-1) delayBuffer(1) intOut y3n(ii) combOut end err13 y1n(1:length(xn)) 8211 y3n err13dB 10log10(err13err138242/length(err13)) identical outputs The outputs are matching. The recursive realization of the FIR filter as described above helps to achieve the same result with less hardware. Using CIC filter for decimation Typically, decimation to a lower sampling rate is achieved by taking one sample out of every samples. There exists an anti-aliasing filter to remove the un-desired spectrum before decimation. Figure: CIC filters for decimation As shown above, the same output can be achieved by having the decimation stage between integrator stage and comb stage. This helps in reducing the delay buffer depth requirement of the comb section. Using a small Matlab code snippet, let us check whether both the implementations behave identically. For decimation, having the CIC filtering before taking every other sample D 2 decimation factor N 10 delay buffer depth delayBuffer zeros(1,N) init intOut 0 xn sin(2pi0:.1:10) y6n for ii 1:length(xn) comb section combOut xn(ii) 8211 delayBuffer(end) delayBuffer(2:end) delayBuffer(1:end-1) delayBuffer(1) xn(ii) integrator intOut intOut combOut y6n y6n intOut end y6n y6n(1:D:end) taking every other sample 8211 decimation For efficient hardware implementation of the CIC filter, having the integrator section first, decimate, then the comb stage Gain. Reduced the delay buffer depth of comb section from N to N/D D 2 decimation factor N 10 delay buffer depth delayBuffer zeros(1,N/D) intOut 0 xn sin(2pi0:.1:10) input y7n output for ii 1:length(xn) integrator intOut intOut xn(ii) if mod(ii,2)1 comb section combOut intOut 8211 delayBuffer(end) delayBuffer(2:end) delayBuffer(1:end-1) delayBuffer(1) intOut y7n y7n combOut end end err67 y6n 8211 y7n err67dB 10log10(err67err678242/length(err67)) The outputs are matching. Using CIC filters for interpolation Typically, interpolation to a higher sampling rate achieved by inserting zeros between consecutive samples followed by filtering (for removing the images). Figure: Using CIC filters for interpolation As shown above, the same result can be achieved by having the upsampling stage between comb and integrator stage. This helps in reducing the delay buffer depth requirement of the comb section. Using a small Matlab code snippet, let us check whether both the implementations behave identically. For interpolation, insert the zeros followed by CIC filtering xn sin(2pi0:.1:10) I 2 interpolation factor N 10 filter buffer depth xUn xn zeros(1,length(xn)) xUn xUn(:).8217 zeros inserted delayBuffer zeros(1,N) intOut 0 for ii 1:length(xUn) comb section combOut xUn(ii) 8211 delayBuffer(end) delayBuffer(2:end) delayBuffer(1:end-1) delayBuffer(1) xUn(ii) integrator intOut intOut combOut y4n(ii) intOut For efficient hardware implementation of CIC filter for interpolation, having the comb section, then zeros insertion, followed by integrator section Gain. Reduced the delay buffer depth of comb section from N to N/I I 2 interpolation factor N 10 original delay buffer depth delayBuffer zeros(1,N/I) new delay buffer of N/I intOut 0 xn sin(2pi0:.1:10) y5n for ii 1:length(xn) comb section combOut xn(ii) 8211 delayBuffer(end) delayBuffer(2:end) delayBuffer(1:end-1) delayBuffer(1) xn(ii) upsampling combOutU combOut zeros(1,1) for jj 0:I-1 integrator intOut intOut combOutU(jj1) y5n y5n intOut end err45 y4n 8211 y5n err45dB 10log10(err45err458242/length(err45)) outputs matching The outputs are matching. One one question: Upsampling by a factor which is achieved by repeating the sample times result in the same output as obtained by the CIC filter implementation described above (see previous post trying to describe that zero-order hold for interpolation ). Considering so, do we need to have the filtering hardware when doing interpolation I do not think so. If I have some additional thoughts, I will update. References: Please click here to SUBSCRIBE to newsletter and download the FREE e-Book on probability of error in AWGN. Thanks for visiting Happy learning.
No comments:
Post a Comment