生体信号(EDFデータ)をMatlab対応データ(matファイル)に変換

EDFデータとは】

心拍データなど生体信号に使用されるデータ。

拡張子が.edfとなっている。

この状態では,解析が難しいため,.csvファイルや.matファイルに変換したい。

【matファイルとは】

Matlabで使用されるデータファイル。

研究環境がMatlabであるため,本記事ではedfファイルをmatファイルに変換する方法を忘備録として記載する。

【変換プログラム構築までの全体の流れ】

2022年3月時点では,フリーのソフトがなく,有償ソフトのみであった。

したがって,pythonを用いて変換プログラムを自作する。

以下,簡単な手順。

  1. python(Anaconda)をインストール
  2. Spyder(エディタ)を利用
  3. 下記のコマンドにより,変換に必要なものをインストール
    pip install pyedflib
  4. プログラムを作成(後述)

ソースコード

import numpy as np
import pyedflib
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt2
import csv
import scipy.io
import os


filename = "test";
edf = pyedflib.EdfReader("EDFdata/"+filename+'.EDF')

# ------- .matファイル保存用フォルダ作成
foldername = 'mat_'+filename;

# フォルダが存在していない場合のみ,フォルダ作成
if os.path.exists(foldername) == False:
    os.mkdir(foldername);


# ラベル読み込み
labels = edf.getSignalLabels()
print(labels)

 

# 計測時間,サンプリング周波数,データ点数,計測日の表示
print("Duaration:"+str(edf.getFileDuration()))
print("Freq.:"+str(edf.getSampleFrequencies()))
print("N-Sample(=Freq x Duaration):"+str(edf.getNSamples()))
print("Date:"+str(edf.getStartdatetime()))

 

# 信号の描画
count = 0;
for n in labels: # ラベル数のグラフを描画
    plt.plot(edf.readSignal(count)[0:len(edf.readSignal(count))],label=labels[count])
    plt.legend()
    plt.show(count+1)
    
    # matファイルの保存
    data = edf.readSignal(count)[0:len(edf.readSignal(count))];
    scipy.io.savemat(foldername+'/'+labels[count]+'_'+filename+".mat", {'data_'+filename:data})
    
    count = count + 1;

【参考webサイト】

PythonでEDFファイルを読み込む方法 - Qiita

併せて確認推奨の過去記事

forfree.hatenablog.jp