Pregunta

El software de procesamiento y edición de gráficos y audio a menudo contiene funciones llamadas "Filtro de paso alto" y "Filtro de paso bajo".¿Qué hacen exactamente y cuáles son los algoritmos para implementarlos?

¿Fue útil?

Solución

Wikipedia:

Estos términos "alto", "bajo" y "banda" se refieren a frecuencias.En paso alto, intentas eliminar las frecuencias bajas.En paso bajo, intentas eliminar el alto.En el paso de banda, solo permite que permanezca un rango de frecuencia continuo.

La elección de la frecuencia de corte depende de su aplicación.La codificación de estos filtros se puede realizar simulando circuitos RC o jugando con transformadas de Fourier de sus datos basados ​​en el tiempo.Consulte los artículos de Wikipedia para ver ejemplos de código.

Otros consejos

Así es como se implementa un filtro de paso bajo usando convolución:

double[] signal = (some 1d signal);
double[] filter = [0.25 0.25 0.25 0.25]; // box-car filter
double[] result = new double[signal.Length + filter.Length + 1];

// Set result to zero:
for (int i=0; i < result.Length; i++) result[i] = 0;

// Do convolution:
for (int i=0; i < signal.Length; i++) 
  for (int j=0; j < filter.Length; j++)
    result[i+j] = result[i+j] + signal[i] * filter[j];

Tenga en cuenta que el ejemplo está extremadamente simplificado.No realiza comprobaciones de alcance y no maneja los bordes correctamente.El filtro utilizado (furgón) es un filtro de paso bajo particularmente malo, porque causará muchos artefactos (timbres).Lea sobre el diseño de filtros.

También puede implementar los filtros en el dominio de la frecuencia.Así es como se implementa un filtro de paso alto usando FFT:

double[] signal = (some 1d signal);
// Do FFT:
double[] real;
double[] imag;
[real, imag] = fft(signal)

// Set the first quarter of the real part to zero to attenuate the low frequencies
for (int i=0; i < real.Length / 4; i++) 
  real[i] = 0;

// Do inverse FFT:
double[] highfrequencysignal = inversefft(real, imag);

Nuevamente, esto está simplificado, pero se entiende la idea.El código no parece tan complicado como las matemáticas.

Generalmente son circuitos eléctricos que tienden a pasar partes de señales analógicas.El paso alto tiende a transmitir más partes de alta frecuencia y el paso bajo tiende a transmitir más partes de baja frecuencia.

Se pueden simular en software.Un promedio móvil puede actuar como un filtro de paso bajo, por ejemplo, y la diferencia entre un promedio móvil y su entrada puede funcionar como un filtro de paso alto.

paso alto filtro permite alto-frecuencia (información detallada/local) aprobar.
Paso bajo filtro permite bajo-frecuencia (información aproximada/aproximada/global) aprobar.

El filtrado describe el acto de procesar datos de una manera que aplica diferentes niveles de atenuación a diferentes frecuencias dentro de los datos.

Un filtro de paso alto aplicará una atenuación mínima (es decir,deja los niveles sin cambios) para las frecuencias altas, pero aplica la atenuación máxima a las frecuencias bajas.

Un filtro de paso bajo es lo contrario: no aplicará atenuación a las frecuencias bajas y sí aplicará atenuación a las frecuencias altas.

Se utilizan varios algoritmos de filtrado diferentes.Los dos más simples son probablemente el filtro de respuesta de impulso finito (también conocido como.Filtro FIR) y el filtro Infinite Impulse Response (también conocido como.filtro IIR).

El filtro FIR funciona manteniendo una serie de muestras y multiplicando cada una de esas muestras por un coeficiente fijo (que se basa en la posición en la serie).Los resultados de cada una de estas multiplicaciones se acumulan y son el resultado de esa muestra.Esto se conoce como Multiplicar-Acumular, y en el hardware DSP dedicado hay una instrucción MAC específica para hacer precisamente esto.

Cuando se toma la siguiente muestra, se agrega al inicio de la serie, se elimina la muestra más antigua de la serie y se repite el proceso.

El comportamiento del filtro se fija mediante la selección de los coeficientes del filtro.

Uno de los filtros más simples que suele proporcionar el software de procesamiento de imágenes es el filtro de promedio.Esto se puede implementar mediante un filtro FIR estableciendo todos los coeficientes del filtro en el mismo valor.

Aquí hay un ejemplo súper simple de un filtro de paso bajo en C++ que procesa la señal una muestra a la vez:

float lopass(float input, float cutoff) {
 lo_pass_output= outputs[0]+ (cutoff*(input-outputs[0])); 
outputs[0]= lo_pass_output;
return(lo_pass_output);
}

Aquí es más o menos lo mismo, excepto que es de paso alto:

float hipass(float input, float cutoff) {
 hi_pass_output=input-(outputs[0] + cutoff*(input-outputs[0]));
 outputs[0]=hi_pass_output;
 return(hi_pass_output);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top