Red de conocimiento informático - Material del sitio web - Cómo implementar el filtrado de paso bajo usando la programación Delphi

Cómo implementar el filtrado de paso bajo usando la programación Delphi

1. Algoritmo de filtrado extremo (algoritmo de filtrado de juicio programado)

Descripción del método:

Basado en el juicio empírico, determine el valor de desviación máximo permitido de dos muestras ( asumiendo que es A), y hacer un juicio cada vez que se detecta un nuevo valor:

Si la diferencia entre el valor actual y el valor anterior <=A, el valor actual es válido;

Si la diferencia entre el valor actual y el último valor es A, entonces el valor actual no es válido, el valor actual se descarta y se utiliza el último valor en su lugar.

Ventajas:

Puede superar eficazmente la interferencia de pulso accidental

Desventajas:

No puede suprimir la interferencia periódica, suavidad deficiente

[cpp]?ver plano?copiar

#define?A?10?

valor de carácter;?

char?filtro()?

{?

char?new_value;?

new_value =?get_ad();?

if (? (?new_value?- ?valor?>?A?)?||?(?valor?-?nuevo_valor?>?A?)?

retorno?

retorno ?nuevo_valor;?

}?

2. Método de filtrado de la mediana

Método de análisis:

Muestrear continuamente N veces (N es un número impar), organizar las N veces de valores de muestreo y tomar el valor medio como el valor efectivo actual

Ventajas:

Puede superar eficazmente las fluctuaciones causadas por factores accidentales y afectar la temperatura, tiene un buen efecto de filtrado en parámetros medidos cuyo nivel cambia lentamente

Desventajas:

tiene un buen efecto de filtrado en los parámetros medidos cuya temperatura y nivel cambian lentamente:

Puede superar eficazmente las fluctuaciones causadas por interferencias de factores accidentales

Tiene un buen efecto de filtrado en los parámetros medidos que cambian lentamente en temperatura y nivel de líquido

Desventajas:

No es adecuado para parámetros que cambian rápidamente, como el caudal y la velocidad

[cpp]?Ver texto sin formato

#define?

char?filter ()?

{?

char?value_buf[N];?

char?

for(?count=0; count

{?

valor_buf[count]? =?get_ad();?

retraso();?

}?

para(j=0;j

{?

para?(i=0 ;i

{?

if(?value_buf[i]>value_buf[i+1]?) ?

{? temp?=?value_buf[i];?

value_buf[i]? =?value_buf[i+1];

value_buf[i+1 ]?

}?

}?

}?

¿regresar?

}?

3. Filtrado de promedio aritmético

Método de análisis:

Tome continuamente N muestras para la operación de promedio Cuando el valor N es grande: suavidad de la señal Mayor, pero menor sensibilidad

Cuando el valor N es pequeño: la suavidad de la señal es menor, pero la sensibilidad es mayor.

Ventajas:

Se adapta para filtrar señales con interferencia aleatoria general, de modo que la señal se caracteriza por un valor promedio y la señal fluctúa hacia arriba y hacia abajo alrededor de un cierto rango de valores

Desventajas:

No es adecuado para el control en tiempo real que requiere una velocidad de medición lenta o una velocidad de cálculo de datos rápida, lo que desperdicia RAM

[[?cpp]?view simple?copia

#define?

char?filter()?

{?

int?sum?=?0; ?

for( ?count=0;count

{?

suma?

retraso() ;?

} ?

return(char)(sum/N);?4. Filtrado promedio recursivo (método de filtrado de promedio móvil)

Análisis del método:

Tome N Las muestras continuas se utilizan como cola y la longitud de la cola se fija en N. Cada vez, se coloca una nueva muestra de datos al final de la cola y los datos originales al principio. de la cola se desecha (primero en entrar, primero en salir).

Realice una operación de media aritmética en los N datos de la cola para obtener un nuevo resultado de filtrado. Selección del valor N: generalmente 12.

Ventajas:

Buena supresión de interferencias periódicas, alta suavidad, adaptable a sistemas de oscilación de alta frecuencia.

Desventajas:

Sensibilidad baja , mala supresión de interferencias ocasionales del pulso. No es fácil eliminar la desviación del valor de muestreo causada por la interferencia de pulso y no es adecuado para ocasiones con interferencia de pulso grave

Desperdicio de RAM

[cpp]?view Plain?copy

#define ?N?12

char?value_buf[N];?

char?i=0;?

char ?filtro()?

{?

char?count;?

int?sum=0;?

value_buf[i++ ]? =?get_ad();?

si(?i?==?N?)i?=?0;?

for(?count=0;count< N,count++)?

suma?=?value_buf[count];?

retorno?

}?

5. método de filtrado promedio (método de filtrado de promedio de interferencia anti-pulso)

Análisis del método:

Equivalente al filtrado de mediana + filtrado de media aritmética, muestreando continuamente N datos, eliminando un valor máximo y un mínimo valor y luego calcular N-2 La media aritmética de los datos.

Elija el valor N: 3-14

Ventajas: combina las ventajas de los dos métodos de filtrado

Para interferencias de pulsos ocasionales, la interferencia causada por la interferencia de pulsos puede Se eliminará la desviación del valor de muestreo.

Desventajas:

La velocidad de medición es lenta y, al igual que el filtrado promedio del algoritmo, desperdicia RAM.

[cpp]?ver plano?copiar

#define?N?12?

char?filter()?

{

char?count,i,j;?

char?

int?

for(count=0;count

{?

value_buf[count]? =?get_ad();?

retraso();?

}?

para(j=0;j

{?

para?(i=0;i

{?

if(?value_buf[i]>value_buf[i+1]?) ?

{? p>

temp?=?value_buf[i];?

value_buf[i]? =?value_buf[i+1];

value_buf[i+1]? =?temp;?

}?

}?

}?

for(count=1;count

suma?

retorno?(char)(suma/(N-2));?

}?

6 Método de filtrado de retardo de primer orden

Análisis del método:

Tome a=0-1

Este resultado de filtrado = (1-a)*this Valor de submuestreo + a*último resultado del filtrado

Ventajas:

El efecto de supresión periódica de interferencias es bueno, adecuado para ocasiones con alta frecuencia de fluctuación

Desventajas:

Rendimiento:

Rendimiento:

El resultado es el mismo que el resultado del filtrado actual.

Retraso de fase, baja sensibilidad, el grado de retraso depende del valor de a, y la señal de interferencia cuya frecuencia de filtrado es superior a la mitad de la frecuencia de muestreo no se puede eliminar

[cpp]?ver plano?copiar

#define?a?50?

char?value;?

char?filter()?

{?

char?new_value;?

new_value =?get_ad();?

retorno?(100-a)*valor ?+?a*new_value;

}?

7. Filtrado promedio recursivo ponderado

Método de análisis:

Es una mejora en el filtrado promedio recursivo, es decir, se pueden dar diferentes pesos a los datos en un momento determinado

Generalmente, cuanto más cerca de los datos en el momento actual, mayor será el peso obtenido, mayor será el peso Cuanto mayor sea el coeficiente asignado al nuevo valor de muestra, mayor será la sensibilidad, pero menor será la suavidad de la señal.

Ventajas:

Adecuado para objetos con grandes constantes de tiempo de retardo puro y sistemas con períodos de muestreo cortos.

Desventajas:

Para señales con Pequeñas constantes de tiempo de retardo puro, largos períodos de muestreo y señales que cambian lentamente, no pueden responder rápidamente a la gravedad de la interferencia actual en el sistema y el efecto de filtrado es deficiente.

[cpp]?{1,2,3,4,5,6,7,8,9,10,11,12};?

char?code?sum_coe ?=?1+2+3+4+5+6+7+8+9+111+12;?

char?filter()?

{?

char?count;?

char?

int?sum=0;?

for(count=0,count< N;count++)?

{?

value_buf[count]? =?get_ad();?

retraso();?

}?

for(count=0,count

suma?

return(char)(sum/sum_coe); ?

}?

8. Método de filtrado de fluctuación

Método de análisis:

Establezca un contador de filtro y compare cada valor de muestreo con Comparar. el valor efectivo actual:

Si el valor muestreado = el valor efectivo actual, el contador se borra, si el valor muestreado <> el valor efectivo actual, el contador + 1, y se considera que el contador > = el límite superior N (desbordamiento), si el contador se desborda, reemplace el valor actual con el valor actual y borre el contador

Ventajas:

Tiene un mejor efecto de filtrado para Los parámetros medidos cambian lentamente, lo que puede evitar que el controlador repita las transiciones de encendido/apagado cerca de valores críticos o la fluctuación del valor de visualización.

Desventajas:

No es adecuado para parámetros que cambian rápidamente. Si el valor muestreado cuando el contador se desborda resulta ser un valor de interferencia, el valor de interferencia se importará al sistema como válido. valor

[cpp]?ver plano?copia

#define?N?12?

char?filter()?

{?

char?count=0;?

char?new_value;?

new_value = get_ad();?

mientras (valor! =nuevo_valor);?

{?

count++;?

if(count>=N)return new_value;?

retraso();?

new_value =?get_ad();?

}?

valor de retorno;?

} ?

10. Filtrado digital de paso bajo

Análisis:

El filtrado de paso bajo también se denomina filtrado de retardo de primer orden. Su método consiste en multiplicar el valor. valor de salida del resultado de filtrado del enésimo muestreo por (1- a) Sume el enésimo valor de muestreo y multiplíquelo por el último valor de salida del resultado de filtrado. Se puede ver que a<<1.

Este método es adecuado para programas C cuyo proceso de cambio de parámetros de filtrado es lento. La función es la siguiente:

[cpp]?view. simple?copia

float?low_filter(float?low_buf[])?

{?

float?sample_value;?

float ?X=0.01;?

sample_value=(1_X)*low_buf[1]+X*low?buf[0];?

retrun(sample_value);?

}??