Dlančnik (PDA)

Poglejte polno različico : Hi pass


shem_me_zion
10.03.2007, 09:00
Mi lahko nekdo napise v kateremkoli jeziku algoritem za high pass filter (rad bi se resil frekvenc 0.5-0.01 Hz; zahtevam nic(!!!) popacenja. Signal ima standardno vzorcno frekvenco)? Ce imas algoritem v Matlab, ti dolgujem vecerjo na Bizeljskem, polek dogovorjenega placila.

mrjerry
12.03.2007, 13:03
Filtrov brez popacenja v praksi ni. Obicajno se uporablja Butterworthov filter dovolj visokega reda (tam nekje okrog 10). Ce imas Matlab Signal Processing Toolbox, gre zadeva takole:

1. Potrebujes signal x (to imas).
2. Definiras koeficiente visokopasovnega Butterworthovega filtra: [B A] = butter(N,Wn,'high')
Pri tem je N red filtra, Wn pa relativna mejna (cut-off) frekvenca, ki je enaka kvocientu zelene mejne frekvence in Nyquistove frekvence (polovica frekvenca vzorcenja)
3. Uporabis obojestransko filtriranje z ukazom filtfilt(). y=filtfilt(B,A,x)

Karakteristike filtra si lahko ogledas s pomocjo GUIjev toolboxa.

Mimogrede... Butterworthov filter je IIR filter.

mrjerry
12.03.2007, 13:19
Aja se to... Karakteristiko filtra lahko vidis z ukazom fvtool(B,A) . Butterworth dovolj dobro deluje pri relativni mejni frekvenci nekje od 0.015 naprej (visokopasovni filter).

Zelo nizke frekvence lahko odstranis tudi z ukazom detrend, oziroma z odstevanjem srednjih vrednosti odsekov (nekoliko grob poseg, pa vendar). Poleg tega je pomembna tudi tvoja frekvenca locljivost. Ce frekvencna locljivost tvojega signala presega frekvence, ki jih zelis odrezati, potem se moras sprijazniti z dejstvom, da to pac ni mozno.

Ne vem, koliksna je tvoja frekvenca vzorcenja... Ce je 44100Hz, potem moras za frekvencno locljivost 0.01Hz signal vzorciti vsaj 100 sekund.