筋電位 EMG 信号処理シミュレーター 戻る
医工学・生体信号

筋電位 EMG 信号処理シミュレーター

表面筋電位(sEMG)から筋活動と疲労を定量化する信号処理ツールです。筋力レベル・サンプリング周波数・バンドパス・疲労度・電極雑音を変えると、RMS振幅・中央値周波数(MDF)・SNR・MU発火率がリアルタイムで分かります。

パラメータ設定
筋力レベル (MVC比)
%
最大随意収縮 (MVC) に対する筋力の割合
疲労度
%
100%で MDF が 25Hz 低下(速筋脱落)
サンプリング周波数 fs
Hz
SENIAM 推奨 1000Hz 以上
RMS 窓幅
ms
短いほど時間分解能↑、長いほど振幅安定
バンドパス下限
Hz
運動アーチファクト除去
バンドパス上限
Hz
sEMG 主成分の上端
電極雑音レベル
dBV
電極・増幅器の基底雑音
計算結果
推定 RMS 振幅 (μV)
中央値周波数 MDF (Hz)
平均周波数 MNF (Hz)
SNR (dB)
MU 発火周波数 (Hz)
RMS 窓内サンプル数
筋肉断面と電極配置 — EMG 信号

上腕筋断面に貼った差動電極が、MUAP の重畳である生波形(緑)と RMS 包絡線(橙)を捉えます。疲労が進むと右上の MDF が低下します。

EMG 生波形(時間域)
パワースペクトル + MDF / MNF マーカー
理論・主要公式

$$RMS = \sqrt{\frac{1}{N}\sum_{i=1}^{N} x_i^{2}},\qquad MDF: \int_{0}^{MDF} P(f)\,df = \int_{MDF}^{\infty} P(f)\,df$$

RMS は時間窓内 N サンプルの実効値で瞬時筋力の指標。MDF はパワースペクトル P(f) を半分に分ける周波数で、疲労による低下を捉える。

$$MNF = \frac{\int_{0}^{\infty} f\,P(f)\,df}{\int_{0}^{\infty} P(f)\,df},\qquad SNR = 20\log_{10}\!\left(\frac{V_{\text{signal}}}{V_{\text{noise}}}\right)$$

MNF は重み付き平均周波数、SNR は信号と雑音電圧の比 (dB)。実務では MDF が外れ値に強く、疲労指標として MNF より好まれる。

$$f_{\text{Nyq}} = \frac{f_s}{2} \ge 1.2\,f_{\text{max}},\qquad N_{\text{win}} = T_{\text{win}}\cdot f_s$$

サンプリング周波数 fs はバンドパス上限 fmax の 2 倍+20% の余裕が標準。窓内サンプル数 N_win が小さいと RMS のばらつきが大きくなる。

筋電位 (EMG) 信号処理 — RMSと中央値周波数

🙋
筋電位(EMG)って、筋肉から電気が出てるってことですか?心電図とは違うんですか?
🎓
そう、筋繊維が収縮するとき、細胞膜で「脱分極」という電気的な逆転が起きて、それが Motor Unit Action Potential(MUAP)として外に漏れ出るんだ。心電図(ECG)は心筋全体の同期した1拍の電位を mV オーダーで見るのに対し、表面 EMG はたくさんの運動単位が非同期にバラバラ発火する重ね合わせを 0.1〜1mV、20〜450Hz で観察する。波形を見ると ECG は規則的な P-QRS-T、EMG は雑音みたいなノイジーな振動だよ。
🙋
波形がぐちゃぐちゃだと、どうやって「筋力」を読み取るんですか?
🎓
そこで RMS(Root Mean Square)が出てくる。短い時間窓(だいたい 100〜250ms)の中で、信号を二乗して平均してルートを取ると、正負に振れる振動が「実効値」というひとつの数値に圧縮される。MUAP が増えるほど振幅が増えるから、RMS はほぼ筋力(%MVC)に比例して増える。左の「筋力レベル」スライダーを上げてみて。stat-card の RMS(μV)がリニアに増えるのが分かるはずだよ。
🙋
じゃあ「中央値周波数(MDF)」は何のためにあるんですか?同じ筋活動を見てるんですよね?
🎓
RMS は「どれくらい強く」、MDF は「どれくらい速く」を見ているんだ。筋肉が疲労すると、まず高速で大きな力を出す Type IIb(速筋)から脱落して、遅い Type I(遅筋)だけが残る。速筋の活動電位は伝導速度が速く高周波成分を含むから、これが減るとパワースペクトル全体が低い周波数側にシフトする。MDF はパワー総量を半分に分ける周波数で、その移動を 1 つの数字で捉える。健康な上腕二頭筋で 85Hz くらいが、疲労 100% で 60Hz まで下がる、というのが本ツールのモデルだよ。
🙋
サンプリングは 2000Hz、バンドパスは 20〜450Hz が既定値ですが、これって何か根拠があるんですか?
🎓
これは SENIAM(欧州 EMG 標準化プロジェクト)と一般的な医工学テキストの推奨に基づいた値だ。sEMG の主成分は 20〜450Hz に分布する。下限 20Hz 未満は皮膚と電極の界面で起きる「運動アーチファクト」、上限 500Hz 以上はほぼ熱雑音だから、ここでカットする。サンプリング 2000Hz はナイキスト基準(最低 900Hz)に対して 20% 以上の余裕があり、エイリアシングなしで全帯域を捉えられる。安いマイコンで 500Hz でやろうとすると、本ツールでも上のバンドパス上限を 200Hz 以下まで下げないとナイキスト判定が NG になるのが分かるよ。
🙋
最後に、SNR が 22.97dB って出ました。これはどれくらい良い値なんですか?
🎓
実務的には 20dB 以上あれば「筋活動と雑音が桁違いで分離できる、解析に使える」レベル。10dB 未満だと筋活動の有無の判定すら厳しい。SNR が低いときは皮膚処理(角質除去・アルコール清拭)で電極インピーダンスを 5kΩ 以下にする、電極間距離を 20mm 程度にして筋腹の上に貼る、商用電源由来の 50/60Hz をノッチフィルタで除く、といった対策をする。本ツールで「電極雑音レベル」を −20dBV まで上げてみると、RMS が同じでも SNR が一気に落ちて警告が出るよ。

