찾다
백엔드 개발파이썬 튜토리얼간단한 DIY HR 모니터 ECG 디스플레이

목표
이 미니 프로젝트/튜토리얼의 목표는 최소한의 구성 요소로 매우 간단한 HR 모니터와 스크롤 ECG 디스플레이를 만드는 것입니다.

요구 사항:

  • 파이썬
  • 오디오 인터페이스
  • 1/4인치 케이블/기타 케이블/악기 케이블(오디오 인터페이스를 통해 컴퓨터에 연결하기만 하면 됨)

빠른 배경화면

심장 근육은 전기 신호를 생성합니다. 이러한 신호 중 일부는 피부 표면에서 감지할 수 있습니다.

표면 전극을 사용하여 이러한 신호를 포착할 수 있습니다. 문제는 이것이 피부에 나타나는 유일한 전기 신호가 아니라는 것입니다. 다행히도 우리가 보고 싶은 대부분의 신호는 1~40Hz ​​정도에 국한되어 있습니다.

프로세스

전극 역할을 할 1/4인치 케이블을 심장 근처 피부에 꽂습니다. 그런 다음 USB 오디오 인터페이스를 사용하여 아날로그 신호를 증폭하고 디지털로 변환합니다. . 마지막으로 Python으로 필터링하고 표시합니다.

단계

1단계: 1/4인치 케이블은 슬리브와 팁의 두 부분으로 구성됩니다. 두 부분 모두 피부에 닿아야 합니다. 손으로 슬리브를 잡고 으깨기만 하면 됩니다. 가슴/상부 흉곽의 왼쪽(일부 케이블에는 더 많은 채널이 있을 수 있습니다. 시작하려면 모두 연결되어 있는지 확인하세요.) 오디오 인터페이스의 게인을 조정합니다(저는 끝까지 올립니다).

Simple DIY HR Monitor ECG Display

2단계: 아래 코드를 실행하세요. input_device_index 라인이 오디오 인터페이스를 가리키는지 확인하세요. 우리가 하고 있는 일은 들어오는 오디오의 청크를 가져와 fft를 사용하여 주파수 영역으로 변환하고 모든 불필요한 주파수를 0으로 설정한 다음 다시 시간 영역으로 변환하는 것입니다. 다음으로 HR을 계산하기 위한 피크를 찾은 다음 스크롤하는 방식으로 그래프를 작성합니다.

import numpy as np 
import pyaudio as pa 
import struct 
import matplotlib.pyplot as plt 
from scipy.signal import decimate, find_peaks

CHUNK = 4410 #.1 second
FORMAT = pa.paInt16
CHANNELS = 1
RATE = 44100 # in Hz
fstep = RATE/CHUNK
p = pa.PyAudio()

values = []
dsf=44 #down sample factor
rds=RATE/dsf #down sampled rate

stream = p.open(
    format = FORMAT,
    channels = CHANNELS,
    rate = RATE,
    input_device_index=3, #adjust based on input
    input=True,
    frames_per_buffer=CHUNK
)

#set up graph
fig,ax = plt.subplots(1)
x = np.arange(0,2*CHUNK,2)
line, = ax.plot(x, np.random.rand(CHUNK))
ax.set_ylim(-100,100) 
ax.set_xlim(0,2500) 
text = ax.text(0.05, 0.95, str(0), transform=ax.transAxes, fontsize=14,
       verticalalignment='top')
fig.show()

def getFiltered(x,hp=1,lp=41): #this sets the unneeded freqs to 0

    fft=np.fft.fft(x)
    hptrim=len(fft)/RATE*hp
    lptrim=len(fft)/RATE*lp
    fft[int(lptrim):-int(lptrim)]=0 
    fft[0:int(hptrim)]=0 
    return np.real(np.fft.ifft(fft))

def getHR(x): 

    pdis = int(0.6 * rds) #minimum distance between peaks. stops rapid triggering. also caps max hr, so adjust
    peaks, _ = find_peaks(x, distance=pdis, height=0.1)
    intervals = np.diff(peaks)/rds # in seconds
    hr = 60 / intervals # in BPM
    return peaks,round(np.mean(hr),0) #peaks,avg hr

while 1:
    data = stream.read(CHUNK)
    dataInt = struct.unpack(str(CHUNK) + 'h', data)

    filtered=getFiltered(dataInt) #filter (working with full chunk)
    dsed=decimate(filtered, 44) #down sample (turns chunk into ds chunk)
    values=np.concatenate((values,dsed)) #puts the chunks into an array
    peaks,hr = getHR(values*-1) # gets the peaks and determins avg HR. 

    text.set_text(str(hr))
    line.set_xdata(np.arange(len(values))) 
    line.set_ydata(values*-10) #the negative is bc it comes in upside down with my set up. the *10 is just for fun
    ax.set_xlim(max(0,len(values)-2500),len(values)) #keep the graph scrolling
    vlines = ax.vlines(peaks,ymin=-100,ymax=100,colors='red', linestyles='dashed') # pop some lines at the peaks 

    fig.canvas.draw()
    fig.canvas.flush_events()
    vlines.remove()

    if len(values)>10000: #keeps the array managably sized, and graph scrolling pretty
        values=values[5000:] #5 seconds @ ~1000 sr.

