MATLABでここまでできる。上肢・下肢・体幹・研究まで貫くロードマップ。
「難しそう」「エンジニアが使うものでしょう?」——そう思われがちなMATLABですが、実はリハビリ職にとって「評価・解析・研究・機器連携」を1本でつなげる、数少ない万能ツールです。
この記事では、導入方法・価格・必要なものから、基本文法、上肢・下肢・体幹訓練での実践的な使い方、業界の先進活用、さらにはマニアックな使い方まで、実際のコードを見せながら、専門知識ゼロの状態からでも迷わず進めるロードマップとしてまとめました。

目次
この記事で解決できること
この記事を読み終える頃には、次の3つが分かります。
① MATLABを導入するときに必要なもの・価格・つまずきやすいポイントとその直し方
② 評価データの数値化から、上肢・下肢・体幹訓練の解析、機械学習を使った研究まで、実際に手が動かせるコード付きの全体像
③ 個人情報・医療安全を守りながら、MATLABを「臨床と研究をつなぐ道具」として使うための線引き
結論:MATLABは「臨床版の実験ノート」
先に結論を書きます。MATLABは、プログラミング言語である以前に「数値と向き合うためのノート」です。Excelでは崩れてしまう波形データや、関節角度のような複雑な計算も、MATLABなら1行のコードで処理し、その場でグラフにして見返せます。
この「計算する・見る・直す」を素早く行き来できる感覚こそが、MATLABが理学療法・作業療法・言語聴覚の臨床研究で長年使われ続けている理由です。
ただし、最初の一歩でつまずくと「難しいツール」という印象だけが残ってしまいます。実際に編集部が歩行データの解析に初めて挑戦したときも、まさにこの壁にぶつかりました。
実際の使用場面:歩行データがただの数字の羅列だった夜
片麻痺患者さんの歩行を、床反力計とモーションキャプチャで記録したデータをもらったときのことです。CSVファイルを開くと、そこにあったのは何千行にもわたる数字の羅列でした。「このデータから膝関節の角度変化を出したい」——そう思い立ち、まずはMATLABを開いて、力任せにコードを書き始めました。
知らないと損:最初のコードは、だいたい「行列の向き」で詰まる
最初に書いたコードは、正直そのままでは動きませんでした。多くの初心者がここでつまずきます。実際にありがちな失敗は次の3パターンです。
- データが「横向き(行ベクトル)」なのか「縦向き(列ベクトル)」なのか意識せず計算し、エラーが出る、または計算結果がまったく違う数字になる
- 生データにノイズが乗ったまま角度計算をしてしまい、グラフがギザギザになって使い物にならない
- for文で1サンプルずつ計算しようとして、コードが長く・遅くなる(MATLABは行列でまとめて計算するのが得意)
「プログラミングは初めてだから仕方ない」と諦めかけましたが、ここで諦める必要はありません。実はここが大事なポイントで、MATLABは「行列演算」の考え方さえ最初に押さえておけば、for文をほとんど書かずに、驚くほど短いコードで解析が終わるように設計されています。
修正コードの実例とBefore/After
% 1サンプルずつfor文で角度を計算しようとした例
for i = 1:length(hipX)
thigh = [hipX(i)-kneeX(i), hipY(i)-kneeY(i)];
shank = [kneeX(i)-ankleX(i), kneeY(i)-ankleY(i)];
kneeAngle(i) = acosd(dot(thigh,shank)/(norm(thigh)*norm(shank)));
end
% → 動くが遅く、データの向き(行/列)がずれるとエラーになる
% すべてのサンプルをまとめて列ベクトルとして読み込む
thigh = [hipX - kneeX, hipY - kneeY]; % Nx2行列
shank = [kneeX - ankleX, kneeY - ankleY]; % Nx2行列
% 各行(=各サンプル)ごとにドット積とノルムをまとめて計算
dotProd = sum(thigh .* shank, 2);
normProd = vecnorm(thigh,2,2) .* vecnorm(shank,2,2);
kneeAngle = acosd(dotProd ./ normProd); % for文なしで一気に計算
% ノイズ除去(4次バターワースローパスフィルタ、遮断周波数6Hz)
fs = 100; % サンプリング周波数[Hz]
[b,a] = butter(4, 6/(fs/2), 'low');
kneeAngleSmooth = filtfilt(b,a,kneeAngle);
plot(kneeAngleSmooth); xlabel('サンプル'); ylabel('膝関節角度 [deg]');
for文で1サンプルずつ計算し、ノイズ処理もしていない
実行に時間がかかり、グラフがギザギザで臨床説明に使えない。
行列演算でまとめて計算し、filtfiltでノイズを除去
コードが短くなり、グラフも滑らかになって、そのまま患者説明用の資料に転用できる状態に。
ポイントは、「1個ずつ計算しよう」と考えず、「データ全体をひとつの行列として扱う」という発想に切り替えること。この考え方に慣れると、上肢・下肢・体幹のどの解析でも、コードの見通しが一気によくなります。
筆者の判断:MATLABは「解析の下書き」を極限まで速くする道具
この経験から編集部が持っている判断基準はシンプルです。MATLABは、データを整理し、グラフにし、仮説を試すスピードを上げる道具。診断や治療方針の決定、個人情報の管理責任は、あくまで専門職が担う。これは自主的な解析だけでなく、これから紹介する導入〜マニアックな活用まで、すべてに共通する前提です。
- 患者データ(氏名・生年月日・カルテID等)はファイル名・変数名にも残さない。解析前に匿名IDへ置き換える
- 院内のPCにMATLABを入れる場合は、情報システム部門・医療安全部門に事前相談し、院内のセキュリティポリシーに従う
- MATLAB Onlineなどクラウド版を使う場合、患者データのアップロード可否は必ず施設のルールで確認する
- 解析結果(角度・力・分類結果など)は、あくまで臨床判断の参考情報。最終判断は専門職が行う
- 自作の解析ツール・機器連携システムを、安全性未確認のまま患者に直接使用しない
- 研究目的でデータを使う場合は、倫理審査など院内の手続きを先に確認する
ここからは、この前提を踏まえたうえで、導入から「今すぐ」「基礎」「実践」「先進」「マニア」の5段階に分けて、実コードとともに紹介します。
導入編:まずはここから。価格・必要なもの・インストール
「何を買えばいいのか分からない」でつまずく人が最も多い段階です。順番に押さえていきましょう。
動作環境を確認する
- できること
- MATLABはWindows・macOS・Linuxに対応。歩行解析や画像処理を扱うなら、メモリ16GB以上・SSD搭載のPCが快適。特別なGPUは必須ではないが、機械学習・ディープラーニングまで見据えるならGPU搭載PCがあると学習が速い
- 使える場面
- これから新しくPCを用意する、または既存PCで動くか確認したい場面
- 今すぐ試すなら
- MathWorks公式サイトのシステム要件ページで、使いたいバージョン(2026年時点の最新はR2026a)に対応するOS・メモリ条件を確認する
- 注意点
- 2026年リリース以降、Intel搭載Macは新バージョンのサポート対象外になっている。古いMacで検討している場合は要確認
ライセンスの種類を選ぶ
- できること
- 大きく分けて「Home(個人の非営利利用限定)」「Standard(商用・臨床研究向け個人ライセンス)」「Campus-Wide License(大学・病院の包括契約)」の3種類がある
- 使える場面
- 自費で始めたい個人か、病院・大学に所属しているかで選択肢が変わる場面
- 今すぐ試すなら
- 大学や病院に所属している場合は、まず情報システム部門に「Campus-Wide Licenseがあるか」を確認する。個人利用ならHomeライセンス、副業や事業として使うならStandardライセンスを検討する
- 注意点
- Homeライセンスは非営利の個人利用限定で、商用利用や組織としての利用はできない。臨床研究として病院の予算で使う場合はStandardまたは組織契約が必要
価格の目安をつかむ
- できること
- 2020年代を通じて、MATLAB本体のHomeライセンスはおおむね1万円台後半、Simulinkなど追加ツールボックスは1つ数千円程度という価格帯で案内されてきた(買い切り型の永久ライセンス)。Standard(年間契約)はツールボックスごとに数千円〜という価格帯
- 使える場面
- 予算をざっくり見積もりたい場面
- 今すぐ試すなら
- 正式な最新価格は変動するため、必ずMathWorks公式の価格ページで価格表をダウンロードして確認する
- 注意点
- ここに書いた金額は目安。年に2回のバージョンアップ(例年春と秋)で価格や条件が変わることがあるため、購入直前に必ず公式ページで再確認する
リハビリ用途で揃えたい追加ツールボックス
- できること
- MATLAB本体だけでも基本的な解析はできるが、目的別に追加すると一気に幅が広がる
- 使える場面
- どのツールボックスから揃えればいいか迷う場面
- 今すぐ試すなら
- 優先度順に、①Signal Processing Toolbox(EMG・加速度データのフィルタ処理)②Statistics and Machine Learning Toolbox(統計検定・分類)③Curve Fitting Toolbox(動作曲線のモデル化)④Image Processing / Computer Vision Toolbox(動作の映像解析)⑤Simulink・Simscape(ロボット・外骨格のシミュレーション)の順に検討する
- 注意点
- Home / Studentライセンスでは選べるツールボックスに制限がある場合がある。目的のツールボックスが対象かどうか、購入前に一覧で確認する
インストールから初回起動まで
- できること
- MathWorksアカウントの作成、インストーラのダウンロード、ライセンス認証までの一連の流れ
- 使える場面
- 購入後、実際に使い始める場面
- 今すぐ試すなら
- MathWorksアカウントを作成→購入したライセンスに紐づける→公式サイトからインストーラをダウンロード→インストール時に必要なツールボックスにチェックを入れる、という順で進める。ネットにつながる環境があれば、迷うポイントは少ない
- 注意点
- Student / Homeライセンスは譲渡できないため、必ず自分自身のMathWorksアカウントでサインインする
30日間の無料トライアルで試す
- できること
- 購入前に、実際の画面・動作速度・自分のPCとの相性を無料で確認できる
- 使える場面
- 「本当に自分に必要か」を購入前に見極めたい場面
- 今すぐ試すなら
- 公式サイトから評価版(トライアル)を申し込み、まずは本記事のSTAGE2・3のコードを実際に動かしてみる
- 注意点
- トライアル期間中に使えるツールボックスには制限がある場合がある。本命のツールボックスが試せるか事前に確認する

