Discusiones sobre Productos NI

cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 

Como crear filtro digital IIR de orden 8 en FPGA target

¡Resuelto!
Ir a solución

Buenos dias,

 

Estoy intentado crear un filtro digital IIR Butterworth de orden 8 pasabajo, dentro del campo del FPGA target. 

El projeto inicia adquiriendo señales ruidosas en 3 canales (NI-9205), adquirida en modo diferencial, luego cada señal debe de pasar por un filtro digital de IIR(Butterworth orden 8), y posteriormente trabajar esta señal en el campo Host (RT).

 

Caracteristicas:

cRio 9012

cRio-9104

NI-9205

 

Adjunto mi projecto.

En el projecto tengo configurado un Filtro ButterWorth de 4 orden, no me permite de mas.

 

 

Gracias de antemano, por su atención.

--> Shaka__
0 kudos
Mensaje 1 de 6
3.603 Vistas
Solución
Aceptado por el autor del tema Ger@rdo

Hola  Shaka que problema te está dando cuando compilas de mayor orden? no entran en el FPGA o no da tiempo de que se ejecuten??

    Si el problema es que no se pueden ejecutar a tiempo para dar la velocidad que necesitas es decir tu necesitas que se ejecute tu programa en 1 segundo y cada tap del filtro toma .15 ms para poder ejecutar las 8 necesitas 2 segundos, una técnica es usar pipelining en la cual divides tus operaciones en distintos ciclos mediante el uso de shift registers o feedback nodes, en esta en el primer ciclo se realizan 4 tabs y en el segundo las siguientes 4, la desventaja de esto es que genera retraso en tu señal pues la salida en el primer ciclo no sirve sino hasta el segundo.

Estos links te pueden ser de utilidad:

Optimizing your LabVIEW FPGA VIs: Parallel Execution and Pipelining

An Introduction to High-Throughput DSP in LabVIEW FPGA

Advanced FPGA Programming - Optimizing for Speed and Size

Saludos

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 2 de 6
3.593 Vistas

Hola Benjamin,

 

Gracias por tu atención.

Aquel icono Butterworth Filter me permite como maximo utilizar un filtro de orden 4, y yo estoy requeriendo utilizar un filtro de orden 8 para cada canal.

Estaba pensando colocar dos filtros en cascada para obtener orden 8, pero eso me traer atrazos en la señal.

Esta tecnica pipelining es interesante, pero como podria utilizarlo para diseñar un filtro IIR Butterworth de orden 8. Intentare hacer algo con la informacion que me enviastes, gracias.

 

 

 

--> Shaka__
0 kudos
Mensaje 3 de 6
3.579 Vistas

 Hola shaka con el pipelining precisamente haces eso de poner 2 bloques de 4 tabs en cascada para generarlo, el retraso no lo puedes evitar debido a como funcionan los Filtros IIR ya que cada tab agrega retrasos. La diferencia entre usar pipelining o ponerlo directo en el mismo ciclo es la velocidad que te va a dar tu ciclo. Por ejemplo supongamos que cada tab tarda 1 segundo, si tu tienes los 8 sin pipelining, la velocidad máxima que alcanza tu ciclo es de 1 ciclo cada 8 segundos, pero si usas pipelining de 4 y 4 tu ciclo va a poder correr 1 vez cada 4 segundos, pero la primer iteración te genera datos incompletos. EL retraso total que va recibir tu señal es el mismo en los dos casos.

 Para usar pipelinig, simplemente colocarías el bloque con 4 tabs y ese lo mandas a un shift register o un feedback node, y la salida de este al siguiente bloque con 4.

Saludos

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 4 de 6
3.576 Vistas

Hola benjamin

 

Modifique con los cambios que mencionastes, pero ahora me da un error, e otra pregunta, sabes como puedo medir el tiempo para cada ciclo del while?

 

Te adjunto la imagen del error que me envia.

Tambien el projecto.

 

Saludos.

--> Shaka__
Descargar todos
0 kudos
Mensaje 5 de 6
3.569 Vistas

Hola Shaka en que momento te genera este error? al compilar?

Saludos

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 6 de 6
3.530 Vistas