Cómo escalar la salida del filtro FIR implementado en VHDL

1

Para un proyecto de escuela DSP necesitamos implementar efectos de sonido en un SPARTAN 6 FPGA usando VHDL.

Intentamos mantenerlo simple y comenzar con un simple filtro FIR (100Tab).

Como coeficientes utilizamos los creados por MATLAB FDATool.

La salida de MATLAB son valores hexadecimales de 8 bits (como: 01, fa, 00, fd, fb, 03, f4,0b, ed, ...).

El filtro parece estar funcionando. La respuesta al impulso se parece a la de un filtro FIR y la música sí suena filtrada.

Pero la distorsión es grande y la música no suena bien.

Creemos que esto se debe a una escala 'mala'.

La salida CODEC (entrada del filtro) tiene un ancho de 18 bits, la salida del filtro es de 48 bits. Pero la entrada de CODEC (salida de filtro escalada) es solo 18 bits.

¿Cómo debemos escalar la salida de 48 bits para que se ajuste a la entrada del CODEC de 18 bits?

Intentamos dividir la salida de 48 bits por un escalar (más o menos lo mismo que desplazar). También intentamos simplemente eliminar algunos valores de MSB (que estimamos que nunca se utilizarían) y luego dividir por un escalar.

Ninguno de estos métodos parece satisfactorio y la señal se distorsiona.

¿Habría un método mejor para escalar la salida? Pensamos en escalar los coeficientes, pero en su forma actual solo se convierten en 0 (¿sumar todos los coeficientes y dividir cada coeficiente con este valor, bueno para valores de puntos fijos pero no con estos valores (MATLAB)?).

EDIT:

Después de más investigación, parece que toda la distorsión se debe a la escala. Creo que esto se debe a la eliminación de MSB cuando se elige un pequeño escalar (no hay suficientes cambios, por lo que se elimina cierta información que contiene MSB). Pero también debido a la eliminación de LSB cuando se guardan todos los MSB.

Por lo tanto, mi pregunta sigue en pie: ¿Cuál sería la forma óptima de implementar la escala?

    
pregunta Devenda

1 respuesta

1

Normalmente, no debería haber ninguna escala a realizar .. Simplemente haga su filtro de entrada / salida de 18 bits de ancho ...

también, no olvide el filtro anti-aliasing en la salida ...

    
respondido por el Cristian Mardones

Lea otras preguntas en las etiquetas