저비용 측정 심장 박동 간격의 변화 - 계속

13779 단어 RaspberryPiPython

입문


지난번에는 라즈베리파이에서 측정한 심장박동을 컴퓨터로 옮겨 Matlab로 처리했지만 하는 일 자체가 간단해서 라즈베리파이에서 다 해결하기 위해 많이 때리면서 해봤어요.

파워 스펙트럼 밀도(PSD; power spectral density)의 계산 방법


스트레스와 자율신경의 과학 중 자귀환 모델을 추천했지만 모델 제작은 가장 유력한 횟수를 결정해야 할 것 같다.적지 정보량 기준(AIC)이 좋은 것 같습니다.그러나 실제 데이터를 적용하면 이 횟수가 일반적인 방법으로 결정되는 것은 통하지 않는다.모든 데이터는 배, 반, 심지어 더 많은 횟수 차이가 나타난다.이번 데이터를 그려봐도 AIC가 가장 낮은 횟수를 간단하게 선택할 수 있을지 의문이다.그래서 여기저기 찾아보면 Lomb-Scargle법에 해당한다.matlab여기라면어쨌든 샘플링이 통일되지 않은 신호를 직접 사용하면 된다.그래서 여기까지 뛰어왔어요.심장 박동률 간격 변동의 계산도 잘 쓰인 것 같다.

RaspberryPi에서 필요한 모듈 다운로드


오류를 시도한 결과, 필요한 것은numpy, matplotlib, astropy 세 개였다.아무튼 Raspberry Pi에python3+numpy+matplotlib를 설치합니다..브랜드는 거의 새로운 라즈베리파이가 유효한 것으로 결과는 다음과 같다.
pip3 install bumpy
sudo apt-get install python3-matplotlib
pip3 install astropy
Scipy가 유명하지만 이 데이터는 이 함수만 한정하면 (그리고 사용자가 익숙하지 않은 나 때문일 수도 있지?)scipy.signal.lombscargle의 결과 (여기에 없는 다른 방법을 사용한 결과와 비교하면) 약간?그래서, astropy.stats.LombScargle을 사용하기로 결정했습니다.
그리고 아주 유용한 것은 Qiita의 이 글은
Sudo apt-get install python3-pyqt5
backend : qt5agg
흉내내면 못 쓴 도표를 그릴 수 있어요.정말 감사합니다.

그에게 실제로 도표를 쓰게 하다


비교적 안정적으로 데이터를 얻을 수 있지만 처음에는 몇 가지가 거칠어지기 때문에 먼저 성형하는 것이 좋다.수동
그리고 그것을 사용하면,python3plot_hrv.py input.npy output.jpg로 그림을 저장합니다.
이런 느낌.데이터가 혼란스러워서 지난번 데이터와는 다르다.

LF, HF는 파워 스펙트럼의 LF 성분 영역(0.05Hz~0.15Hz)과 HF 성분 영역(0.15Hz~0.40Hz)의 강도입니다.단위는 sec^2/Hz입니다.
또 초초보자 코드도 넣었다.오류 등을 지적해 주세요.그 전에는 배열의 조작이 직관적이지 않았는지 모르겠다.결과가 좋다.며칠 후에 공부하다.
plot_hrv.py
import sys 
import numpy as np
import matplotlib.pyplot as plt
from astropy.stats import LombScargle 
print('Usage - python3 ana.py input.npy output.jpg')
def main(argv):
    args = sys.argv

    ibi = np.load(args[1])
    ibi = ibi/1000

    a = np.shape(ibi)[0]
    time = [];
    for i in range(a):
        b = ibi[:i]
        time.append(b.sum())
    time = np.asarray(time) #list to array

    hr = 60/np.mean(ibi)

    frequency, pgram = LombScargle(time,ibi).autopower()
    print(max(frequency))
    print(max(pgram))

    n1 = min((frequency>0.05).nonzero())[0]
    n3 = min((frequency>0.15).nonzero())[0]
    n4 = min((frequency>0.4).nonzero())[0]
    n2 = n3-1
    n4 = n4-1

    lf_pow = 0
    hf_pow = 0
    for i in (n1,n2):   
        lf_pow = lf_pow + pgram[i]
    for i in (n3,n4):
        hf_pow = hf_pow + pgram[i]
    lf_pow = (lf_pow - pgram[n1]/2 - pgram[n2]/2) / ((frequency[n2] - frequency[n1])/(n2 - n1))
    hf_pow = (hf_pow - pgram[n3]/2 - pgram[n4]/2) / ((frequency[n4] - frequency[n3])/(n4 - n3))
    lf = round(lf_pow,2)
    hf = round(hf_pow,2)

    print("LF_POW = :", lf_pow)
    print("HF_POW = :", hf_pow)
    print("HR = :",hr)
    plt.subplot(121)
    plt.plot(time,ibi,lw=0.5)
    plt.title("Time-RRI")
    plt.subplot(122)
    plt.plot(frequency,pgram,lw=0.5)
    plt.xlim(0,0.5)
    plt.ylim(0,0.2)
    plt.title("Freq-Pow: LF = " + str(lf) + " HF = " + str(hf))
    plt.savefig(args[2])
    plt.show()

if __name__ == "__main__":
    main(sys.argv[1:])

고찰이라기보다는 뒤죽박죽이다

  • 드디어 라즈베리피로만 심장박동 측정, HRV 계산을 할 수 있게 되었다.
  • 여기에 게재되지는 않았지만 PSD를 구해야 할 몇 가지 방법을 시도해 보았음에도 불구하고 누군가에게만 스트레스 지표인 LF, HF, LF/HF의 상태가 일으키는 크기 관계에는 변화가 없었다.즉, 개인 A의 상태인 X, Y에서 HF가 X>Y, LF가 XY라면 어떤 방법이든 이런 크기 관계는 같다.(응, n=3밖에 없어.)
  • 다른 한편, 개인 간의 크기는 방법에 따라 간단하게 변화하는 것 같다.(n=1이 변했다.)
  • , 그래서 어느 정도 한 사람의 상태를 관찰할 수 있다.
  • 내 휴대전화 충전기는 라즈베리피에게 전기를 공급할 수 있다.이후 전기 소모가 적은 스크린이 있으면 휴대할 수 있을 것이다.찾다
  • 좋은 웹페이지 즐겨찾기