Próbuję stworzyć filtr górnoprzepustowy dla zestawów danych elektroencefalograficznych (EEG), aby pozbyć się bardzo powolnych dryfów. Jednak częstotliwości około 0,3 Hz są bardzo ważne dla badań, którym służą te dane.
Używam Matlaba i próbowałem różnych rzeczy. Wydaje się, że bardzo niskie tłumienie dB, wynoszące 3 dB, jest dobre w przypadku filtrów FIR. Na przykład użyłem tego:
h=fdesign.highpass('Fst,Fp,Ast,Ap',0.005,0.01,3,1,250); % i needed to cut
d=design(h,'butter');
fvtool(d)
Jednak ten filtr powoduje dryf dc na początku danych i nie chciałbym stracić tych pierwszych punktów danych.
Przeczytałem na twoich stronach, że sprytnym pomysłem jest zaprojektowanie filtra dolnoprzepustowego, który później odejmę od rzeczywistych danych. Zrobiłem to z filtrem equiripple i zadziałało, ale opuściło linię bazową. Nie chcę teraz uruchamiać średniego usuwania, ponieważ jest to kolejny krok w protokole analizy.
Jakieś sugestie?
Odpowiedzi:
Pytasz o wehikuł czasu: aby uniknąć uderzenia prądu stałego przy , musisz znać stan filtra tak, jakby działał przed rozpoczęciem nagrywania. Tak się nie stanie, bez względu na to, jakiego rodzaju filtra używasz.t = 0
źródło
Spójrz na funkcję filtfilt. Daje odpowiedź zerową i idealną odpowiedź krokową. W szczególności właściwość filtrowania w trybie filtrowania plików krok po kroku może rozwiązać Twój problem.
źródło
Zrobiłem lewę, którą wyjaśnił pan rtollert, i pomyślałem, że to najlepsze, co mogę zrobić.
Jeśli pójdziesz drogą ciągłego próbkowania / kompensacji sprzętowej, wydajność może zainteresować Cię blokerami prądu stałego, jak opisali Randy Yates i Richard Lyons w dsp Tips & Tricks March 2008
źródło
Próbowałem czegoś, co dobrze działało - dla określonego wzmacniacza. kod matlab znajduje się tutaj: https://sites.google.com/site/marialstavrinou/home/dc-offset-removal-filter-in-matlab .
źródło
Nie obchodzi Cię absolutna wartość DC, prawda?
Dlaczego po prostu nie dodać statycznego przesunięcia do swoich danych, aby pierwszy punkt danych miał zero?
Jasne, musiałbyś dodać przesunięcie do każdego punktu danych, ale całkowicie uniknęłoby to dużych problemów z reakcją krokową, które występują z filtrem.
Skutecznie filtr zostaje zainicjowany do zera. Dlatego po rozpoczęciu danych filtr widzi duży krok od zera do dowolnego poziomu prądu stałego.
Po prostu dodaj przesunięcie, aby usunąć stopień schodów.
źródło
Dlaczego nie zrobić przeciętnego usunięcia? Późniejszy krok, który robi to „ponownie”, po prostu nie ma efektu (odejmowałby zero).
źródło