Filtrado de Kalman del algoritmo de muestreo ADC en MCU

Filtrado de Kalman del algoritmo de muestreo ADC en MCU


La idea central del algoritmo es calcular la cantidad óptima actual basada en el "valor medido" actual del instrumento y la "cantidad prevista" y el "error" en el momento anterior.

Para predecir la cantidad del momento siguiente, el punto más destacado es que el error se incluye en el cálculo y se divide en dos tipos: error de predicción y error de medición. Comúnmente conocido como ruido. Otra característica muy importante es que el error existe de forma independiente y siempre no ocurre Afectado por los datos de medición.

Primero entendamos el significado de varios parámetros en un filtro de Kalman: probabilidad (probabilidad), variable aleatoria (variable aleatoria), distribución gaussiana o normal (distribución gaussiana) y modelo de espacio de estado, etc.

En cuanto al significado y derivación de la fórmula de Kalman, ya hay muchos artículos en Internet, así que no los repetiré aquí, solo mire la implementación del código C.

/ *

R值固定,Q值越大,代表越信任测量值,Q值无穷大,代表只用测量值。

         Q值越小,代表越信任模型预测值,Q值为0,代表只用模型预测值。

* /

// Parámetro uno

flotar KalmanFilter (flotar inData)

{

static float prevData = 0;                                 //上一个数据

static float p = 10, q = 0.001, r = 0.001, kGain = 0;      // q 控制误差 r 控制响应速度

p = p + q;

kGain = p / ( p + r );                                      //计算卡尔曼增益

inData = prevData + ( kGain * ( inData - prevData ) );      //计算本次滤波估计值

p = ( 1 - kGain ) * p;                                      //更新测量方差

prevData = inData;

return inData;                                             //返回估计值

}

Ahora pruebe el efecto del filtrado de Kalman. Se genera una onda de diente de sierra a través del generador de funciones y se envía al puerto AD de la microcomputadora de un solo chip. Después de que el chip único lee los datos de AD recopilados, pasa por el algoritmo de filtrado de Kalman y luego combina los datos muestreados con el filtrado. Los datos se generan a través del puerto serie y se muestran en el software de visualización de forma de onda del puerto serie.
Inserte la descripción de la imagen aquí

vacío principal (vacío)

{

while( 1 )

{

    val1 = ReadVol_CH3();            //读取AD采样数据

    dat = ( float )val1;

    dat =    KalmanFilter( dat );    //卡尔曼滤波

    printf("A%drn",val1);          //打印结果

    printf("B%2frn",dat);

}

}

Ahora mira el resultado del filtrado.
Inserte la descripción de la imagen aquí

La curva azul es la curva de datos muestreada original y la curva naranja es la curva después del filtrado de Kalman.

Cambiemos el valor de Q y R para probar el efecto de filtrado.

Los parámetros modificados son los siguientes

// Parámetro dos

unsigned long kalman_filter (unsigned long ADC_Value)

{

float LastData;

float NowData;

float kalman_adc;

static float kalman_adc_old = 0;

static float P1;

static float Q = 0.0003;

static float R = 5;

static float Kg = 0;

static float P = 1;

NowData = ADC_Value;

LastData = kalman_adc_old;

P = P1 + Q;

Kg = P / ( P + R );

kalman_adc = LastData + Kg * ( NowData - kalman_adc_old );

P1 = ( 1 - Kg ) * P;

P = P1;

kalman_adc_old = kalman_adc;

return ( unsigned long )( kalman_adc );

}

Prueba de forma de onda

Los datos de diente de sierra se vuelven directos

La curva azul es la curva de datos muestreada original y la curva naranja es la curva después del filtrado de Kalman.

En comparación con el diagrama de forma de onda de la primera prueba, se puede encontrar que la forma de onda después del filtro de Kalman por segunda vez tiene un cambio muy grande, y la onda de diente de sierra se filtra para estar cerca de una línea recta después de que se cambia el parámetro.

Se puede ver que diferentes valores de R y Q tendrán un gran impacto en los resultados de la medición.

P: El ruido del proceso, Q aumenta, la respuesta dinámica se vuelve más rápida y la estabilidad de la convergencia empeora

R: ruido de medición, R aumenta, la respuesta dinámica se vuelve más lenta y la estabilidad de la convergencia mejora

La forma de elegir parámetros específicos solo se puede ajustar lentamente en la aplicación de acuerdo con los resultados de la medición.

Supongo que te gusta

Origin blog.csdn.net/qq_36296398/article/details/110760647
Recomendado
Clasificación