Bộ lọc thông cao 0,01 Hz cho EEG trôi chậm


10

Tôi đang cố gắng tạo một bộ lọc thông cao cho các bộ dữ liệu điện não đồ (EEG), để thoát khỏi tình trạng trôi rất chậm. Tuy nhiên, tần số khoảng 0,3 Hz rất quan trọng đối với nghiên cứu những dữ liệu này phục vụ.

Tôi sử dụng Matlab và tôi đã thử nhiều thứ. Có vẻ như mức suy giảm dB rất thấp, 3 dB là ổn với các bộ lọc FIR. Ví dụ tôi đã sử dụng:

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

Tuy nhiên, bộ lọc này tạo ra sự trôi dạt khi bắt đầu dữ liệu và tôi không muốn mất các biểu dữ liệu đầu tiên này.

Tôi đã đọc qua các trang của bạn rằng một ý tưởng thông minh là thiết kế bộ lọc thông thấp mà sau này tôi sẽ trừ đi dữ liệu thực. Tôi đã làm điều đó với một bộ lọc cân bằng và nó hoạt động nhưng để lại một thang máy cơ bản. Tôi không muốn chạy loại bỏ trung bình vì đây là bước tiếp theo trong giao thức phân tích.

Bất kỳ đề xuất?


1
Vậy vấn đề chỉ là phản ứng ban đầu của bộ lọc? Đây có phải là dữ liệu được ghi sẵn mà bạn có thể chỉ cần thêm vào số không hoặc là thời gian thực?
endolith

Cách tiếp cận trừ và trừ cũng sẽ gặp phải vấn đề bạn đang gặp phải. Vấn đề là mọi bộ lọc đều có độ trễ. Các bộ lọc với các điểm cắt sắc nét như bộ lọc bạn muốn có thể có độ trễ rất dài. Tôi không chắc tại sao bạn sẽ loại bỏ trung bình tiếp theo; hệ số khuếch đại DC của bộ lọc mà bạn hiển thị bằng 0, do đó sẽ không có mức trung bình đáng kể để loại bỏ (ngoại trừ khoảng thời gian thoáng qua khi bắt đầu đầu ra do độ trễ của bộ lọc).
Jason R

Câu trả lời:


6

Bạn đang yêu cầu một cỗ máy thời gian: để tránh va chạm DC ở , bạn cần biết trạng thái của bộ lọc như thể nó đã chạy trước khi bắt đầu ghi. Điều đó sẽ không xảy ra cho dù bạn sử dụng loại bộ lọc nào.t=0

Đây là một mẹo có thể có ích cho bạn. Giả sử bạn có bộ lọc -tap FIR (hoặc bộ lọc IIR có đáp ứng xung phân rã đủ về 0 sau mẫu). Lấy mẫu đầu tiên của tín hiệu của bạn, đảo ngược chúng và đưa nó vào đầu tín hiệu của bạn. Thực tế, chúng tôi đang xác định tín hiệu mới cho mục đích lọc. Khi bạn lọc bộ lọc đó, trạng thái bộ lọc sẽ được "mồi" với tín hiệu ban đầu: xóa mẫu đầu tiên của đầu ra và hy vọng DC sẽ biến mất.N N g g ( t ) = g ( - t ) = f ( t ) NNNNg(t)=g(t)=f(t)N

Không cần phải nói, có rất nhiều vấn đề với sơ đồ đó - đối với người mới bắt đầu, việc xử lý thời gian thực khó hơn và nếu đạo hàm tín hiệu cao ở , bạn vẫn sẽ gặp vấn đề về niềm tin với một vài mẫu đầu tiên. Nhưng nó nên thoát khỏi vết sưng.t=0


6

Hãy xem chức năng lọc. Nó cho phản ứng không pha và phản ứng bước hoàn hảo. Đặc biệt, thuộc tính phản ứng bước của bộ lọc lọc có thể giải quyết vấn đề của bạn.


0

Tôi đã thực hiện thủ thuật mà ông rtollert đã giải thích và nghĩ rằng đó là điều tốt nhất tôi có thể làm.

Nếu bạn đi theo con đường lấy mẫu / bù phần cứng liên tục, thì hiệu quả có thể khiến bạn quan tâm đến các trình chặn DC như được mô tả bởi Randy Yates và Richard Lyons trong dsp Tips & Tricks tháng 3 năm 2008



-1

Bạn không quan tâm đến giá trị DC tuyệt đối, đúng không?

Tại sao không thêm phần bù tĩnh vào dữ liệu của bạn để điểm dữ liệu đầu tiên bằng 0?

Chắc chắn, bạn sẽ phải thêm phần bù vào mỗi datapoint, nhưng nó sẽ hoàn toàn tránh được các vấn đề phản hồi bước lớn mà bạn đang gặp phải với bộ lọc.

Có hiệu quả bộ lọc bắt đầu khởi tạo về không. Do đó, khi dữ liệu của bạn bắt đầu, bộ lọc sẽ thấy một bậc thang lớn từ 0 đến bất kỳ mức DC nào bạn có.

Chỉ cần thêm offset để loại bỏ các bước cầu thang.


-1

Tại sao không làm loại bỏ trung bình? Bước sau đó "lại" chỉ không có hiệu lực (nó sẽ trừ đi số không).


Đây là nhiều hơn một truy vấn, và không thực sự là một câu trả lời cho câu hỏi. Nó có thể thích hợp như là một nhận xét tại một thời điểm, mặc dù câu hỏi quá cũ nhưng dường như vô nghĩa ở điểm nối này.
Sam Maloney
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.