filtro de paso de banda digital con entradas paralelas

2

Tengo un ADC de alta velocidad conectado a un FPGA. El ADC está diseñado para que obtenga 16 muestras en cada ciclo de reloj FPGA (eso es muestras, no bits). Las 16 muestras provienen de un solo canal de entrada ADC, solo se recolectan a lo largo del tiempo y se envían como 1 gran parte (samp [0] es la muestra más antigua en el tiempo, samp [15] es la última muestra en el tiempo).

Necesito diseñar un filtro de paso de banda para el flujo paralelo, pero las implementaciones digitales que encontré en línea siempre asumen que tengo una sola muestra por ciclo de reloj (una muestra se introduce en la estructura del filtro, una muestra sale del filtro estructura). No puedo simplemente crear un reloj interno que sea 16 veces más rápido, ya que esta alta frecuencia sería demasiado rápida para el FPGA. Necesito poder filtrarlo, pero cada ciclo de reloj envío 16 muestras y muestro 16 muestras filtradas.

¿Puede alguien ayudarme a empezar? ¿Cómo se llamaría este tipo de filtro? ¿Hay algún truco matemático donde puedo construir 16 filtros digitales paralelos y luego hacer un poco de magia matemática en la salida (diezmado en el filtro de tiempo)?

    
pregunta user2913869

1 respuesta

2

Debería ser posible desenrollar esto, pero requerirá 64 * 16 = 1024 operaciones MAC por ciclo de reloj. Piénsalo así:

y[n] = a0 * x[n] + a1 * x[n-1] + ... + a63 * x[n-63]

Esa es la operación de filtro que necesitas hacer. Simplifiquemos eso un poco y solo consideremos los primeros 3 términos:

y[n] = a0 * x[n] + a1 * x[n-1] + a2 * x[n-2]

Cada -1 es un ciclo de retraso del reloj. Si obtiene un término por ciclo de reloj, puede implementarlo directamente con 3 multiplicadores y tres registros para almacenar los valores de x. Sin embargo, si obtiene dos valores x por ciclo de reloj, también debe producir dos valores y por ciclo de reloj. En ese caso, debe hacer algo como esto, suponiendo que sus valores de entrada son x [2n] yx [2n + 1]:

y[2n]   = a0 * x[2n]   + a1 * x[2n+1-2] + a2 * x[2n-2]
y[2n+1] = a0 * x[2n+1] + a1 * x[2n]     + a2 * x[2n+1-2]

Y puedes continuar esto para más entradas:

y[3n]   = a0 * x[3n]   + a1 * x[3n+2-3] + a2 * x[3n+1-3]
y[3n+1] = a0 * x[3n+1] + a1 * x[3n]     + a2 * x[3n+2-3]
y[3n+2] = a0 * x[3n+2] + a1 * x[3n+1]   + a2 * x[3n]

Tenga en cuenta que, en este caso, cada ciclo de retardo del reloj NO es un retardo de 1, por lo que he reescrito los términos como una suma del término original y el retardo. Entonces, por ejemplo, 2n se mueve a 2n-2 en el siguiente ciclo, y 2n + 1 va a 2n + 1-2 en el siguiente ciclo. Puede escalar este patrón a lo que necesite, sin embargo, le recomendaría que utilice un script de Python o similar para generar su HDL, ya que esto sería una pesadilla para implementar manualmente.

En general, necesitará operaciones de MAC de longitud de filtro de conteo paralelo * de muestras. Tenga en cuenta que, en algunos casos, es posible realizar dos operaciones MAC en un segmento DSP si tiene un prefiltro y su lista de coeficientes de filtro tiene una simetría que puede explotar. Por lo tanto, si está utilizando un chip Xilinx moderno, puede ser posible implementarlo en 512 segmentos DSP.

Editar: Aquí hay otra opción que es un poco loca, pero podría valer la pena verla. Es posible crear un filtro FIR sin utilizar ningún segmento DSP que sea razonablemente rápido, se denomina filtro aritmético distribuido. La compensación es que para un ancho de coeficiente de M bits, se requieren M ciclos de reloj para calcular la siguiente muestra. Ya estás haciendo 16 muestras en paralelo, podría valer la pena probar una implementación aritmética distribuida que sea 16 * M en paralelo. Muestras de 16 bits * 16 muestras solo serían 256 implementaciones de filtro DA paralelas. No he hecho mucho con la aritmética distribuida, así que no estoy seguro exactamente de qué tan bien se escala, pero es otra forma posible de implementar su filtro. No estoy seguro de qué FPGA está utilizando, pero es posible que no tenga suficientes multiplicadores para crear un diseño más estándar con cortes DSP y DA puede ser la única opción.

    
respondido por el alex.forencich

Lea otras preguntas en las etiquetas