LoginSignup
7

More than 5 years have passed since last update.

低コストで心拍間隔変動を測ってみる

Last updated at Posted at 2018-10-23

はじめに

ストレス状態をみるのに、心拍間隔変動(HRV)が指標になるらしい。例えば、ストレスと自律神経の科学。なるべく低コストでストレス状況が測れないか試してみた。

ラズベリーパイと心拍センサー

知識皆無なので、偉大な先人に習う。
Heart Rate monitor using Raspberry Pi and Pulse sensor。Raspberry Pi, ADS1015,Pulse sensorを購入。eBay使わなかったし、新品のみで、合計8000円くらいかな。あちこち手配したけど、今見るとスイッチサイエンスで簡単に手に入ったかなと思う。組み立てもそのまま。ADCとジャンパーケーブルの間が安定しないので、はんだ付けした。不慣れな私にはこれがかなり難しかった。
#コード
リンクからpython codeをダウンロード。オリジナルでは心拍間隔(IBI)は捨てているので、それだけ、dataIBI.append(data)を追加して、IBIの時系列データを得るようにした。もう1つ、測定時間を決めて、それ以上になったところでデータをセーブする手順を加えた。結局、3行ほど加えただけ。
#データの取得
とりあえず、部屋を静かにした時、うるさくした時の2度測って見る。自覚する心拍とRaspberry Piの心拍は一致している。
#Matlab 処理
ここで、Raspberry pi上のpythonでデータ処理するとかっこいいのに。と思うのだけど、とりあえず、結果見たいので、PCにデータをうつして、Matlabで処理。最近マイブームのフーリエ解析で。って、こちらもよく分かっているわけでないので、適当に補完を使って、またまたいい加減に書いて見た。正直、正しいかどうかよくわからない。全くデタラメの可能性もある。叩き台としてのコードはここ。入力は得られたIBI。出力はtimeB:測定期間を0.01秒ごとの等間隔にした数列、IBIv:素のIBIデータを0.01秒間隔として補完したもの、f:フーリエ解析で得られた周波数(Hz)、P1:フーリエ解析で得られたスペクトラム、LF:低周波数成分(0.04〜0.15Hz)の積分、HF:高周波数成分(0.15〜0.40Hz)の積分。

HFLF.m
function [timeB IBIv f P1 HF LF] = HFLF(IBI)
time = []; 
for i = 1:size(IBI,2)
time(i)=(sum(IBI(1:i))-IBI(1))/1000;
end
timeB=0:0.01:time(size(time,2)); % set with 100Hz
%IBIv=interp1(time,IBI,timeB);% interpolation
IBIv=spline(time,IBI,timeB);% interpolation
Fs=100; % 100Hz
Y=fft(IBIv);
L = size(timeB,2);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;
~% LF 0.05 - 0.15
a1=min(find(f>0.04));
b1=max(find(f<0.15));
c1 = 0;
for i = a1+1:b1-1
c1=c1+P1(i);
end
%LF = c1*(f(b1) - f(a1))/(b1 - a1);
LF = (c1+(P(a1)+P(b1))/2) * (f(b1) - f(a1))/(b1 - a1);
% HF 0.15 - 0.40
a2=b1+1; %corrected from a1 to b1
b2=max(find(f<0.40));
c2 = 0;
for i = a2+1:b2-1
c2=c2+P1(i);
end
%HF = c2*(f(b2) - f(a2))/(b2 - a2);
HF = (c2+(P(a2)+P(b2))/2)*(f(b2) - f(a2))/(b2 - a2);

プロット

ストレスと自律神経の科学とか、心拍揺らぎによる精神的ストレス評価法に関する研究とか参照にして、部屋を静かにした時、うるさくした時のデータをプロットして見た。SilentNoise.png青が静かな時、赤がうるさい時。3つ目、パワースペクトル密度(PSD;power spectral density)を計算するみたいだけど、そのうち修正するつもりではいる。静かな時、うるさい時の平均心拍数は79.4と77.9。低周波数成分はそれぞれ0.6754、0.5266,高周波数成分は0.5612,0.6518。低周波数成分はそれぞれ0.7121、0.5450~,高周波数成分は~1.2099,1.1697

考察

  1. 低コスト装置でHRVを測れないかどうかやってみた。自覚する心拍とRaspberry Piの心拍数は一致していた。
  2. 静かな時と、うるさい時での変動があるかやってみた。自覚的にはうるさい時はストレスを感じていた。が、平均心拍数は静かな時の方が高めだった。うるさいのはストレスでないのか、心拍数自体がストレスの指標にならないのか、データがまずいのか、コードがまずいのか、不明。ま、一回試しただけだし。そのうち。
  3. うるさい時にLFは低め、HFは高め。LF/VFも低め。心拍揺らぎによる精神的ストレス評価法に関する研究とか、Validation of the Apple Watch for Heart Rate Variability Measurements during Relax and Mental Stress in Healthy Subjectsとかに書かれているように、ストレスでLF,HFが下がり、LF/HFが上がるというとはそぐわない。
  4. 今検討中のパワースペクトル密度(PSD;power spectral density)でも同様の変化が見られるので、どっちかというと、計測条件(静か、うるさい)があまり適していない可能性が高いと思う。
  5. 電池と小型モニターをつなげ、コードを修正、さらにPythonに書き換えれば、ポータブル心拍間隔変動測定装置ができるはず。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7