Real Time FIR Filter - Distinctive Excellence award winner :)

Dependencies:   mbed

Committer:
Gonzakpo
Date:
Sat Aug 13 17:35:52 2011 +0000
Revision:
0:b3e50e98acac

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Gonzakpo 0:b3e50e98acac 1
Gonzakpo 0:b3e50e98acac 2 #ifndef CONFIG_H_
Gonzakpo 0:b3e50e98acac 3 #define CONFIG_H_
Gonzakpo 0:b3e50e98acac 4
Gonzakpo 0:b3e50e98acac 5 /********************************CONFIGURACION**********************************/
Gonzakpo 0:b3e50e98acac 6
Gonzakpo 0:b3e50e98acac 7 #define BLOCKSIZE 1917 /* Tama�o del bloque (en words) a procesar */
Gonzakpo 0:b3e50e98acac 8
Gonzakpo 0:b3e50e98acac 9 #define COEFF_AMOUNT 256 /* Cantidad de coeficientes maxima del (o de los) filtros. */
Gonzakpo 0:b3e50e98acac 10 /* Este valor determina el largo de los buffers para procesamiento */
Gonzakpo 0:b3e50e98acac 11
Gonzakpo 0:b3e50e98acac 12 /* Requisitos impuestos por el algoritmo de filtrado:
Gonzakpo 0:b3e50e98acac 13 * {(COEFF_AMOUNT-1)+BLOCKSIZE} debe ser multiplo de 4.
Gonzakpo 0:b3e50e98acac 14 * COEFF_AMOUNT debe ser tambien multiplo de 4.
Gonzakpo 0:b3e50e98acac 15 * COEFF_AMOUNT < {(COEFF_AMOUNT-1)+BLOCKSIZE}
Gonzakpo 0:b3e50e98acac 16 * Ejemplo: COEFF_AMOUNT=100 y BLOCKSIZE=101
Gonzakpo 0:b3e50e98acac 17 */
Gonzakpo 0:b3e50e98acac 18
Gonzakpo 0:b3e50e98acac 19 /* De acuerdo a nuestro filtrado antialiasing, con un muestreo de 57KHz vamos a tener una atenuacion
Gonzakpo 0:b3e50e98acac 20 * de -63dB del aliasing que se mete en la banda de audio (0-22KHz).
Gonzakpo 0:b3e50e98acac 21 */
Gonzakpo 0:b3e50e98acac 22
Gonzakpo 0:b3e50e98acac 23 #define SAMPLING_DIV 195 /* Este valor fija la frecuencia de muestreo tanto del ADC como del DAC.
Gonzakpo 0:b3e50e98acac 24 La cuenta para saber la frecuencia resultante de muestreo es la siguiente:
Gonzakpo 0:b3e50e98acac 25 FSAMPLING = 100 MHz / (8 * SAMPLING_DIV).
Gonzakpo 0:b3e50e98acac 26 Con 105 tenemos una frecuencia de muestreo de 120KHz
Gonzakpo 0:b3e50e98acac 27 Con 156 tenemos una frecuencia de muestreo de 80KHz
Gonzakpo 0:b3e50e98acac 28 Con 283 tenemos una frecuencia de muestreo de ~44.1KHz
Gonzakpo 0:b3e50e98acac 29 Con 219 tenemos una frecuencia de muestreo de ~57KHz
Gonzakpo 0:b3e50e98acac 30 Con 125 tenemos una frecuencia de muestreo de 100KHz
Gonzakpo 0:b3e50e98acac 31 Con 12500 tenemos una frecuencia de 1KHz (para debug)
Gonzakpo 0:b3e50e98acac 32 Con 125000 tenemos una frecuencia de 100Hz (para debug)
Gonzakpo 0:b3e50e98acac 33 Con 1250000 tenemos una frecuencia de 10Hz (para debug)*/
Gonzakpo 0:b3e50e98acac 34
Gonzakpo 0:b3e50e98acac 35 /* En realidad, la frecuencia maxima de muestreo del ADC es de "192307,69230769230769230769230769 Hz"
Gonzakpo 0:b3e50e98acac 36 * porque la frecuencia de trabajo del mismo es de 12.5MHz y la conversion se produce cada 65 clocks.
Gonzakpo 0:b3e50e98acac 37 * Entonces, para que el submuestreo que realiza el DMA sea "correcto" la frecuencia con la que el DMA
Gonzakpo 0:b3e50e98acac 38 * toma los datos deberia ser un submultiplo de la del muestreo maximo del ADC
Gonzakpo 0:b3e50e98acac 39 * Considero una frecuencia exactamente 3 veces menor => "64102,564102564102564102564102564 Hz"
Gonzakpo 0:b3e50e98acac 40 * Entonces el SAMPLING_DIV deber&#65533;a ser de exactamente 195.
Gonzakpo 0:b3e50e98acac 41 */
Gonzakpo 0:b3e50e98acac 42
Gonzakpo 0:b3e50e98acac 43 #endif /* CONFIG_H_ */