el 01-12-2012 07:00 AM
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.
¡Resuelto! Ir a solución.
el 01-13-2012 06:05 PM
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
el 01-15-2012 10:25 AM
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.
el 01-15-2012 05:21 PM
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
el 01-16-2012 05:14 PM
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.
el 01-25-2012 03:04 AM
Hola Shaka en que momento te genera este error? al compilar?
Saludos