基礎編:プログラミング未経験でも迷わない、最低限の文法
ここで紹介する内容だけ押さえれば、STAGE3以降のコードは無理なく読めるようになります。
変数と行列の基本
- できること
- MATLABは「すべてが行列」という考え方で動く言語。1つの数値も、1×1の行列として扱われる
- 使える場面
- 関節角度・筋電位など、時系列で並んだ数値データを扱うほぼすべての場面
- 今すぐ試すなら
- 下記のコードをコマンドウィンドウに1行ずつ入力し、結果がどう変わるかを確認する
- サンプルコード
-
romData = [95 98 100 102 105]; % 5回分のROM測定値[deg] meanROM = mean(romData); % 平均 stdROM = std(romData); % 標準偏差 fprintf('平均ROM: %.1f ± %.1f deg\n', meanROM, stdROM); - 注意点
- 行ベクトル(横並び)と列ベクトル(縦並び)を混同すると、演算エラーや意図しない結果になりやすい。困ったら size(変数名) で形を確認する癖をつける
スクリプトと関数を分ける
- できること
- 一連の処理をそのまま書く「スクリプト(.mファイル)」と、繰り返し使う処理を部品化する「関数」を使い分けられる
- 使える場面
- 同じ計算(例:関節角度の算出)を複数の患者データに繰り返し使いたい場面
- 今すぐ試すなら
- 下記のように関数を定義し、別のスクリプトから呼び出す
- サンプルコード
-
function angle = calcJointAngle(proximal, distal, joint) % 3点の座標(x,y)から関節角度を計算する関数 v1 = proximal - joint; v2 = distal - joint; angle = acosd(sum(v1.*v2,2) ./ (vecnorm(v1,2,2).*vecnorm(v2,2,2))); end % 呼び出し側 kneeAngle = calcJointAngle(hipPos, anklePos, kneePos); - 注意点
- 関数名とファイル名は同じにする必要がある(calcJointAngle.mというファイル名で保存)
データの読み込みとグラフ化
- できること
- Excel・CSV形式で保存された評価データや計測データを読み込み、すぐにグラフにできる
- 使える場面
- 床反力計・モーションキャプチャ・表計算ソフトで記録したデータを解析したい場面
- 今すぐ試すなら
- 下記のコードでCSVを読み込み、時系列グラフを描画する
- サンプルコード
-
T = readtable('gait_data.csv'); % 表形式で読み込み time = T.Time; grf = T.VerticalGRF; % 垂直床反力の列 figure; plot(time, grf, 'LineWidth', 1.5); xlabel('時間 [s]'); ylabel('垂直床反力 [N]'); title('片麻痺患者の歩行時垂直床反力'); grid on; - 注意点
- readtableは列名を自動で変数名にする。日本語やスペースを含む列名はエラーの原因になりやすいため、半角英数字の列名にしておくとつまずきにくい
信号処理の基礎(ノイズ除去)
- できること
- 筋電位(EMG)や加速度データに乗るノイズを、フィルタ処理で取り除く
- 使える場面
- センサーで取得した生データがギザギザで、そのままでは解析に使えない場面
- 今すぐ試すなら
- Signal Processing Toolboxのbutter関数とfiltfilt関数を組み合わせる
- サンプルコード
-
fs = 1000; % サンプリング周波数[Hz] cutoff = 20; % 遮断周波数[Hz] [b,a] = butter(4, cutoff/(fs/2), 'low'); emgFiltered = filtfilt(b, a, emgRaw); plot(emgRaw, 'Color', [0.8 0.8 0.8]); hold on; plot(emgFiltered, 'LineWidth', 1.5); legend('生データ','フィルタ後'); - 注意点
- 遮断周波数はデータの種類(EMGか加速度か歩行の関節角度か)によって適切な値が変わる。先行研究で使われている数値を参考にする

