面積を求めたい

29 visualizaciones (últimos 30 días)
yuta
yuta el 4 de Mzo. de 2022
Comentada: yuta el 7 de Mzo. de 2022
筋電図解析についてです。
2つの筋電図を正規化したデータ(%MVC)があり、それぞれの面積および重なり合う部分の面積を求め、下にあるような式に当てはめるにはどのようにすれば良いでしょうか。
また任意の時間(例:3〜5秒区間)を指定して、計算を行う方法についてもご教示いただければ幸いです。
すでにあるデータのイメージ:
sec = [0.001, 0.002, 0.003 .......]
A筋(%) = [20, 30, 40, 50, 60 .........]
B筋(%) = [60, 50, 40, 30, 20 .........]
以下求めたいものについてです。
上手く説明ができないため、図を貼ります。
上記図:
右上がり斜線:A筋の正規化したデータをプロットしたもの
右下がり斜線:B筋の正規化したデータをプロットしたもの
斜線の交差:両方の筋が重なっている部分
上記式:
area A = A筋の面積(図では右上がりの斜線と斜線が交差している部分)
area B = B筋の面積(図では右下がりの斜線と斜線が交差している部分)
commn area = 斜線が交差している部分
イメージ的には
  1. A筋とB筋の同じ時間における小さい方の値を抽出
  2. 1で抽出した面積およびA筋とB筋の面積を計算
  3. 面積を求める範囲(時間)を指定
  4. 上記の式に当てはめ計算する
のような手順になるのではないかと思っていますが、方法がわかりません。
MATLABを使い慣れておらず、素人質問で恐縮ですが、ご教示いただければと思います。
よろしくお願いします。
引用:
バイオメカニクス 人体運動の力学と制御 [原著第4版]

Respuesta aceptada

Hernia Baby
Hernia Baby el 4 de Mzo. de 2022
mintrapz を使えば実現可能だと思います
まずは適当な関数作ります
clc,clear,close all;
Fs = 1e5;
t = (0:1/Fs:1-1/Fs)';
f1 = 5;
f2 = 7;
x1 = 1.2*abs(sin(2*pi*f1*t));
x2 = 1.5*abs(sin(2*pi*f2*t));
figure
hold on
area(t,x1,'FaceAlpha',0.3,'EdgeColor','none','FaceColor','r')
area(t,x2,'FaceAlpha',0.2,'EdgeColor','none','FaceColor','b')
hold off
ここから min で小さい方をとります
xmin = min(x1,x2);
ちょっと図示してみますか
figure
hold on
area(t,x1,'FaceAlpha',0.3,'EdgeColor','none','FaceColor','r')
area(t,x2,'FaceAlpha',0.2,'EdgeColor','none','FaceColor','b')
plot(t,xmin,'--k','LineWidth',.8)
hold off
最後に台形則による数値積分を行います
trapz(t,xmin)
ans = 0.6037
  3 comentarios
Hernia Baby
Hernia Baby el 5 de Mzo. de 2022
1.trapz(t,xmin)について
 スカラー間隔であれば大丈夫そうです
 Q = trapz(X,Y) は、X で指定された座標またはスカラー間隔に対して Y を積分します。
  • X が座標のベクトルである場合、length(X) Y においてサイズが 1 に等しくない最初の次元のサイズに等しくなければなりません。
  • X がスカラー間隔の場合、trapz(X,Y) X*trapz(Y) と等価です。
2.範囲指定について
 indexに格納しましょう
t = 0:0.1:1;
x = 2*t;
 t1 ~ t2 間の x を抜き出し、x1という変数に入れます
t1 = 0.2;
t2 = 0.6;
idx = t >= t1 & t <= t2;
x1 = x(idx)
x1 = 1×5
0.4000 0.6000 0.8000 1.0000 1.2000
これを0.1刻みとして台形積分を取ります
sumx_dt01 = trapz(0.1,x1)
sumx_dt01 = 0.3200
刻み時間 dt = 0.1 はスカラー値なので以下でも同様です
sumx_dt01_2 = 0.1*trapz(x1)
sumx_dt01_2 = 0.3200
yuta
yuta el 7 de Mzo. de 2022
ご回答いただきありがとうございます。
わかりやすくて、とても参考になりました!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre プログラミング en Help Center y File Exchange.

Productos


Versión

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!