よくある質問

RMS(Root Mean Square、二乗平均平方根)は時間窓内の信号振幅の実効値で、RMS = √(1/N · Σx²) で計算します。EMGは正負に振れる振動波形なので単純な平均はゼロに近づきますが、二乗してから平均することで「どれくらい暴れているか」を一つの値で表せます。筋繊維の脱分極によるMUAPの活動量が増えるほどEMGの振幅は大きくなり、RMSもほぼ筋力(%MVC)に比例して増加します。これが「RMSが筋活動レベルの定量指標として使われる」理由です。典型的な窓幅は100〜250msで、本ツールは既定で200msを使います。
筋肉が疲労すると、まず高速で大きな力を出す Type IIb(速筋)線維が先に脱落し、より遅い Type I(遅筋)が残ります。速筋ほど活動電位の伝導速度が速くスペクトルが高周波側に広がるため、これが減るとパワースペクトル全体が低周波側にシフトします。MDF(Median Frequency、パワー総量の半分が低周波側に来る周波数)は、このシフトを1つの数値で捉える指標です。健康な上腕二頭筋で安静時 MDF ≈ 85Hz、最大随意収縮(MVC)を維持して疲労が進むと MDF が 10〜25Hz 低下するのが典型的です。
表面EMG(sEMG)の主成分は 20〜450Hz に分布するため、バンドパスは下限 20Hz(運動アーチファクトと商用電源 50/60Hz の影響を抑える)、上限 400〜500Hz が標準です。サンプリングはナイキスト基準で上限の 2 倍以上が最低条件ですが、エイリアシング対策のマージンを取って 1000〜2000Hz が一般的。SENIAM ガイドラインでは 1000Hz 以上を推奨しています。本ツールは既定で 2000Hz・20〜450Hz とし、ナイキスト余裕(fs / 2fmax)が 1.2 以上あるかを自動判定します。
目安として SNR > 20dB(信号が雑音の 10 倍以上)あれば RMS・MDF とも安定して算出できます。10〜20dB だと振幅は使えても周波数解析(MDF)はばらつきが大きくなり、10dB 未満では筋活動の有無の判定すら難しくなります。SNR が低いときは、(1) 電極の皮膚処理(角質除去、アルコール清拭)で接触抵抗を 5kΩ 以下に、(2) 電極間距離を 20mm 程度に保ち筋腹に貼る、(3) 差動増幅器を使う、(4) 50/60Hz ノッチフィルタを追加、などで改善します。

実世界での応用

リハビリ・運動療法:脳卒中後の片麻痺患者のバイオフィードバック訓練では、麻痺側の前脛骨筋などに sEMG 電極を貼り、RMS をリアルタイムでモニタに表示します。患者は「画面の棒グラフを上げる」ことを目標に意識的に筋を動かし、運動学習を促進します。理学療法士は MDF の経時変化から疲労を読み取り、過負荷を避けた訓練負荷を設定できます。

