BASIC4MCU | 질문게시판 | 답변 : 심박센서 bpm측정 관련 문의드립니다.
페이지 정보
작성자 master 작성일2018-01-18 17:29 조회74,535회 댓글7건본문
소스코드에서 기준선이 1/2이므로 적색선 정도의 위치가 되겠죠
동그라미 친 부분과 거리가 별로 떨어져 있지 않으므로 오동작 위험이 높습니다.
기준선을 더 높이세요
신호의 피크가 1000 근처까지 매번 올라가므로 800으로 고정해도 상관없겠습니다.
(매 측정마다 위 사진처럼 양호하게 측정 된다면)
댓글 7
조회수 74,535master님의 댓글
master 작성일
사진처럼 깔끔한 파형이 나온다면 (매 파형 피크 1000 유지)
min,max를 체크 할 필요도 없고
전에 적어드린 것처럼 기준값 800으로 고정해서 처리하면 됩니다.
그 때는 기준값을 두가지 적었었죠?
300, 250
이 값을 820 780 이런식으로 바꿔도 됩니다.
10회 배열에 저장해서 평균을 내는 것은 10회 측정한 값으로 1분을 대신 하겠다는 의도입니다.
심박이 70~80 정도 뛰니 대략 8초 측정해서 값을 표시 하겠다는 것이죠
배열에 저장하지말고 60초동안 측정해서 출력하는 것이 더 정확하고
마지막 심박수의 오차를 처리 한다면 아주 훌륭한 측정방법이 되겠습니다.
묵묵님의 댓글
묵묵
셈서 adc값이 매번 저렇게 나오지 않는다면 원래의 알고리즘을 계속 보안 해야할가요??
센서에 손을 댈 때마다 파형이 달라집니다.
master님의 댓글
master
측정 방법은 아주 중요한 요소입니다.
제아무리 비싼 계측기라도 아무렇게나 측정해도 정밀한 측정이 될 수는 없겠죠
//
현재 소스를 조금 수정한다면
위 답변에서 언급한대로 1/2 지점이 아닌 3/4 지점으로 바꿔보세요
master님의 댓글
master
Pulse=0; amp=max-min; thresh=amp/2+min; max=thresh; min=thresh; // 변수 처리
위 코드만 수정하면 되겠죠
thresh=amp/2+min; 이 문장만 고치면 됩니다.
thresh=amp*1/2+min; 조금 변형하면 이 식이 되는데
thresh=amp*3/4+min; //3/4은 이 식이죠
이 정도는 알아서 할 수 있을 것으로 생각되지만
이렇게 쉬운 것도 못하는 초보자도 있을테니 적어드립니다.
묵묵님의 댓글
묵묵
답변 감사합니다. max,min,tresh초기값을 바꾸고 thresh=amp*3/4+min; 로 고치고 다른 방법으로 해봤는데도 잘안되네요. bpm값이 들숭날숭 하네요... 제가 소스를 다시 처음부터 쭉보다가
if(secondBeat)
{
secondBeat=0;
for(int i=0;i<=9;i++)
{
rate[i]=IBI;
} // sum 계산을 위해서 첫번째 주기로 채워둠
}
if(firstBeat)
{
firstBeat=0;
secondBeat=1;
sei();
return;
} // 첫번째 측정은 오차가 많으므로 버림
이 부분에서 if문안에 firstBeat, secondBeat 처럼 문자로 조건을 주면 어떻게 동작하는지를 잘 모르겠습니다.
master님의 댓글
master
디버깅은 직접 하셔야합니다.
max,min,amp,thresh,BPM 이런 값들을 시리얼로 출력하면 문제점을 파악하기 쉽겠죠
묵묵님의 댓글
묵묵
감사합니다. 말씀해주신 방법으로 문제점을 찾아보도록하겠습니다.
하나더 궁금한게 있는데
for(int i=0;i<=8;i++)
{
rate[i]=rate[i+1]; // 9개의 값을 좌측으로 쉬프트 시키고
sum_ms+=rate[i];
}
rate[9]=IBI; // 마지막 배열에는 방금 측정한 주기를 저장
sum_ms+=rate[9];
sum_ms/=10; // 평균을 구함
BPM=60000/sum_ms; // 10개의 평균값으로 BPM을 계산
// QS=1; // BPM을 구했음을 알려주기 위한 변수
}
에서 BPM을 (60000/IBI 값 1 0개의 평균) 이렇게 계산하는데 왜 60000을 나누는지 잘 이해가 안갑니다. 만약 IBI의 값이 평균 0.7s라하면 평균 370정도 되는데 나누면 bpm이 160정도가 나오는거 같다는 생각이 드는데 제가 이해를 잘못하고 있는건가요??
//////////////////////////////////////////
말씀해주신 방법으로 확인을 해보니 우선 소스에 문제가 있다는걸 확실하게 알 수 있었습니다.
thresh, max, min값이 측정이 잘될때도 있지만 3개 혹은 2개의 값이 겹칠때가 많습니다. 어떻게 해야할지 고민을 많이 해봐야할거 같습니다.