메모
케이블을 가만히 잡으십시오. 정확한 심박수를 얻으려면 움직임 후 몇 초 정도 기다려야 할 수도 있습니다. Garmin 시계와 비교하여 확인해 보니 지속적으로 비슷한 값이 반환되었습니다.

출력
Simple DIY HR Monitor ECG Display

면책조항
기술적으로 을 회로의 일부로 만들고 있다는 점을 명심하세요. 케이블은 벽면 전원 콘센트에 연결된 컴퓨터에 연결된 인터페이스에 연결되어 있습니다... 이 작업에 따른 책임은 사용자에게 있습니다. 저는 전문가는 아닙니다. 그저 물건을 가지고 노는 것을 좋아하고 공유하고 싶었을 뿐입니다.

다음 단계
이 방법은 ECG 신호의 모든 다른 부분을 명확하게 보는 데는 실제로 잘 작동하지 않습니다. 전극이 너무 긁혀서 최소한의 필터링만 했습니다.

EMG와 같은 작은 신호를 감지하는 데도 효과적이지 않습니다.

여기에서 소프트웨어 측면을 더 자세히 살펴보고 추가 필터를 사용해 보거나 실제 회로를 만들고 실제 전극을 사용할 수 있습니다. 이러한 유형의 전극 봉지는 Amazon에서 꽤 저렴합니다(주의하세요. 접착제가 짜증스럽습니다). 회로의 경우 몇 가지 다른 구성을 시도했습니다. 나에게 가장 간단하고 가장 효과적이라고 생각한 것은 JFET opamp(브레드보드에 함께 배치)를 사용하는 간단한 계측 증폭기 회로였습니다. 전극 3개, 어디에 배치할지 다이어그램을 찾아보세요. ADC용 오디오 인터페이스를 사용하는 경우 여기에 있는 코드는 3전극 브레드보드 설정에서 작동해야 합니다(게인을 조정해야 할 수도 있음)


이 미니 프로젝트의 영감은 기타 케이블을 잡고 DAW의 EQ 플러그인을 가지고 놀면서 나왔습니다.

위 내용은 간단한 DIY HR 모니터 ECG 디스플레이의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
파이썬에서 공장 모드를 구현하는 방법은 무엇입니까?파이썬에서 공장 모드를 구현하는 방법은 무엇입니까?May 16, 2025 pm 12:39 PM

파이썬에서 공장 패턴을 구현하면 통합 인터페이스를 만들어 다양한 유형의 객체를 생성 할 수 있습니다. 특정 단계는 다음과 같습니다. 1. 차량, 자동차, 비행기 및 기차와 같은 기본 클래스 및 여러 상속 클래스를 정의하십시오. 2. 공장 클래스 VehicleFactory를 생성하고 Create_vehicle 메소드를 사용하여 유형 매개 변수에 따라 해당 객체 인스턴스를 반환합니다. 3. my_car = factory.create_vehicle ( "car", "tesla")과 같은 공장 클래스를 통해 객체를 인스턴스화하십시오. 이 패턴은 코드의 확장 성과 유지 가능성을 향상 시키지만 복잡성에주의를 기울여야합니다.

Python Original String Prefix에서 R은 무엇을 의미합니까?Python Original String Prefix에서 R은 무엇을 의미합니까?May 16, 2025 pm 12:36 PM

Python에서 R 또는 R 접두사는 원래 문자열을 정의하고 모든 탈출 된 문자를 무시하고 문자열을 문자 그대로 해석하게하는 데 사용됩니다. 1) 탈출 캐릭터의 오해를 피하기 위해 정규 표현 및 파일 경로를 처리하는 데 적용됩니다. 2) 라인 브레이크와 같은 탈출 된 캐릭터를 보존 해야하는 경우에는 적용되지 않습니다. 예상치 못한 출력을 방지하기 위해 사용할 때는 신중한 점검이 필요합니다.

파이썬에서 __del__ 방법을 사용하여 자원을 정리하는 방법은 무엇입니까?파이썬에서 __del__ 방법을 사용하여 자원을 정리하는 방법은 무엇입니까?May 16, 2025 pm 12:33 PM

