Anticipando el retardo de procesamiento en sistemas embebidos

2

Background:

He estado trabajando con la placa de descubrimiento STM32F3 y estoy tratando de implementar algunos algoritmos de procesamiento de señales desde cero. Mi problema se muestra a continuación en el gráfico. Cuantos más toques agregué a un filtro FIR, mayor será el retardo entre la señal de entrada y la señal de salida DAC. Para las señales de audio que estoy usando, un retraso de más de 40 nos causará una distorsión que se puede escuchar, lo que limita mis capacidades de filtrado. También dificulta el diseño del filtro porque la frecuencia de muestreo está limitada por el tiempo de cálculo (la siguiente entrada no se puede procesar hasta que la anterior se envía a la salida).

Preguntas :

¿Hay estructuras de hardware o software que debería utilizar para mejorar el rendimiento?

Si no puedo mejorar el rendimiento, ¿debo diseñar mi filtro con una frecuencia de muestreo que tenga en cuenta la cantidad de operaciones que necesito realizar entre muestras y el tiempo de operación de la hoja de datos?

No he probado las bibliotecas CMSIS porque quería tener una mejor idea de los algoritmos reales, ¿pero estas bibliotecas mejorarían el rendimiento?

Fragmentos de código: (Generalizado para filtros IIR)

while (1)
{
    dreadADC();
    FilteredValue=filter(ADC1ConvertedValue);
    DAC_SetChannel2Data(DAC_Align_12b_R, FilteredValue);
}
uint16_t filter(__IO uint16_t nValue)
{

    for(i=(Taps-1);i>0;i--)
    {
        x[i]=x[i-1];
        y[i]=y[i-1];
    }
    x[0]=nValue;
    y[0]=0;
    for(j=1;j<Taps;j++)
    {
         y[0]= y[0]+(b[j]*x[j])-(a[j]*y[j]);
    }
    y[0]=y[0]+(b[0]*x[0]);
    return y[0]+1024;
}

Configuración de tiempo ADC

ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 1, ADC_SampleTime_1Cycles5);

Configuración de tiempo DAC

TIM_TimeBaseStructure.TIM_Period = 2-1 ;          
TIM_TimeBaseStructure.TIM_Prescaler = 1-1;       
TIM_TimeBaseStructure.TIM_ClockDivision = 1-1; 

¡Gracias por su tiempo y agradecería cualquier orientación!

    
pregunta Andrew

1 respuesta

2

Encuentre una biblioteca que implemente filtros FIR en ensamblaje. Estoy 100% seguro de que hay una biblioteca DSP para STM32.

Escriba de forma alternativa su propio código que utiliza funciones avanzadas en el núcleo.

    
respondido por el iggy

Lea otras preguntas en las etiquetas