2008-08-30 11 views

Odpowiedz

18

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.

5

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.

5

górnoprzepustowy filtr pozwala wysoką -Przetwornice (szczegółowy/Informacje lokalne) przepustkę.
dolnoprzepustowy filtr pozwala niską -Przetwornice (gruba/szorstkie/informacje globalne) przepustkę.

27

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.

+2

Bardzo fajnie mieć próbki kodu. Dlaczego splot w jednym przypadku i FFT w drugim? – dfrankow

+2

@dfrankow Brak konkretnego powodu. Wystarczy pokazać, jak wygląda w różnych domenach. Zaktualizowano tekst, aby to odzwierciedlić. Dzięki. – Hallgrim

+0

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

5

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ść.

5

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); 
} 
+4

Próbuję, że jesteś kod, ale nie rozumiem, co oznacza "granica". To nie jest częstotliwość odcięcia w hercach? –

+1

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

+0

Powiązane: https://dsp.stackexchange.com/questions/39063/simple-software-low-pass-filter –