実践編:上肢・下肢・体幹訓練と研究への応用
基礎文法を押さえたら、いよいよ臨床・研究に直結する使い方です。ここからが「MATLABがリハビリで選ばれる理由」の本体です。
上肢:リーチ動作の関節角度・軌道解析
- できること
- 肩・肘・手首の座標データから、リーチ動作中の関節角度の変化や、手先の軌道の滑らかさを数値化する
- 使える場面
- 脳卒中患者の上肢機能訓練で、訓練前後の動作の変化を客観的に示したい場面
- 今すぐ試すなら
- 肩・肘・手首の座標データ(IMUやモーションキャプチャから取得)を使い、肘関節角度の時系列変化と、動作の滑らかさの指標(躍度)を計算する
- サンプルコード
-
% 肘関節角度(肩-肘-手首の3点から算出) elbowAngle = calcJointAngle(shoulderPos, wristPos, elbowPos); % 手先軌道の滑らかさ(正規化躍度、値が小さいほど滑らか) vel = gradient(wristPos) ./ dt; acc = gradient(vel) ./ dt; jerk = gradient(acc) ./ dt; normJerk = sqrt(trapz(sum(jerk.^2,2)) * dt^5 / trapz(sum(vel.^2,2))); fprintf('正規化躍度: %.3f\n', normJerk); - 注意点
- 躍度の計算は微分を3回繰り返すため、ノイズの影響を受けやすい。事前のフィルタ処理(STAGE2の④)を必ず行う
下肢:歩行の関節角度・床反力解析
- できること
- 股関節・膝関節・足関節の角度と、床反力計から得られる荷重データを組み合わせ、歩行周期ごとの特徴を可視化する
- 使える場面
- 片麻痺患者の歩行パターンを、健常歩行の参考データと比較したい場面
- 今すぐ試すなら
- 踵接地のタイミングを床反力データから検出し、1歩行周期を100%に正規化してグラフにする
- サンプルコード
-
% 踵接地のタイミングを検出(床反力が閾値を超えた点) threshold = 20; % [N] heelStrike = find(diff(grf > threshold) == 1); % 1歩行周期を100%に正規化して膝関節角度を重ね描き for i = 1:length(heelStrike)-1 cycle = kneeAngleSmooth(heelStrike(i):heelStrike(i+1)); cycleNorm = interp1(1:length(cycle), cycle, ... linspace(1,length(cycle),101)); plot(0:100, cycleNorm, 'Color',[0.6 0.6 0.9]); hold on; end xlabel('歩行周期 [%]'); ylabel('膝関節角度 [deg]'); - 注意点
- 閾値(threshold)はセンサーの感度や体重によって調整が必要。数周期分を目視確認しながら決める
体幹:重心動揺(姿勢制御)の解析
- できること
- 重心動揺計や体幹に装着したIMUのデータから、静止立位や座位バランスの安定性を数値化する
- 使える場面
- 体幹訓練の効果を、姿勢の揺れ幅という客観的な数値で示したい場面
- 今すぐ試すなら
- 重心動揺の軌跡(COP:Center of Pressure)データから、総軌跡長と矩形面積を算出する
- サンプルコード
-
% copX, copYは重心動揺計から取得したCOP座標[mm] totalPathLength = sum(sqrt(diff(copX).^2 + diff(copY).^2)); rectArea = (max(copX)-min(copX)) * (max(copY)-min(copY)); fprintf('総軌跡長: %.1f mm\n', totalPathLength); fprintf('矩形面積: %.1f mm^2\n', rectArea); figure; plot(copX, copY); axis equal; xlabel('左右方向 [mm]'); ylabel('前後方向 [mm]'); title('重心動揺軌跡'); - 注意点
- 総軌跡長・矩形面積は測定時間や開眼/閉眼条件で大きく変わる。条件をそろえて比較する
研究:統計解析とグラフ作成
- できること
- 訓練前後の比較(対応のあるt検定)や、複数群の比較(分散分析)を行い、学会発表・論文投稿レベルのグラフを作成する
- 使える場面
- 症例数がまとまり、効果を統計的に示したい場面
- 今すぐ試すなら
- Statistics and Machine Learning Toolboxのttest関数で、訓練前後のROMを比較する
- サンプルコード
-
preROM = [95 98 100 92 97]; % 訓練前 postROM = [102 105 108 99 103]; % 訓練後(対応あり) [h, p, ci, stats] = ttest(preROM, postROM); fprintf('p値 = %.3f, t値 = %.2f\n', p, stats.tstat); % 箱ひげ図で可視化 boxplot([preROM' postROM'], 'Labels', {'訓練前','訓練後'}); ylabel('膝関節可動域 [deg]'); title(sprintf('訓練前後のROM比較 (p = %.3f)', p)); - 注意点
- 統計手法の妥当性(正規性の確認、サンプルサイズなど)は、統計に詳しい指導者・共同研究者に必ず確認する。学会発表・論文投稿の前には倫理審査など院内手続きを確認する
先進編:業界の先を行くリハビリ×MATLAB活用
ここから先は研究機関・先進的な病院で実際に使われている応用例です。仕組みを知っておくだけでも、今後のリハビリ機器導入の判断材料になります。
機械学習による転倒リスク・動作分類
- できること
- 歩行速度・歩幅のばらつき・重心動揺量などの特徴量から、転倒リスクの高低や動作パターンを自動分類する
- 使える場面
- 多数の評価データが蓄積し、経験則だけでなくデータに基づいたリスク層別化をしたい場面
- 今すぐ試すなら
- Classification Learnerアプリ(コード不要のGUI)を使うか、下記のようにfitcsvm関数でサポートベクターマシンを学習させる
- サンプルコード
-
% features: [歩行速度, 歩幅CV, 重心動揺量] の行列 % labels: 'high_risk' / 'low_risk' のカテゴリ mdl = fitcsvm(features, labels, 'KernelFunction','rbf', ... 'Standardize', true); cvMdl = crossval(mdl, 'KFold', 5); accuracy = 1 - kfoldLoss(cvMdl); fprintf('交差検証での分類精度: %.1f%%\n', accuracy*100); - 注意点
- 分類結果は「参考情報」であり、転倒予防の最終判断は専門職が行う。学習データが偏っていると精度が実態を反映しない点に注意する
映像からの姿勢推定データをMATLABで解析
- できること
- スマホ動画から関節位置を推定する姿勢推定技術(MediaPipeなど)の出力データを、MATLABに読み込んで角度計算・グラフ化まで一気通貫で行う
- 使える場面
- 専用のモーションキャプチャ設備がない環境で、動画だけから動作解析を行いたい場面
- 今すぐ試すなら
- 姿勢推定ツールが出力した関節座標のCSV/JSONをreadtable・jsondecodeでMATLABに取り込み、STAGE3で使った関節角度計算の関数をそのまま適用する
- 注意点
- 姿勢推定の精度はカメラ角度・照明・衣服の色に影響される。臨床評価としてそのまま使わず、傾向把握の参考情報として扱う
ロボットリハビリ・外骨格のシミュレーション
- できること
- Simulink・Simscape Multibodyを使い、外骨格やロボットリハビリ機器の制御アルゴリズムを、実機を作る前にパソコン上で検証する
- 使える場面
- 関節にかかるトルクや、制御パラメータの調整を、患者に負担をかけずにシミュレーションで詰めたい場面
- 今すぐ試すなら
- Simscape Multibodyのブロックライブラリから、上腕・前腕のリンク機構を組み、目標角度に追従させるPID制御ブロックをつないでシミュレーションを実行する(ブロック線図で組むため、コードを書く量は少ない)
- 注意点
- シミュレーションでの妥当性確認と、実機での安全性確認は別物。実機を患者に使用する前には、機器としての安全基準・院内承認が必要
ウェアラブルセンサ×クラウドでの遠隔モニタリング
- できること
- 患者が自宅で装着したウェアラブルセンサのデータを、クラウド経由でMATLABに取り込み、活動量や歩行の変化を継続的にモニタリングする
- 使える場面
- 退院後の在宅生活での活動量変化を、通院時だけでなく継続的に把握したい場面
- 今すぐ試すなら
- ThingSpeak(MathWorksが提供するIoT向けクラウドサービス)にセンサーデータを送信し、MATLAB側でthingSpeakRead関数を使って定期的にデータを取得・解析する
- 注意点
- クラウドに患者データを送る場合は、匿名化・暗号化・施設の同意取得ルールを事前に整備する。個人情報保護の観点から、必ず情報システム部門と連携する

