저비용 측정 심장 박동 간격의 변화 - 계속
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.pyimport 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:])
고찰이라기보다는 뒤죽박죽이다
스트레스와 자율신경의 과학 중 자귀환 모델을 추천했지만 모델 제작은 가장 유력한 횟수를 결정해야 할 것 같다.적지 정보량 기준(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.pyimport 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:])
고찰이라기보다는 뒤죽박죽이다
비교적 안정적으로 데이터를 얻을 수 있지만 처음에는 몇 가지가 거칠어지기 때문에 먼저 성형하는 것이 좋다.수동
그리고 그것을 사용하면,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:])
고찰이라기보다는 뒤죽박죽이다
Reference
이 문제에 관하여(저비용 측정 심장 박동 간격의 변화 - 계속), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/AraNeco/items/3981a9ad698ceebcfbbf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)