web-dev-qa-db-ja.com

MIT-BIH不整脈ECGデータベースをMATLABにロードします

私はパターン認識を含むニューラルネットワークを使用したECG信号処理に取り組んでいます。テスト信号として使用するためにMatlabからすべてのデータを収集する必要があるため、Matlabにロードするのが難しいと感じています。私はMIT不整脈データベース ここ を使用しています。

信号にはインデックスを付け、Matlab互換形式のデータ構造として保存する必要があります。現在、信号は.atrおよび.dat形式です。

MIT-BIH不整脈データベースをMatlabにロードするにはどうすればよいですか?

15
L.fole

Physionet [〜#〜] atm [〜#〜] を使用して、操作が簡単な。matファイルを取得できます。

input部分で、目的のリード、長さ、データベース、およびサンプルを選択します。

ツールボックスexport as .matを選択します。

enter image description here

次に、「。mat」ファイルをダウンロードします。

enter image description here

MATLABでファイルを開くためのサンプルコードは、次のとおりです。

load ('100m.mat')          % the signal will be loaded to "val" matrix
val = (val - 1024)/200;    % you have to remove "base" and "gain"
ECGsignal = val(1,1:1000); % select the lead (Lead I)
Fs = 360;                  % sampling frequecy
t = (0:length(ECGsignal)-1)/Fs;  % time
plot(t,ECGsignal)

そして、あなたは得るでしょう、

enter image description here

ただし、不整脈またはQRS群注釈ファイルを読み取る場合それは別の問題になるでしょう。

編集

baseおよびgainは、infoファイル(2番目の図)から取得されます。このファイルは、ECG信号に関するさまざまな情報を提供します。

enter image description here

最後の文には次のように書かれています:生の単位から上記の物理単位に変換するには、「base」を引き、「gain」で割ります。

6
Rashid

プログラムが必要ですrddata.m(MATLabスクリプト)from このWebサイト 。プログラムは見つけることができます ここrddata.mは、おそらく心電図信号を読み取るために必要な唯一のプログラムです。このプログラムとデータベースを自分で使ったのはそれほど前のことではありません。

4
Sriram

だから私は3ヶ月前にこの答えを読み、ベースとゲインを削除しました。結局、私はRピークをさまざまな方向に完全にシフトし、すべての結果を台無しにしました。これをmatlabで行う必要があるかどうかはわかりませんが、matlabで信号を前処理していない場合は、これを行わないでください。私はPythonで信号を前処理していましたが、それを正規化するために行ったのは

val = val/2047  % (2047 is the max volt range of signals)

バターワースフィルターを使用してアーティファクトを除去しました(範囲0.5hz〜45hz)

[〜#〜]修正[〜#〜]

私が選択したカットオフは0.5から45であり、以前に報告したように5-15ではありません。このカットオフは、ノイズをあまり追加することなく、さまざまな不整脈のQRSを維持します

# baseline correction and bandpass filter of signals 
lowpass = scipy.signal.butter(1, highfreq/(rate/2.0), 'low') 
highpass = scipy.signal.butter(1, lowfreq/(rate/2.0), 'high') 

# TODO: Could use an actual bandpass filter 
ecg_low = scipy.signal.filtfilt(*lowpass, x=ecg) 
ecg_band = scipy.signal.filtfilt(*highpass, x=ecg_low)
2
Amit Juneja

Matlabを使用してデータを読み取るためのチュートリアルがあります。 matlabユーザー向けのチュートリアル

  1. 上記のリンクから「Matlab用のWFDBツールボックス」をインストールします。ツールボックスのフォルダーをmatlabのパスに追加します。

  2. ECG信号をダウンロードします。対処するシグナルについては、必ず_'.atr', '.dat' and '.hea'_を一緒にダウンロードしてください。

  3. Matlabのコマンドは次のとおりです。[tm,signal,Fs]=rdsamp( filename , 1 ) ; [ann,type]=rdann( filename , 'atr' ) ;注:シグナル「101」の場合、その名前は「101」です。また、チュートリアルからrdsampとrdannの詳細情報を確認できます。

1
Niu

使うだけ

A=input('Enter Variable: ','s');
load(A);
a=(val(1,:));
b=fir1(100,[0.1,0.25],'stop');
y2=filter(b,1,a);
figure;
plot(y2);
0
Harun