マニア編:ここまで来ると、もう研究開発です
ここから先は趣味・研究レベルの内容です。全部を目指す必要はありませんが、「MATLABはここまでできる」という視野を持っておくと、将来の選択肢が広がります。
Arduino・Raspberry Piと直結する
- できること
- MATLAB Support Package for Arduinoを使うと、専用のC言語を書かずに、MATLABのコードだけでArduinoの入出力を直接制御できる
- 使える場面
- 圧力センサーや筋電センサーを使った、自作の反応装置・フィードバック装置を作りたい場面
- 今すぐ試すなら
- Add-On Explorerから「MATLAB Support Package for Arduino Hardware」をインストールし、下記のようにセンサー値を読み取る
- サンプルコード
-
a = arduino('COM3', 'Uno'); % ポート名は環境に合わせて変更 for i = 1:100 pressureVal = readVoltage(a, 'A0'); % 圧力センサーの値を読む if pressureVal > 2.5 writeDigitalPin(a, 'D13', 1); % LEDを点灯 else writeDigitalPin(a, 'D13', 0); end pause(0.1); end - 注意点
- あくまで研究・試作段階のツール。医療機器として患者に使用するには、別途安全性の検証と院内承認が必要
リアルタイムEMGフィードバックシステムの自作
- できること
- 筋電位を計測しながら、設定した閾値を超えたときにリアルタイムで音や光のフィードバックを返す仕組みを、MATLABだけで組み立てる
- 使える場面
- 筋出力のバイオフィードバック訓練を、既製品を買わずに試作したい場面
- 今すぐ試すなら
- データ収集用のハードウェア(Arduino+筋電センサーモジュールなど)と組み合わせ、STAGE2で紹介したfiltfiltによるノイズ除去をリアルタイムループの中に組み込む
- サンプルコード
-
threshold = 1.5; % フィードバックを出す閾値[V] duration = 30; % 計測時間[秒] tic; while toc < duration emgVal = readVoltage(a, 'A0'); if emgVal > threshold writeDigitalPin(a, 'D13', 1); % LEDで視覚フィードバック % 音でのフィードバックを加える場合は sound() 関数を利用 else writeDigitalPin(a, 'D13', 0); end end - 注意点
- 研究・試作用途に留め、患者への使用前には施設の安全管理部門への相談を必須とする
App Designerで臨床用オリジナルアプリを作る
- できること
- App Designerというドラッグ&ドロップのGUI作成ツールで、評価入力フォームや解析結果を自動表示するオリジナルアプリを、プログラミング初心者でも作成できる
- 使える場面
- 院内で繰り返し使う評価・解析作業を、ボタン一つで完結するアプリ化したい場面
- 今すぐ試すなら
- App Designerを開き、入力用のテキストボックスと「解析実行」ボタンを配置。ボタンが押されたときの処理(コールバック関数)に、STAGE3で紹介した関節角度計算のコードを組み込む
- 注意点
- 作成したアプリを院内の他スタッフに配布する場合、MATLAB Compilerを使ってスタンドアロン実行ファイル化する方法もあるが、別途ライセンスが必要になる場合がある
筋骨格モデル(OpenSim等)との連携
- できること
- 筋骨格シミュレーションソフトOpenSimで計算した筋張力・関節モーメントのデータを、MATLABに読み込んで独自の指標を追加計算する。OpenSimにはMATLAB用のスクリプティングインターフェースが用意されている
- 使える場面
- 関節角度・床反力だけでなく、「どの筋肉がどれだけ働いているか」まで踏み込んだ研究をしたい場面
- 今すぐ試すなら
- OpenSimでモデルと動作データから逆動力学解析を行い、出力された筋張力データ(.stoファイル)をMATLABのimportdataやreadtableで読み込み、STAGE3の統計解析コードと組み合わせる
- 注意点
- 筋骨格モデルは仮定・簡略化を含む理論モデルであり、実際の筋活動と完全には一致しない。あくまで研究上の推定値として扱う
ロードマップ一覧表
| 段階 | 項目 | できること | 今すぐ試すなら | 注意点 |
|---|---|---|---|---|
| 導入 | 1. 動作環境の確認 | OS・メモリ要件の把握 | 公式サイトのシステム要件を確認 | 2026年以降Intel Macは新版非対応 |
| 導入 | 2. ライセンスの選択 | Home/Standard/包括契約から選ぶ | 所属先に包括契約があるか確認 | Homeは非営利個人利用限定 |
| 導入 | 3. 価格の目安把握 | 本体・ツールボックスの費用感を掴む | 公式価格ページで最新価格を確認 | 年2回の改定で変動あり |
| 導入 | 4. 追加ツールボックス選定 | 目的別に必要な機能を選ぶ | Signal Processing等を優先検討 | ライセンス種別で選択肢に制限 |
| 導入 | 5. インストールと認証 | 購入から初回起動までの流れ | アカウント作成→紐付け→DL | Home/Studentは譲渡不可 |
| 導入 | 6. 無料トライアル | 購入前に動作確認 | 30日評価版を申込 | 使えるツールボックスに制限あり |
| 基礎 | 7. 変数と行列の基本 | 時系列データの基本操作 | mean/std等を実際に打ってみる | 行・列の向きに注意 |
| 基礎 | 8. スクリプトと関数 | 処理の部品化・再利用 | 関節角度計算を関数化 | 関数名とファイル名を一致させる |
| 基礎 | 9. データ読込とグラフ化 | CSV/Excelの取り込みと可視化 | readtableで歩行データを描画 | 列名は半角英数字で統一 |
| 基礎 | 10. 信号処理の基礎 | ノイズ除去(フィルタ処理) | butter+filtfiltでEMGを平滑化 | 遮断周波数はデータ種別で調整 |
| 実践 | 11. 上肢:リーチ動作解析 | 関節角度・軌道の滑らかさ算出 | 肘関節角度と正規化躍度を計算 | 躍度計算はノイズに弱い |
| 実践 | 12. 下肢:歩行解析 | 歩行周期ごとの関節角度可視化 | 床反力から踵接地を検出し正規化 | 閾値は体重・感度で要調整 |
| 実践 | 13. 体幹:重心動揺解析 | 姿勢制御の安定性を数値化 | 総軌跡長・矩形面積を算出 | 測定条件をそろえて比較 |
| 実践 | 14. 研究:統計解析 | 訓練前後比較・学会発表用図表 | ttest+boxplotで可視化 | 倫理審査等の手続きを確認 |
| 先進 | 15. 機械学習での分類 | 転倒リスク・動作パターン分類 | fitcsvmで分類モデルを学習 | 判断はあくまで専門職が実施 |
| 先進 | 16. 姿勢推定データ連携 | 動画ベースの動作解析 | 推定ツールの出力をMATLABで解析 | 臨床評価の代替にはしない |
| 先進 | 17. 外骨格シミュレーション | 制御アルゴリズムの事前検証 | Simscape Multibodyでモデル構築 | 実機使用は別途安全確認が必要 |
| 先進 | 18. クラウド遠隔モニタリング | 在宅での活動量継続把握 | ThingSpeak連携でデータ取得 | 個人情報の送信ルールを整備 |
| マニア | 19. Arduino直結 | センサー入出力の直接制御 | Support Packageでセンサー読取 | 医療機器としての使用には別途承認 |
| マニア | 20. EMGリアルタイムFB | バイオフィードバック装置の試作 | 閾値超えでLED/音フィードバック | 患者使用前に安全管理部門へ相談 |
| マニア | 21. App Designerでアプリ化 | 院内業務のGUIアプリ化 | 入力フォーム+解析ボタンを作成 | 配布にはCompilerライセンスが必要な場合あり |
| マニア | 22. 筋骨格モデル連携 | OpenSim等との高度な研究連携 | 逆動力学の出力をMATLABで解析 | 理論モデルであることを踏まえる |
そのまま使えるコード集(コピー&ペースト用)
clc; clear; close all; % コマンド履歴・変数・図をすべてクリアしてから開始
T = readtable('data.csv'); % データ読み込み
disp(T.Properties.VariableNames); % 列名を確認してから解析に進む
function angle = calcJointAngle(proximal, distal, joint)
% proximal, distal, joint はそれぞれ [x y] または [x y z] のNx2/Nx3行列
v1 = proximal - joint;
v2 = distal - joint;
cosTheta = sum(v1.*v2,2) ./ (vecnorm(v1,2,2).*vecnorm(v2,2,2));
angle = acosd(cosTheta);
end
function dataSmooth = smoothSignal(dataRaw, fs, cutoff)
[b,a] = butter(4, cutoff/(fs/2), 'low');
dataSmooth = filtfilt(b, a, dataRaw);
end
% 使用例: emgSmooth = smoothSignal(emgRaw, 1000, 20);
function compareBeforeAfter(pre, post, unitLabel)
[~, p, ~, stats] = ttest(pre, post);
figure;
boxplot([pre(:) post(:)], 'Labels', {'訓練前','訓練後'});
ylabel(unitLabel);
title(sprintf('訓練前後の比較 (p = %.3f, t = %.2f)', p, stats.tstat));
end
% 使用例: compareBeforeAfter(preROM, postROM, '可動域 [deg]');
% 個人情報を含んだファイル名や変数名をそのまま使ってしまう例
patientData_Yamada_Taro_19450101 = readtable('yamada.csv');
% → ファイル名・変数名・保存フォルダに個人が特定できる情報が残ってしまう
% 事前に匿名IDへの対応表を、解析用フォルダとは別の場所で厳重に管理する
patientData_ID0231 = readtable('ID0231.csv');
% 対応表(氏名⇔ID)は、院内の個人情報管理ルールに沿った場所にのみ保管する
医療・研究分野での注意点
- 患者データの氏名・生年月日・カルテIDなどは、ファイル名・変数名・フォルダ名にも残さない。解析前に匿名IDへ置き換える
- 院内PCへのインストールや、クラウド版(MATLAB Online)へのデータアップロードは、必ず情報システム部門・医療安全部門のルールに従う
- 解析結果・分類結果・シミュレーション結果は、あくまで臨床判断の参考情報。診断・治療方針・機器適用の最終判断は専門職が行う
- 自作の電子機器(Arduino等)やフィードバック装置は、安全性未確認のまま患者に直接使用しない
- 統計解析の妥当性(正規性の確認、サンプルサイズ、多重比較の扱いなど)は、統計の専門家・指導者に必ず確認する
- 研究として発表・論文化する場合は、事前に倫理審査など院内の手続きを確認する
- MATLAB自体は解析・シミュレーションのための汎用ツールであり、それ自体が医療機器として承認されたものではない点を理解して使う
- ライセンス条件(Home/Student/Standard等)に応じた利用範囲を守る。商用利用や組織利用にHomeライセンスを使わない
保存版:MATLABでリハビリ解析を始める前のチェックリスト
まとめ
ここまで、MATLABの導入から、基礎文法、上肢・下肢・体幹訓練の実践的な解析、業界の先進活用、そしてマニアックな機器連携まで、実際のコードとともに紹介しました。
MATLABは、リハビリ職にとって「評価データをただ記録するだけ」から「データを解析し、可視化し、根拠として示す」への一歩を後押ししてくれる道具です。最初から機械学習や外骨格シミュレーションを目指す必要はありません。まずは「訓練前後のROMをグラフで比較する」「歩行データのノイズを取り除く」といった小さな一歩から始めれば十分です。
MATLABは臨床判断を置き換えるものではなく、判断の材料を、より速く、より正確に、より説得力のある形で用意するための道具です。リハビリ職がMATLABを使う価値は、専門性を手放すことではなく、専門性を数字とグラフで語れるようにすることにあります。
コメント