EEG yavaş sürüklenmeleri için 0,01 Hz'lik yüksek geçiş filtresi


10

Çok yavaş sürüklenmelerden kurtulmak için elektroensefalografik (EEG) veri kümeleri için yüksek geçirgen bir filtre yapmaya çalışıyorum. Bununla birlikte, bu verilerin hizmet verdiği araştırma için 0.3 Hz civarındaki frekanslar çok önemlidir.

Matlab kullanıyorum ve çeşitli şeyler denedim. FIR filtreleri ile 3 dB'lik çok düşük bir dB zayıflaması iyi görünüyor. Örneğin şunu kullandım:

h=fdesign.highpass('Fst,Fp,Ast,Ap',0.005,0.01,3,1,250); % i needed to cut 
d=design(h,'butter');
fvtool(d)

Ancak bu filtre verinin başlangıcında bir dc sapması yapar ve bu ilk veri noktalarını kaybetmek istemem.

Sayfalarınızı okudum, daha sonra gerçek verilerden çıkaracağım düşük geçişli bir filtre tasarlamak akıllıca bir fikir. Ben bir equiripple filtre ile yaptım ve çalıştı ama bir taban çizgisi asansör bıraktı. Bu analiz protokolü sonraki adımda olduğu için şimdi ortalama kaldırma çalıştırmak istemiyorum.

Herhangi bir öneri?


1
Sorun sadece filtrenin ilk tepkisi mi? Önceden kaydedilmiş veriler yalnızca sıfırlarla başa başlayabiliyor mu yoksa gerçek zamanlı mı?
Endolit

Düşük geçiş ve çıkarma yaklaşımı da gördüğünüz sorundan muzdarip olacaktır. Sorun, her filtrenin gecikmesi. İstediğiniz gibi keskin kesiklere sahip filtrelerin çok uzun gecikmeleri olabilir. Bundan sonra neden ortalama kaldırma yapacağınızdan emin değilim; gösterdiğiniz filtrenin DC kazancı sıfırdır, bu nedenle kaldırılacak ortalama bir değer olmayacaktır (filtrenin gecikmesi nedeniyle çıkışın başlangıcındaki geçici süre hariç).
Jason R

Yanıtlar:


6

Bir zaman makinesi istiyorsunuz: DC çarpmasını önlemek için , filtrenin durumunu kayıt başlamadan önce çalışıyormuş gibi bilmeniz gerekir . Ne tür bir filtre kullanırsanız kullanın bu gerçekleşmeyecektir.t=0

İşte sizin için kullanışlı olabilecek bir numara . Diyelim ki bir -tap FIR filtreniz var (veya dürtü yanıtı N numuneden sonra 0'a yeterince azalan bir IIR filtreniz ). Sinyalin ilk N örneğini alın , ters çevirin ve bunu sinyalin başına getirin. Aslında , filtreleme amacıyla yeni bir g ( t ) = g ( - t ) = f ( t ) sinyali tanımlıyoruz . Bunu filtrelediğinizde, filtre durumu ilk sinyalle "hazırlanmıştır": ilk N'yi silinN-N-N-g(t)=g(-t)=f(t)N- çıkış örnekleri ve DC yumru umarım gitmiş olmalıdır.

Söylemeye gerek yok, bu şema ile çok sayıda gotcha var - yeni başlayanlar için, gerçek zamanlı işleme için yapmak daha zordur ve sinyal türevi yüksekse , ilk birkaç örnekle hala güven sorunlarınız olacaktır. Ama yumrudan kurtulmalı.t=0


6

Filtfilt işlevine bir göz atın. Sıfır faz yanıtı ve mükemmel adım yanıtı verir. Özellikle, filtfilt filtrelemenin adım yanıtı özelliği sorununuzu çözebilir.


0

Bay rtollert'ın açıkladığı hile yaptım ve yapabileceğim en iyi şey olduğunu düşündüm.

Sürekli örnekleme / donanım telafisi rotasına inerseniz, verimlilik sizi dsp Tips & Tricks Mart 2008'de Randy Yates ve Richard Lyons tarafından tarif edildiği gibi DC blokerleriyle ilgilenebilir.



-1

Mutlak DC değerini umursamıyorsunuz, değil mi?

Neden ilk veri noktasının sıfır olması için verilerinize sadece statik bir denge eklemiyorsunuz?

Elbette, ofseti her veri noktasına eklemeniz gerekir, ancak filtreyle ilgili büyük adım tepkisi sorunlarından tamamen kaçınır.

Filtre etkili bir şekilde sıfırlanır. Bu nedenle, verileriniz başladığında, filtre sıfırdan DC seviyenize kadar büyük bir merdiven basamağı görür.

Sadece merdiven basamağını kaldırmak için ofset ekleyin.


-1

Neden ortalama kaldırma yapmıyorsunuz? Bunu "tekrar" yapan sonraki adımın sadece etkisi yoktur (sıfırı çıkarır).


Bu daha çok bir sorgudur ve sorunun cevabı değildir. Bir noktada yorum olarak uygun olabilir, ancak soru çok eski olmasına rağmen, bu noktada anlamsız görünüyor.
Sam Maloney
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.