義肢(筋電義手)の制御:切断者の残存筋に電極を貼り、EMG の RMS が閾値を超えたら義手の電動グリッパが閉じる、という仕組みが筋電義手の基本です。複数電極からの RMS パターンと機械学習を組み合わせると、把持・つまみ・指差しなど数種類のジェスチャを分類できます。CASIO・Gakken の EMG スーツや Myo Armband のような汎用デバイスも、本質的にはこの原理を使っています。

人間工学・スポーツ生理学:長時間の PC 作業で僧帽筋の RMS と MDF を測ると、姿勢や机の高さの違いで疲労の進み方が大きく変わることが定量化できます。スポーツでは投球フォームの安定性評価、ランナーの大腿四頭筋の左右差検出、リフティング時のコア筋活動の可視化などに使われ、フォーム改善や怪我予防につながります。

神経内科・筋疾患の評価:ALS(筋萎縮性側索硬化症)や筋ジストロフィーの患者では、運動単位の脱落や線維の置き換わりにより EMG の振幅・周波数特性が健常者と大きく異なります。針 EMG が確定診断には必要ですが、sEMG は侵襲がなく、経時変化のスクリーニングに用いられます。CAE 的な視点では、生体のマルチスケール電気生理シミュレーション(細胞→筋束→表面電位)の検証データとしても重要です。

よくある誤解と注意点

まず最大の誤解が、「EMG の RMS は絶対値で筋力(N)を測れる」というもの。実際は同じ筋力でも電極の位置が筋腹から数 mm ずれるだけで RMS は 30% 以上変動します。皮下脂肪の厚みでも係数が変わり、電極を貼り替えれば校正は無効になります。RMS は必ず「その日その被験者の MVC(最大随意収縮)を 100% として何%か」という相対値で正規化してください。本ツールも「MVC 比」を入力するのはこのためです。「絶対 μV を機種間で比較する」のはほぼ無意味です。

次に、「サンプリングを上げれば必ず精度が上がる」という思い込み。sEMG の主成分は 20〜450Hz に収まるので、5000Hz でサンプリングしても 500Hz でローパスをかけてしまえば情報量は 1000Hz と変わりません。むしろ高サンプリングはデータ量と高周波雑音(増幅器熱雑音、AD コンバータ量子化雑音)を増やすデメリットがあります。針 EMG(10kHz 以上必要)と sEMG(1〜2kHz で十分)を混同しないでください。本ツールでサンプリングを 5000Hz にしても、SNR は変わらず窓内サンプル数だけが増えることが確認できます。

最後に、「MDF が下がった = 必ず筋疲労」とは限らない、という点。MDF の低下要因は疲労の他に、(1) 電極が動いて電極-皮膚インピーダンスが上がった、(2) 低周波雑音(運動アーチファクト)が混入した、(3) バンドパスの下限が高すぎてベース周波数を切ってしまった、などがあります。MDF を疲労指標として使うときは、必ず RMS や信号の生波形と併せて確認し、アーチファクトが入ったエポックは除外してください。さらに、被験者の体表温度が下がると伝導速度が落ちて MDF も下がるので、寒い実験室や接触冷却デバイスとの組み合わせは要注意です。

使い方ガイド

  1. 筋力発揮率(0~100%)を設定し、上腕二頭筋または前脛骨筋の収縮レベルを決定
  2. 疲労度(0~8時間連続運動)を入力し、中央値周波数(MDF)の低下シミュレーションを有効化
  3. サンプリングレート(2000~10000 Hz)とRMS算出窓幅(50~500 ms)を設定
  4. 「解析開始」で表面筋電位信号を生成・処理し、RMS振幅、MDF、MNF、SNR、MU発火周波数をリアルタイム表示
  5. 周波数スペクトラム(0~500 Hz帯)と時系列波形(0~5秒)をモニタリング

具体的な計算例

大腿直筋60%最大随意収縮、疲労度3時間、サンプリングレート4000 Hz、RMS窓100 msの場合:RMS振幅380 μV、初期MDF145 Hz→疲労後120 Hz(低下率17%)、MNF138 Hz、SNR18.2 dB、MU発火周波数27 Hzを出力。ノイズレベル(環境EMG干渉)0~30 μVで信号品質を評価

実務での注意点

  1. 電極配置:筋腹中央に双極配置(電極間隔10~20 mm)、参照電極は骨隆起に装着し、DC遮断フィルタ(20~500 Hz帯域通過)でアーチファクト除去
  2. MDF低下が20%以上の場合は筋疲労による運動能力低下と判定し、作業強度低減や休止を推奨
  3. MUモーターユニット発火周波数が低下するとMDFも同期低下するため、両指標の相関を確認
  4. サンプリングレート不足(<2000 Hz)ではナイキスト周波数以上の高周波成分が欠落し、MDF精度が低下