圧曲線の平均圧較差をだす方法

4 views (last 30 days)
Futoshi Yamanaka
Futoshi Yamanaka on 6 May 2019
Commented: Etsuo Maeda on 8 Aug 2019
お世話になっております。
添付ファイルの様に、csvファイルから曲線を描いて、任意の時相の平均圧較差を求めたいです。
codeを書いてみましたが、Matlabの初心者で曲線すら書けないため、困っております。
ご教授の程、よろしくお願い致します。
Fig.jpg
  2 Comments
Yoshio
Yoshio on 6 May 2019
Edited: Yoshio on 6 May 2019
どこがお分かりにならないのか、もう少し具体的に質問をお願いします。
Codeもあれば良いですが、「任意の時相の平均圧較差」を求める、という問題はこの分野以外の人にはわかりませんから、定義をして頂きたいです。
また、MATLAB 入門は勉強されましたか? こちらがまだ終わっていければ、終わらせてからCodeを見直して、再度ご質問ください。プロットの方法と基本の文法はカバーしています。
Futoshi Yamanaka
Futoshi Yamanaka on 23 May 2019
コメントありがとうございます。また、遅いお礼になり失礼いたしました。
MATLABの本を買って勉強しましたが、意図した解析をするcodeが書けませんでした。MATLAB入門も確認してみます。

Sign in to comment.

Answers (1)

Etsuo Maeda
Etsuo Maeda on 23 May 2019
回答がついていないようですので、諸々用語とデータが分かっていない状態で回答します。
質問の際は、Yoshioさんの言うように、回答者になるべく多くの情報を提供されるのがよろしいかと思います。
添付画像の情報が全てとして、以下の1-4のアプローチが考えられます。
1. ファイルの読み込み
見たところ、Excelのスクリーンショットのようです。
readtable/ xlsread/ csvread などで読み込むことができます。
readtable関数であれば、自動的にヘッダを読み飛ばします。
自動判定に失敗するようであれば'HeaderLines'オプションをつかってみてください。
T = readtable('aaa.xlsx')
この状態で当該のファイルの16行目以降がWorkspaceに T として格納されます。
明示的にオプション指定をしない場合、readtableは数字を数値もしくは文字列として自動認識します。
文字列を数値に変換するときは、str2num/ str2doubleを使います。
2. グラフを描く
画像から読み取る限り、横軸は5 msec刻みの時間、縦軸は時間と一対一対応したデータのようです。
まずは、横軸のデータを作ります。
aaa.xlsxがどのようにTに格納されているか次第ですが、大まかには次のような記述が有効です。
myTime = T.Time
myTime = T.Var8 % Timeを変数名として認識していない場合
myTime = (0:length(T))*0.05 % 0.05刻みのベクトルを自力で作成
続いて縦軸のデータを作ります。
例えば、Pdのデータを抜き出すなら
myPd = T.Pd
myPd = T.Var1 % Timeと同じくPdを変数名として認識していない場合
最後にプロットをします。これもどうしたいか次第ですが、もっとも単純なプロットなら
plot(myTime, myPd)
のように描きます。
3. "任意の時相"
これはFutoshiさんの所属されている業界でどのように定義されているか次第です。
例えば、Pd列の値の立ち上がりから立ち下がりまでを一つの時相として捉えるのであれば、Pdの値を微分すれば相の境目が分かりそうです。
Y = gradient(myPd)
手動で相の境界を設定するならば、グラフが描けてしまえば、データ点の座標から指定できます。
4. "平均圧較差"
"平均圧較差"は心臓関連の用語でしょうか。
軽く調べた範囲ですと、測定した血液の流速から圧力差を算出する方法があるようです。
記録したデータの何が何にあたるのかを説明いただけば、何かご案内できるかもしれません。
HTH
  4 Comments
Futoshi Yamanaka
Futoshi Yamanaka on 5 Aug 2019
Maeda様
いつも親切なご指導、ありがとうございます。
ようやく添付のようなFigureを書くことが出来ました。次に青/オレンジの値が、最も低くなる点の値を知りたいのですが、どのようにすればよいでしょうか?よろしくお願い致します。
Etsuo Maeda
Etsuo Maeda on 8 Aug 2019
最小値のインデックスを知りたい場合は、min関数の第2出力引数をとります。
[M, I] = min(myData)
もし、繰り返しの波形の中から谷部, dipとなる点群のインデックスを探すのであれば、
[pks, locs] = findpeaks(-1*myData)
の構文が有効です。
findpeaksはSignal Processing Toolboxに含まれる関数で、peakを検出することができます。
-1を乗算してy軸方向に反転したデータに変換すれば、dipを検出することができます。
もし、うまくdips/ peaksが見つけられない時、例えば1つの谷に2つのdipが検出されてしまう時は、"プロミネンス"を調整してみてください。
data = [25 8 15 5 6 10 10 3 1 20 7];
[pks, pklocs] = findpeaks(data); % find peaks
[dps, dplocs] = findpeaks(-1*data); % find dips from negative value
figure, hold on
plot(data)
scatter(pklocs, pks, 'filled') % plot peaks
scatter(dplocs, -1*dps, 'filled') % plot dips as negative value
hold off, grid on
HTH

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!