파이썬에서 __del__ 방법은 자원을 정리하는 데 사용되는 물체의 소멸자입니다. 1) 불확실한 실행 시간 : 쓰레기 수집 메커니즘에 의존합니다. 2) 순환 참조 : 약점을 사용하여 신속하게 호출을 할 수없고 처리 할 수 ​​없을 수 있습니다. 3) 예외 처리 : __del__에 던져진 예외는 Try-excrect 블록을 사용하여 무시하고 캡처 할 수 있습니다. 4) 자원 관리를위한 모범 사례 : 자원을 관리하기 위해 진술 및 상황 관리자와 함께 사용하는 것이 좋습니다.

Python 목록에서 POP () 함수의 사용 POP 요소 제거 방법에 대한 자세한 설명Python 목록에서 POP () 함수의 사용 POP 요소 제거 방법에 대한 자세한 설명May 16, 2025 pm 12:30 PM

POP () 함수는 파이썬에서 사용하여 목록에서 요소를 제거하고 지정된 위치를 반환합니다. 1) 인덱스가 지정되지 않은 경우 POP ()는 기본적으로 목록의 마지막 요소를 제거하고 반환합니다. 2) 인덱스를 지정할 때 POP ()는 인덱스 위치에서 요소를 제거하고 반환합니다. 3) 색인 오류, 성능 문제, 대체 방법 및 사용 시점에주의를 기울이십시오.

이미지 처리에 Python을 사용하는 방법은 무엇입니까?이미지 처리에 Python을 사용하는 방법은 무엇입니까?May 16, 2025 pm 12:27 PM

Python은 주로 이미지 처리를 위해 두 개의 주요 라이브러리 베개 및 OpenCV를 사용합니다. 베개는 워터 마크 추가와 같은 간단한 이미지 처리에 적합하며 코드는 간단하고 사용하기 쉽습니다. OpenCV는 복잡한 이미지 처리 및 Edge Detection과 같은 컴퓨터 비전에 적합하지만 성능이 뛰어나지 만 메모리 관리에 대한 관심이 필요합니다.

Python에서 주요 구성 요소 분석을 구현하는 방법은 무엇입니까?Python에서 주요 구성 요소 분석을 구현하는 방법은 무엇입니까?May 16, 2025 pm 12:24 PM

Python에서 PCA 구현은 수동으로 코드를 작성하거나 Scikit-Learn 라이브러리를 사용하여 수행 할 수 있습니다. 수동으로 PCA를 구현하려면 다음 단계가 포함됩니다. 1) 데이터 중앙 집중화, 2) 공분산 매트릭스 계산, 3) 고유 값 및 고유 벡터 계산, 4) 주요 구성 요소를 정렬하고 선택하고 5) 데이터를 새 공간에 투사하십시오. 수동 구현은 알고리즘을 깊이 이해하는 데 도움이되지만 Scikit-Learn은보다 편리한 기능을 제공합니다.

파이썬에서 로그를 계산하는 방법은 무엇입니까?파이썬에서 로그를 계산하는 방법은 무엇입니까?May 16, 2025 pm 12:21 PM

파이썬에서 로그를 계산하는 것은 매우 간단하지만 흥미로운 것입니다. 가장 기본적인 질문부터 시작하겠습니다 : 파이썬에서 로그를 계산하는 방법은 무엇입니까? Python에서 로그를 계산하는 기본 방법 Python의 수학 모듈은 로그를 계산하기위한 기능을 제공합니다. 간단한 예를 들어 보자 : importmath# 자연 로그를 계산한다 (기본은 e) x = 10natural_log = math.log (x) print (f "자연 로그 ({x}) = {natural_log}")# base 10 log_base_10 = math.log10 (x) pri가있는 로그를 계산합니다.

파이썬에서 선형 회귀를 구현하는 방법은 무엇입니까?파이썬에서 선형 회귀를 구현하는 방법은 무엇입니까?May 16, 2025 pm 12:18 PM

파이썬에서 선형 회귀를 구현하기 위해 여러 관점에서 시작할 수 있습니다. 이것은 단순한 기능 호출 일뿐 만 아니라 통계, 수학적 최적화 및 기계 학습의 포괄적 인 적용을 포함합니다. 이 과정에 깊이있게 다이빙합시다. 파이썬에서 선형 회귀를 구현하는 가장 일반적인 방법은 쉽고 효율적인 도구를 제공하는 Scikit-Learn 라이브러리를 사용하는 것입니다. 그러나 선형 회귀의 원리와 구현 세부 사항에 대해 더 깊이 이해하려면 선형 회귀 알고리즘을 처음부터 작성할 수도 있습니다. Scikit-Learn의 선형 회귀 구현은 Scikit-Learn을 사용하여 선형 회귀의 구현을 캡슐화하여 쉽게 모델링하고 예측할 수 있습니다. 다음은 SC를 사용합니다

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경