腦電圖(Electroencephalogram,簡稱EEG)是一種用於記錄大腦活動的生物醫學信號,但在實際記錄中常常伴隨著各種雜訊,如肌肉運動、電網干擾、眼球運動等。為了提取有效的大腦活動信息,必須處理和去除這些雜訊。以下是一些處理和去除腦電圖雜訊的常見步驟:
濾波技術:
scipy.signal
模組進行濾波操作。以下為低通、高通、帶通濾波的程式範例。import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# 創建一个範例信號(脈衝信號家噪音)
fs = 1000 # 採樣頻率
t = np.arange(0, 5, 1/fs) # 時間範圍
signal_noise = np.sin(2 * np.pi * 5 * t) + 0.5 * np.random.randn(len(t))
# 設計低通濾波器
low_cutoff = 20 # 截止頻率(Hz)
b, a = signal.butter(4, low_cutoff / (fs / 2), 'low')
low_filtered_signal = signal.filtfilt(b, a, signal_noise)
# 設計高通濾波器
high_cutoff = 1 # 截止頻率(Hz)
b, a = signal.butter(4, high_cutoff / (fs / 2), 'high')
high_filtered_signal = signal.filtfilt(b, a, signal_noise)
# 設計帶\通濾波器
lowcut = 1 # 低截止頻率(Hz)
highcut = 20 # 高截止頻率(Hz)
b, a = signal.butter(4, [lowcut / (fs / 2), highcut / (fs / 2)], 'band')
bandpass_filtered_signal = signal.filtfilt(b, a, signal_noise)
# 繪製遠使信號及濾波後的信號
plt.figure(figsize=(12, 6))
plt.subplot(4, 1, 1)
plt.plot(t, signal_noise)
plt.title('原始信號')
plt.subplot(4, 1, 2)
plt.plot(t, low_filtered_signal)
plt.title('低通濾波後')
plt.subplot(4, 1, 3)
plt.plot(t, high_filtered_signal)
plt.title('高通濾波後')
plt.subplot(4, 1, 4)
plt.plot(t, bandpass_filtered_signal)
plt.title('带通濾波後')
plt.tight_layout()
plt.show()
狀態空間模型:
動態去噪方法:
眼球運動去除:
注意!每個EEG數據集和應用場景都有不同的雜訊源和處理需求,因此最佳的處理方法可能因情況而異。在實際應用中,需要仔細分析數據並選擇最合適的技術。