エッジインパルスを搭載したECGアナライザー
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
| |||
| ||||
|
アプリとオンラインサービス
> |
| |||
| ||||
| ||||
|
このプロジェクトについて
突然の心臓発作と死亡者数の増加:懸念の高まり
過去10年間で、心臓発作による突然死が大幅に増加しました。
特にインドのような発展途上国では、遺伝的およびライフスタイルは別として、農村地域での医療資源の不足は心臓発作の死者のほとんどを引き起こします。
<図>
この地球規模の問題を解決するための技術の貢献:
私はEdgeImpulseを搭載したTinyMLアプリケーションに取り組み、ポケットに収まり、クラウド接続なしで心臓病を独立して診断できるミニ診断ECGアナライザーデバイスを開発しました。
市場に出回っているECGアナライザーマシンとその機能
•現在のIoT医療機器は大量のECGデータをモバイル/サーバーに送信し、分析はハイプロセッサー/モバイルアプリで行われます
•ECGデバイスから信号を受信してECGパターンを分析するコンピュータベースのアプリケーション
•すべてのECG分析デバイスは、インターネットまたは高処理コンピューター/モバイルアプリケーションに依存しています。
したがって、これは以下のチャートに要約できます;
<図>
主な解決策
•EdgeImpulseを搭載したECGAnalyzerは、インターネットに依存することなくECGデータを分析します。
•レイテンシはIoTデバイスと比較して最低です
•15KbRom-ECG分析TinyMLモデルは、TinyMLがサポートされているすべてのマイクロコントローラーで実行できます。
•デバイスはECGパターンを分析し、正常、心房細動、1度房室ブロックに分類します
アーキテクチャ
ECGアナライザーには
が含まれます1。 AD8232を使用したECG読み取り
2。さまざまな心臓病のECGパターンのシミュレーション
3。 高品質のデータセットを作成するための新しいアプローチ
4。 モデルのトレーニング
5。 モデルテストの精度と 統合 デプロイされたアプリケーションコード ライブラリ
<図>
心電図グラフについて知っている
技術的な作業に進む前に、まずECGグラフの基本をいくつか説明します。
ECGグラフは、P波、Q波、R波、S波、T波の5つの波に分割されました。
<図>心房細動
<図>1度房室ブロック
<図>
ECGアナライザーを構築しましょう
1.AD8232を使用したECG読み取り
以下の接続図に従って、ECGセンサーAD8232をArduino Nano 33BLEセンスに接続します。
以下のコードをフラッシュし、「Ctrl + Shift + L」を押してグラフィカルストリーミングデータを視覚化します。
void setup(){
//シリアル通信を初期化します:
Serial.begin(115200);
pinMode(2、INPUT); //リードオフ検出の設定LO +
pinMode(3、INPUT); //リードオフ検出LOのセットアップ-
}
void loop(){
if((digitalRead(2)==1) ||(digitalRead(3)==1)){
Serial.println( '!');
}
else {
//値を送信アナログ入力の0:
Serial.println(analogRead(A0));
}
//シリアルデータが飽和しないように少し待ちます
delay(5);
}
1.1ECG電極の配置
ECG電極は、上の図で説明したようにRA、LA、およびLLに配置され、ジャックをECGアナライザーのAD8232センサーに接続します。
<図>
2.Matlab-signalbuilderを使用したさまざまなECGパターンのシミュレーション
ステップ 2.1 :通常のECGデータをExcelに保存
まず、シリアルモニターデータを以下のテンプレートのようにExcelファイルにコピーして保存します。 ECG値は、「Y」の下の2番目の列にある必要があります。最初の列は時系列です。 (* 0.005)5msとしてインクリメントする必要があります。
<図>ステップ 2.2:Matlabのシグナルビルダー
Matlabで新しいSimulinkモデルを作成する
<図>次に、ワークスペースに「signalbuilder」と入力して選択します。また、挿入
シグナルビルダーに接続するための「スコープ」。以下のスクリーンショットを参照してください。
<図> <図>保存したExcelデータを読み込むには、シグナルビルダーを開き、[ファイルからインポート]オプションを選択します。
<図>上記のオプションを選択してデータをインポートしてください。
<図>次に、選択を確認し、モデルを保存せずにインポートします。もう少し手順が必要なので。
2.3 :シグナルビルダーでのECGデータの視覚化
A 60秒のECGデータは、シグナルビルダービューでは次のようになります。手動編集の場合は、5秒間ズームして、データをドラッグしてください。 ' ECG波を編集します。
<図> <図>ズーム後、マウスポインタをECG波の近くに置くと、アプリケーションの要件に従って、ECG内の任意のポイントを選択してドラッグできます。
<図>2.4 : AVブロック1の場合のSignalBuilderでのP-R間隔データの編集
私 手動でP波を下にドラッグし、R波のかなり前にP波をシフトして、 P-R間隔が200msを超えるようにしました。
シグナルビルダーデータの別のタイムラインでこの手順を繰り返します。
<図>編集後、データをマットファイルにエクスポートします。このオプションはシグナルビルダーにあります。マットファイルが保存されたら、以下の手順に従ってください。
<図>次の手順->最初にマットファイルをダブルクリックし、1x1データセットをダブルクリックします->変更されたデータを[データ:1]の下に表示します。
データをコピーして新しいExcelファイルに貼り付けます。
ステップ2.5:Excelデータをアレイにエクスポートする
私 Excelデータを配列に変換できるa.mスクリプトを作成しました。
実行する前に、Matlabでこのスクリプトを実行し、ExcelFilenameをローカルに保存されたファイル名に置き換え、ExcelSheetNameを対応するシート名に置き換えます。
data =xlsread( 'ExcelFilename.xlsx'、 'ExcelSheetName');
ECGExtract =(data(1:end、1)); %% ColumnAデータ
fid =fopen( 'test.txt'、 'wt');%Windowsでtフラグを指定して開くと\ nが\ r \ nに自動変換されます
fprintf(fid、 '{');
FormatSpec =[repmat( '%i'、1、size(ECGExtract、2)) '、'];%または、代わりに\ r \ nにする必要がありますか?
fprintf(fid、FormatSpec、ECGExtract);
fprintf(fid、 '}')
fclose(fid);
テキストファイルは、現在のディレクトリの場所に生成されます。
<図>アレイの内容をコピーしてECGAnalyzer.cコードに貼り付け、心房細動と1度房室ブロックをシミュレートします。
<図>
3.高品質のデータセットを作成するための新しいアプローチ
ECGデータを見ると、より短いウィンドウ時間(例:3秒)でさまざまな心臓の状態のECGデータと通常のECGデータを区別するのは非常に困難です。
<図>心房細動、正常および1度房室ブロックについて、フィルター処理されたECGデータのみを使用してモデルをトレーニングした場合、精度は 23%未満でした。 その理由は、ウィンドウが短いため、モデルが違いを区別できないためです。
ウィンドウ時間を長くすると、処理時間とRAMのピーク使用量が大幅に増加しました。正確ささえありませんでした。
斬新なアプローチの背景:
いつ 医師または訓練を受けた人がECGグラフを分析しようとすると、RからRの波、PからRの間隔の間の小さなボックスをカウントし、グラフにカウントを書き留めるか、計算のために記憶します。
<図>フィルタリングされたECGデータから別の波形を作成しました。
新しい波形:
- R-R間隔
- PR間隔
通常のECG用に生成されたデータセット データ:
<図>デコードされたR-R間隔とPR間隔のデータは、通常のECGデータでは常に100と50です。
心房細動用に生成されたデータセット-ECGデータ:
<図>いつでも 以前のR-R間隔と現在のR-R間隔の間に偏差があります。 R-R間隔 データは -100 にドロップされます 1サイクル。
1度房室ブロック用に生成されたデータセット-ECG データ:
<図>いつでも PからRまでの間隔が200ミリ秒を超えると、PR間隔のデータは -50 にドロップされます 1サイクル。
このアプローチにより、モデルの精度が 90%以上に向上しました。
4.エッジインパルスでモデルをトレーニングする
エッジインパルストレーニングMLに入る前に、シミュレーションとリアルタイムのECGセンサー読み取りのためにライブラリファイルでいくつかのパラメーターを構成する必要があります。
step4.1 :シミュレーションを0に設定します。データ取得がリアルタイムのECGセンサー読み取りからのものである場合
または
データ取得が心房細動および1度房室ブロックのシミュレートされたECGデータからのものである場合は、シミュレーションを1に構成します(Matlabセッションに続く)。
<図>ステップ4.2:必要なデータにコメント/コメントを外す シミュレーション用のバッファ
<図>ステップ4.3 :データ取得
正常、心房細動、1度房室ブロックの3つの異なるラベルでECGデータを収集します
<図>https://docs.edgeimpulse.com/docs/arduino-nano-33-ble-sense
<図>周波数を202として選択します
$ edge-impulse-daemon --frequency 202
ステップ4.4:インパルスを作成する
で インパルスセクションの作成、ウィンドウサイズは3000ミリ秒、ウィンドウの増加は2999ミリ秒、k-means異常検出を選択
<図>ステップ4.5:スペクトル機能
で スペクトルの特徴については、フィルタータイプを[なし]として選択します。
<図>ステップ4.6:NN分類子:
私 40回のトレーニングサイクルと学習率を0.005に設定しました。精度は92.9です。
<図>異常検出には、PR間隔RMSとRR間隔RMSを選択しました。
5.モデルテストの精度と統合
モデルテストの精度では、約97%の精度でした。
<図>5.1 導入:
選択 展開としてのArduino;
<図>ダウンロードしたEIデプロイ済みファイルをArduinoライブラリに追加します
<図>注: GitHubリンクからArduinoライブラリにもECG_Analyzerライブラリを追加します
これは、私のECGデコードアルゴリズムコードを統合して、EI生成モデルと統合するのに役立ちます。
5.2アプリケーションコードをコアで生成されたEIコードに統合する
私 アプリケーションコードをEI展開された「 nano_ble33_sense_accelerometer_continuous 」にマージしました "そしてECGAnalyzer.inoとして保存しました。
添付のGitHubリンクから入手できます。デバイスのECG_Analyzer.cでSIMULATIONを0としてコードをフラッシュします。
<図>
ハードウェア:
フリッツの図に従って接続します:
<図> <図>組み立て :
<図> <図>
最終製品:
ここに、最終製品とテストデータの精度レベルがあります!!!
<図> <図>
クレジット:
ECG:https://geekymedics.com/how-to-read-an-ecg/
コード
https://github.com/Manivannan-maker/ECGAnalyzer
ECGAnalyzer.zipCodeをFlash:EI_Deployed_Library \ examples \ ECGAnalyzer \ ECGAnalyzer.inoLibraryに解凍して、シミュレーションを編集します。 signalbuilder.slxhttps://github.com/Manivannan-maker/ECGAnalyzer 回路図
図に従って接続します製造プロセス