iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
AI & Data

30天了解醫學信號辨識是怎麼回事?系列 第 14

Day- 14腦電圖(EEG)信號分析和辨識方法。

  • 分享至 

  • xImage
  •  

腦電圖(EEG)信號分析和辨識是一項重要的研究領域,它涉及對大腦活動的記錄、分析和理解。下面介紹腦電圖信號分析和辨識的一些常見方法:

  1. 時域分析:是對信號在時間域內的特性進行研究的方法,用於理解大腦活動的時間動態。

    1. 平均化

      • 說明:通過多次重複實驗,將EEG記錄進行平均,以減少隨機變異,從而更清晰地觀察到事件相關的腦波。
      • 程式範例:這需要多個試驗的EEG數據,並使用NumPy進行平均。
      import numpy as np
      
      # 將多個EEG信號進行平均
      averaged_eeg = np.mean(eeg_data, axis=0)
      
      
    2. 事件關聯電位(ERP)

      • 說明:通過標記和平均多個事件相關的EEG記錄,可以獲得ERP成分,用於研究感知、語言、記憶等大腦過程。
      • 程式範例:使用NumPy計算事件相關的ERP。
      import numpy as np
      
      # 假設event_data是事件標記,eeg_data是EEG信號
      erp = []
      for event in event_data:
          # 提取事件相關的時間窗口
          event_window = eeg_data[:, event:event+window_size]
          # 將多個事件的信號進行平均
          averaged_event = np.mean(event_window, axis=1)
          erp.append(averaged_event)
      erp = np.array(erp)
      
      
    3. 時間-電壓圖(Time-Voltage Plot)

      • 說明:將EEG信號的時間域信息可視化,顯示大腦活動在時間上的變化。
      • 程式範例:使用Matplotlib繪製時間-電壓圖。
      import matplotlib.pyplot as plt
      
      # 將EEG信號的一部分繪製為時間-電壓圖
      plt.figure(figsize=(12, 6))
      plt.plot(time_points, eeg_segment)
      plt.title("Time-Voltage Plot of EEG Segment")
      plt.xlabel("Time (s)")
      plt.ylabel("Voltage (uV)")
      plt.grid(True)
      plt.show()
      
      
    4. 零交叉率(Zero Crossing Rate)

      • 說明:計算EEG信號中零穿越的次數,可用於分析信號的振幅和變化。
      • 程式範例:使用NumPy計算零交叉率。
      import numpy as np
      
      def zero_crossing_rate(signal):
          return np.mean(np.diff(np.sign(signal) != 0))
      zcr = zero_crossing_rate(eeg_signal)
      
      
  2. 頻域分析:是將信號轉換為頻率域的方法,以瞭解大腦活動的頻率成分和特性。

    1. 傅立葉變換

      • 說明:將EEG信號轉換為頻率域,顯示不同頻率成分的幅度和相位信息。
      • 程式範例:使用NumPy進行傅立葉變換和頻譜繪製。
      import numpy as np
      import matplotlib.pyplot as plt
      
      # 假設eeg_signal是EEG信號
      fft_result = np.fft.fft(eeg_signal)
      frequencies = np.fft.fftfreq(len(eeg_signal), 1.0 / sampling_rate)
      
      # 繪製功率頻譜
      plt.figure(figsize=(12, 6))
      plt.semilogy(frequencies[:len(frequencies)//2], np.abs(fft_result[:len(fft_result)//2]))
      plt.title("Power Spectrum of EEG Signal")
      plt.xlabel("Frequency (Hz)")
      plt.ylabel("Power")
      plt.grid(True)
      plt.show()
      
      
    2. 功率譜密度分析

      • 說明:計算不同頻帶的功率,用於瞭解大腦活動的強度和變化。
      • 程式範例:使用SciPy的welch函數計算功率譜密度。
      from scipy.signal import welch
      
      # 假設eeg_signal是EEG信號,fs是采樣率
      frequencies, power_density = welch(eeg_signal, fs, nperseg=2048)
      
      # 繪製功率譜密度
      plt.figure(figsize=(12, 6))
      plt.semilogy(frequencies, power_density)
      plt.title("EEG Power Spectral Density")
      plt.xlabel("Frequency (Hz)")
      plt.ylabel("Power/Frequency (dB/Hz)")
      plt.grid(True)
      plt.show()
      
      
    3. 頻率帶能量

      • 說明:計算不同頻率帶(例如,α、β、θ、δ等)的能量,用於瞭解特定頻率範圍的大腦活動。
      • 程式範例:計算頻率帶的能量。
      # 假設power_density是功率譜密度,freq_band是要計算的頻率帶範圍
      freq_band_energy = np.trapz(power_density[(frequencies >= freq_band[0]) & (frequencies <= freq_band[1])], dx=frequencies[1])
      
      
  3. 時頻域分析:是結合了時域(時間)和頻域(頻率)信息的腦電圖(EEG)信號分析方法,用於瞭解大腦活動的時間動態和頻率特性。

    1. 連續小波變換

      • 說明:連續小波變換(Continuous Wavelet Transform,CWT)可用於同時分析EEG信號的時間和頻率特性。它使用不同尺度的小波函數來檢測信號中的局部特性和事件。
      • 程式範例:使用PyWavelets執行連續小波變換。
      import numpy as np
      import matplotlib.pyplot as plt
      import pywt
      
      # 假設eeg_signal是EEG信號
      scales = np.arange(1, 128)  # 不同尺度的小波函數
      coef, freqs = pywt.cwt(eeg_signal, scales, 'morl')
      
      # 繪製連續小波變換結果
      plt.figure(figsize=(12, 6))
      plt.imshow(np.abs(coef), extent=[0, len(eeg_signal), freqs[0], freqs[-1]], aspect='auto', cmap='jet')
      plt.title("Continuous Wavelet Transform of EEG Signal")
      plt.xlabel("Time (samples)")
      plt.ylabel("Frequency (Hz)")
      plt.colorbar(label="Magnitude")
      plt.show()
      
      
    2. 短時傅立葉變換

      • 說明:短時傅立葉變換(Short-Time Fourier Transform,STFT)將EEG信號分割成不同的時間窗口,然後對每個窗口應用傅立葉變換,以分析不同時間段內的頻率特性。
      • 程式範例:使用SciPy的spectrogram函數執行STFT。
      from scipy.signal import spectrogram
      
      # 假設eeg_signal是EEG信號,fs是采樣率
      f, t, Sxx = spectrogram(eeg_signal, fs)
      
      # 繪製STFT結果
      plt.figure(figsize=(12, 6))
      plt.pcolormesh(t, f, 10 * np.log10(Sxx), shading='auto', cmap='jet')
      plt.title("Spectrogram of EEG Signal")
      plt.xlabel("Time (s)")
      plt.ylabel("Frequency (Hz)")
      plt.colorbar(label="Power/Frequency (dB/Hz)")
      plt.show()
      
      
    3. 短時小波變換:短時小波變換(Short-Time Wavelet Transform,STWT)結合了STFT和小波變換的特點,可用於同時分析時間和頻率特性。

  4. 狀態識別

    • 事件檢測:檢測特定事件(例如,腦波峰值、異常活動)的時間點,以識別特定的大腦活動。
    • 腦區域定位:使用源空間成像或頭皮電位成像(EEG源分析)來識別和定位活動的來源腦區。
  5. 機器學習方法

    • 分類:使用機器學習模型,如支持向量機、隨機森林、深度學習等,將EEG信號分類為不同的腦態或狀態,如睡眠階段、癲癇發作、注意力狀態等。
    • 回歸:預測特定變數,例如患者的情感狀態或認知狀態。
  6. 腦-機接口(BCI):使用EEG信號來實現腦控制設備,例如腦控制游戲、輔助設備或機器人。這包括在EEG信號中檢測用戶的腦意圖並將其轉化為操作命令。

  7. 深度學習方法:使用深度學習模型,如卷積神經網絡(CNN)或遞歸神經網絡(RNN),來自動提取和分析EEG信號的特徵,用於分類、回歸和狀態識別。

  8. 網絡連接分析:使用圖論和複雜網絡分析方法來探索大腦區域之間的聯繫和交互關係,以瞭解大腦的功能結構。

腦電圖信號分析和辨識通常需要結合多種方法,並根據具體的研究問題和應用需求進行選擇。此外,許多開源工具和庫(如MNE-Python、EEGLAB、Brainstorm等)可用於EEG信號處理和分析,以加速研究工作流程。


上一篇
Day- 13心電圖(ECG)信號辨識技術。
下一篇
Day- 15機器學習在醫學信號辨識中的應用。
系列文
30天了解醫學信號辨識是怎麼回事?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言