Czym są filtry górnoprzepustowe i dolnoprzepustowe?

Grafika i oprogramowanie do edycji i przetwarzania dźwięku często zawierają funkcje zwane "filtrem Górnoprzepustowym" i "filtrem dolnoprzepustowym". Do czego one służą i jakie są algorytmy ich implementacji?

Author: Andrew Edgecombe, 2008-08-30

6 answers

Wikipedia:

[[0]}te terminy "high", "low" I "band" odnoszą się do częstotliwości . W high-pass starasz się usunąć niskie częstotliwości. W low-pass starasz się usunąć wysokie. W pasmie pasmowym można pozostawić tylko ciągły zakres częstotliwości.

Wybór częstotliwości odcięcia zależy od zastosowania. Kodowanie tych filtrów może być wykonane przez symulowanie obwodów RC lub bawiąc się transformacjami Fouriera danych opartych na czasie. Przykłady kodu można znaleźć w artykułach Wikipedii.

 19
Author: Frank Krueger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-30 00:58:00

Oto jak zaimplementować filtr dolnoprzepustowy za pomocą splotu:

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];

Zauważ, że przykład jest bardzo uproszczony. Nie sprawdza zakresu i nie obsługuje prawidłowo krawędzi. Zastosowany filtr (box-car) jest szczególnie złym filtrem lowpass, ponieważ spowoduje wiele artefaktów (dzwonienie). Przeczytaj o projekcie filtra.

Możesz również zaimplementować filtry w domenie częstotliwości. Oto jak zaimplementować filtr górnoprzepustowy za pomocą 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);

Znowu, to jest uproszczone, ale masz pomysł. Kod nie wygląda na tak skomplikowany jak matematyka.

 27
Author: Hallgrim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-09 00:11:00

Są to zazwyczaj obwody elektryczne, które mają tendencję do przekazywania części sygnałów analogowych. High pass ma tendencję do przesyłania większej liczby części o wysokiej częstotliwości, a low pass ma tendencję do przekazywania większej liczby części o niskiej częstotliwości.

Mogą być symulowane w oprogramowaniu. Średnia chodzenia może działać jako filtr dolnoprzepustowy, a różnica między średnią chodzenia a jej wejściem może działać jako filtr górnoprzepustowy.

 5
Author: BCS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-30 00:59:58

High-pass Filtr lets high - frequency (detailed/local information) pass .
Low-pass filter lets low-frequency (coarse/rough/global information) pass.

 5
Author: puri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-31 12:38:34

Filtrowanie opisuje proces przetwarzania danych w sposób, który stosuje różne poziomy tłumienia do różnych częstotliwości w danych.

Filtr górnoprzepustowy zastosuje minimalną uwagę (tj. pozostaw poziomy bez zmian) dla wysokich częstotliwości, ale stosuje maksymalne tłumienie dla niskich częstotliwości.

Filtr dolnoprzepustowy jest odwrotny - nie stosuje tłumienia na niskich częstotliwościach przez zastosowanie tłumienia na wysokich częstotliwościach.

Istnieje wiele różnych stosowane algorytmy filtrujące. Dwa najprostsze są prawdopodobnie skończony Filtr odpowiedzi impulsowej (aka. Filtr FIR) i filtr nieskończonej odpowiedzi impulsowej (aka. Filtr IIR).

Filtr FIR działa poprzez zachowanie serii próbek i pomnożenie każdej z nich przez Stały współczynnik (który jest oparty na pozycji w serii). Wyniki każdego z tych mnożenia są gromadzone i są wynikiem dla tej próbki. Jest to określane jako mnożenie-kumulowanie-i w dedykowanym sprzęcie DSP istnieje specjalna instrukcja MAC do tego.

Po pobraniu kolejnej próbki jest ona dodawana do początku serii, a najstarsza próbka z serii jest usuwana, a proces powtarza się.

Zachowanie filtra jest stałe poprzez wybór współczynników filtra.

Jednym z najprostszych filtrów, które są często dostarczane przez oprogramowanie do przetwarzania obrazów, jest filtr uśredniający. Może to być realizowane przez filtr FIR poprzez ustawienie wszystkie współczynniki filtra do tej samej wartości.

 5
Author: Andrew Edgecombe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-05 02:29:57

Oto bardzo prosty przykład filtra dolnoprzepustowego w C++, który przetwarza sygnał po jednej próbce na raz:

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

Tutaj jest prawie to samo, tyle że to high pass:

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);
}
 4
Author: Eric Brotto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-09 00:11:54