Oprogramowanie do edycji i przetwarzania grafiki i dźwięku często zawiera funkcje o nazwie "Filtr górnoprzepustowy" i "Filtr dolnoprzepustowy". Dokładnie, co one robią i jakie są algorytmy ich implementacji?Co to są filtry górnoprzepustowe i filtry dolnoprzepustowe?
Odpowiedz
Wikipedia:
Te "wysoki", "niski", "Band" terminy odnoszą się do częstotliwości. W high-pass próbujesz usunąć niskie częstotliwości. W dolnych przejściach próbujesz usunąć wysokie. W paśmie pasmowym pozostawiasz tylko ciągły zakres częstotliwości.
Wybór częstotliwości granicznej zależy od zastosowania. Kodowanie tych filtrów można wykonać poprzez symulację obwodów RC lub przez zabawę z transformacjami Fouriera danych czasowych. Zobacz artykuły wikipedia dla przykładów kodu.
Są to na ogół obwody elektryczne, które mają tendencję do przekazywania części sygnałów analogowych. Wysoki przebieg ma tendencję do przesyłania większej ilości części o wysokiej częstotliwości, a dolny bieg ma tendencję do przekazywania większej ilości części o niskiej częstotliwości.
Można je symulować w oprogramowaniu. Średnia krocząca może na przykład działać jako filtr dolnoprzepustowy, a różnica pomiędzy średnią kroczącą a jej wartością wejściową może działać jako filtr górnoprzepustowy.
górnoprzepustowy filtr pozwala wysoką -Przetwornice (szczegółowy/Informacje lokalne) przepustkę.
dolnoprzepustowy filtr pozwala niską -Przetwornice (gruba/szorstkie/informacje globalne) przepustkę.
Oto jak zaimplementować filtra dolnoprzepustowego przy użyciu splot:
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];
Należy zauważyć, że przykład jest bardzo uproszczona. Nie sprawdza zasięgu i nie obsługuje poprawnie krawędzi. Zastosowany filtr (box-car) jest szczególnie złym filtrem dolnoprzepustowym, ponieważ spowoduje wiele artefaktów (dzwonienie). Czytaj na temat projektu filtra.
Można także zaimplementować filtry w domenie częstotliwości. Oto jak wdrożyć 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);
Ponownie, jest to uproszczone, ale masz pomysł. Kod nie jest tak skomplikowany jak matematyka.
Filtrowanie opisuje czynność 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 minimalne wzmocnienie (tzn. Pozostawi poziomy niezmienione) dla wysokich częstotliwości, ale zastosuje maksymalne tłumienie do niskich częstotliwości.
Filtr dolnoprzepustowy jest odwrotny - nie stosuje tłumienia niskich częstotliwości przez tłumienie przy wysokich częstotliwościach.
Istnieje wiele różnych algorytmów filtrowania, które są używane. Dwa najprostsze to prawdopodobnie filtr odpowiedzi na skończoną odpowiedź impulsową (czyli filtr FIR) i filtr odpowiedzi Infinite Impulse Response (znany również jako filtr IIR).
Filtr FIR działa, zachowując serię próbek i mnożąc każdą z tych próbek za pomocą stałego współczynnika (który jest oparty na pozycji w serii). Wyniki każdej z tych mnożeń są kumulowane i są wynikiem dla tej próbki. Jest to nazywane Multiply-Accumulate - w dedykowanym sprzęcie DSP istnieje konkretna instrukcja MAC, aby to osiągnąć.
Po pobraniu kolejnej próbki jest ona dodawana do początku serii, a najstarsza próbka z serii jest usuwana, a proces powtarzany.
Zachowanie filtra jest ustalane przez wybór współczynników filtru.
Jednym z najprostszych filtrów często dostarczanych przez oprogramowanie do przetwarzania obrazu jest filtr uśredniający. Można to zaimplementować przez filtr FIR, ustawiając wszystkie współczynniki filtra na tę samą wartość.
Tutaj jest super prosty przykład filtr dolnoprzepustowy w C++, który przetwarza sygnał jedną próbkę 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);
}
Tu jest prawie to samo, tylko, że to górnoprzepustowy:
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);
}
Próbuję, że jesteś kod, ale nie rozumiem, co oznacza "granica". To nie jest częstotliwość odcięcia w hercach? –
Odpowiedź jest prawie dekadowa, ale nadal uważam, że to nie "wynik [0]" należy uwzględnić w obliczeniach, ale poprzednio przefiltrowaną wartość próbki. – Mike
Powiązane: https://dsp.stackexchange.com/questions/39063/simple-software-low-pass-filter –
- 1. Filtry Backbone.js i filtry Tastypie
- 2. Autoryzuj filtry a Filtry akcji
- 3. Filtry widoczności i filtry kolekcji są przestarzałe, co należy zamiast tego stosować?
- 4. Filtry i weryfikatory są dodawane dwukrotnie:
- 5. filtry tekstur libgdx i mipmap
- 6. Filtry i teleskopowe na FileUpload
- 7. Czy filtry niestandardowe w NUnit są możliwe?
- 8. Domyślne filtry Flask-Admin
- 9. checkstyle + filtry przeciwzakłóceniowe
- 10. Zagadnienia przechwytywanie filtry Wireshark
- 11. Filtry Log4Net "LUB"
- 12. Filtry Java Performance Question
- 13. Filtry wyjątków F #
- 14. Django Niestandardowe filtry zapytań
- 15. Haskell, filtry łańcuchowym
- 16. Firebase: Filtry w kohortach
- 17. laravel domenach cookie auth i filtry
- 18. AngularJS: Niestandardowe filtry i powtórzenie ng
- 19. Zabezpieczenia sprężyn Graal, filtry serwletów i odpowiedź
- 20. Jak przetestować filtry żądania jersey2?
- 21. Filtry obrazu Instagrama na iPhone'a
- 22. Jak zresetować filtry w Fiddler?
- 23. Jak działają filtry web.xml? Czy możesz mieć dwa filtry odwzorowujące wszystkie strony (/ *) i określające kolejność?
- 24. Dlaczego warto etykietować filtry intencyjne?
- 25. Zapytania vs Filtry - kolejność wykonywania
- 26. filtry garbling Maven znaki specjalne
- 27. Zakresy jako filtry w rails_admin
- 28. Czy są dostępne dobre filtry HTML oparte na PHP?
- 29. Filtry interfejsu Facebook Graph API - Jakie opcje są dostępne?
- 30. Co to są `+:` i `-:`?
Bardzo fajnie mieć próbki kodu. Dlaczego splot w jednym przypadku i FFT w drugim? – dfrankow
@dfrankow Brak konkretnego powodu. Wystarczy pokazać, jak wygląda w różnych domenach. Zaktualizowano tekst, aby to odzwierciedlić. Dzięki. – Hallgrim
Czy jesteś pewien, że pierwsza część twojej odpowiedzi jest poprawna, w której zastosujesz splot w dziedzinie czasu za pomocą funkcji prostokątnej? Myślałem, że filtr dolnoprzepustowy w dziedzinie czasu wymaga splotu funkcji sinc? – stackoverflowuser2010