Browse Source

remove some code

hardware_test_b
zhaohe 11 months ago
parent
commit
5b09a87c4b
  1. BIN
      doc/SSD1312_Datasheet (1).pdf
  2. BIN
      doc/TXW64128-41-TSWG13P096G-A-VER1.0.pdf
  3. BIN
      doc/ads1293.pdf
  4. BIN
      doc/m24m02-dr.pdf
  5. BIN
      screen_res/font/PC2LCD2021.exe
  6. 3
      screen_res/font/data/config/FontsCfg.table
  7. 17
      screen_res/font/data/config/array2ImgFrom.table
  8. 6
      screen_res/font/data/config/arrayCfg.table
  9. 13
      screen_res/font/data/config/arrayCfgFrom.table
  10. 4
      screen_res/font/data/config/bottomFrom.table
  11. BIN
      screen_res/font/字库生成配置.png
  12. BIN
      screen_res/font/字库生成配置2.png
  13. BIN
      screen_res/logo/Image2Lcd/Img2Lcd.exe
  14. BIN
      screen_res/logo/Image2Lcd/Img2Lcd_chs.chm
  15. BIN
      screen_res/logo/Image2Lcd/Img2Lcd_cht.chm
  16. BIN
      screen_res/logo/Image2Lcd/emenu.dll
  17. BIN
      screen_res/logo/Image2Lcd/sss.dll
  18. BIN
      screen_res/logo/Image2Lcd/unins000.dat
  19. BIN
      screen_res/logo/Image2Lcd/unins000.exe
  20. BIN
      screen_res/logo/img2lcd_cfg.png
  21. BIN
      screen_res/logo/logo_mono.bmp
  22. 66
      screen_res/logo_mono.c
  23. 88
      test/MedianFilter.c
  24. 38
      test/MedianFilter.h
  25. 1
      test/README.md
  26. BIN
      test/a.exe
  27. 28
      test/test.c
  28. 129
      test/test.py
  29. 4
      tools/build.bat
  30. BIN
      tools/nrfutil.exe
  31. 121
      tools/one_lead_realtime_report_parser.cpp
  32. BIN
      tools/one_lead_realtime_report_parser.exe
  33. 102
      tools/one_lead_upload_packet_parser.cpp
  34. BIN
      tools/one_lead_upload_packet_parser.exe
  35. 54
      tools/sample_bin_parse.cpp
  36. BIN
      tools/sample_bin_parse.exe
  37. 54
      tools/text2bin.cpp
  38. BIN
      tools/text2bin.exe

BIN
doc/SSD1312_Datasheet (1).pdf

BIN
doc/TXW64128-41-TSWG13P096G-A-VER1.0.pdf

BIN
doc/ads1293.pdf

BIN
doc/m24m02-dr.pdf

BIN
screen_res/font/PC2LCD2021.exe

3
screen_res/font/data/config/FontsCfg.table

@ -1,3 +0,0 @@
{
cfg={cutRight=0;cutDown=0;cutLeft=0;userImgPixClrN=4282994728;userImgPixClrP=4288471279;userImgMaxNum=223.22222222222;isRotate180FlipX=false;imgW=24;userImgPixSize="5";imgH=24;userImgDir="./data/fontimg/";offsetH="0";cwRotate90=0;font="仿宋";fontStyple=1;cutUp=0;fontH=24;offsetV="0";isRotate180FlipY=false;fontW=24}
}

17
screen_res/font/data/config/array2ImgFrom.table

@ -1,17 +0,0 @@
{
edtOffset="0";
cmbbxMode=1;
rdScanModeVH=1;
rdComVcc=0;
edtImgW="24";
edtImgH="24";
edtArray=' {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x1C, 0x00, 0x00, 0x00,\r\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x82, 0xFF, 0x21, 0x21, 0x11, 0xF9, 0x01, 0x60, 0x1C,\r\n 0x63, 0x82, 0x62, 0x1F, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x0C, 0x03, 0x10, 0x10, 0x70,\r\n 0x4F, 0x40, 0x20, 0x10, 0x08, 0x06, 0x01, 0x06, 0x08, 0x70, 0x60, 0x40, 0x40, 0x00, 0x00}';
rdScanModeV=0;
rdComGnd=1;
rdScanModeH=0;
afterLoad=null;
beforeSave=null;
rdByteLsb=1;
rdByteMsb=0;
rdScanModeHV=0
}

6
screen_res/font/data/config/arrayCfg.table

@ -1,6 +0,0 @@
{
isByteMsb=0;
scanMode="VH";
txtLineCharMaxNum=20;
isCommonGnd=1
}

13
screen_res/font/data/config/arrayCfgFrom.table

@ -1,13 +0,0 @@
{
rdScanModeHV=0;
afterLoad=null;
rdScanModeVH=1;
rdByteLsb=1;
rdComVcc=0;
beforeSave=null;
rdScanModeH=0;
edtTxtRowByteNum="20";
rdByteMsb=0;
rdScanModeV=0;
rdComGnd=1
}

4
screen_res/font/data/config/bottomFrom.table

@ -1,4 +0,0 @@
{
afterLoad=null;
beforeSave=null
}

BIN
screen_res/font/字库生成配置.png

Before

Width: 1532  |  Height: 697  |  Size: 456 KiB

BIN
screen_res/font/字库生成配置2.png

Before

Width: 1526  |  Height: 751  |  Size: 73 KiB

BIN
screen_res/logo/Image2Lcd/Img2Lcd.exe

BIN
screen_res/logo/Image2Lcd/Img2Lcd_chs.chm

BIN
screen_res/logo/Image2Lcd/Img2Lcd_cht.chm

BIN
screen_res/logo/Image2Lcd/emenu.dll

BIN
screen_res/logo/Image2Lcd/sss.dll

BIN
screen_res/logo/Image2Lcd/unins000.dat

BIN
screen_res/logo/Image2Lcd/unins000.exe

BIN
screen_res/logo/img2lcd_cfg.png

Before

Width: 716  |  Height: 524  |  Size: 23 KiB

BIN
screen_res/logo/logo_mono.bmp

66
screen_res/logo_mono.c

@ -1,66 +0,0 @@
const unsigned char gImage_logo_mono[1024] = { /* 0X22,0X01,0X80,0X00,0X40,0X00, */
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XE0,
0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XE0,0XE0,0XC0,0XC0,0X80,0X00,0X00,0X00,0X70,0XF8,
0XF0,0XF0,0XE0,0XC0,0XC0,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X80,0XC0,0X00,0X00,0X00,0X00,0XC0,0XC0,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0XC0,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XC0,0XC0,0X00,0X00,0X00,0X80,0X80,0X80,0X80,0X80,0X80,0X80,
0X80,0X00,0X00,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X00,0XC0,0XC0,0X00,0X00,0X00,
0XC0,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7E,0XFF,0XFF,0XFF,
0XC3,0X81,0X00,0X30,0X78,0XF9,0XF1,0XF3,0XE7,0XC7,0XCF,0X8F,0X9F,0X3E,0X3C,0X3C,
0X01,0X01,0X03,0XCF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XE0,0XFC,
0XFF,0XFF,0X07,0XB7,0XB7,0XB7,0XB7,0XB7,0XB7,0XB7,0XB7,0XB7,0XB7,0X97,0X00,0X00,
0XFC,0XFC,0XFC,0XFE,0XFF,0XFE,0X01,0X1F,0XFF,0XF0,0X00,0X00,0X3E,0XFE,0XF0,0X00,
0X00,0X0C,0X9C,0XFC,0XFF,0XFF,0XEC,0X8C,0XFF,0XFF,0XFF,0X31,0X31,0X31,0X73,0XFF,
0XFF,0X00,0X01,0X01,0XFF,0XFF,0X39,0XFF,0XFF,0X01,0X86,0X8F,0X8F,0XFF,0XFE,0X8E,
0X8F,0X8F,0X8E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X07,
0X0F,0X0F,0X1F,0X3E,0X3E,0X7C,0XF8,0XF9,0XF3,0XE3,0XE7,0XCF,0X8F,0X9F,0X1E,0X1E,
0X1E,0X1E,0X1F,0X0F,0X0F,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X01,0XFF,
0XFF,0XFF,0X00,0XFD,0XFD,0XCD,0X8D,0X8D,0X8D,0X8D,0X8D,0XFD,0XFD,0XF8,0X00,0X30,
0X3F,0X1F,0X01,0X3F,0XFF,0XFF,0XC0,0XC0,0XC3,0XC3,0XE0,0XFC,0X7C,0X1F,0X3F,0X3E,
0X00,0X0E,0X0F,0X07,0XFF,0XFF,0X01,0X01,0X7F,0XFF,0XFF,0XC6,0XC6,0XC6,0XC6,0XFF,
0XFF,0X00,0X60,0X60,0X7F,0X7F,0X33,0XFF,0XFF,0X98,0XC1,0XE1,0XF9,0X3F,0X0F,0X1F,
0X7D,0XF1,0XC1,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X03,0X07,0X07,0X0F,0X0F,0X06,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0X01,0X00,0X00,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X01,0X01,0X01,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X01,0X01,0X00,0X00,0X00,0X00,0X01,0X01,0X01,0X01,0X01,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X01,0X00,0X01,0X01,0X00,0X00,0X00,0X00,
0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
};

88
test/MedianFilter.c

@ -1,88 +0,0 @@
/*
* MedianFilter.c
*
* Created on: May 19, 2018
* Author: alexandru.bogdan
*/
#include "MedianFilter.h"
int MEDIANFILTER_Init(sMedianFilter_t *medianFilter)
{
if(medianFilter && medianFilter->medianBuffer &&
(medianFilter->numNodes % 2) && (medianFilter->numNodes > 1))
{
//initialize buffer nodes
for(unsigned int i = 0; i < medianFilter->numNodes; i++)
{
medianFilter->medianBuffer[i].value = 0;
medianFilter->medianBuffer[i].nextAge = &medianFilter->medianBuffer[(i + 1) % medianFilter->numNodes];
medianFilter->medianBuffer[i].nextValue = &medianFilter->medianBuffer[(i + 1) % medianFilter->numNodes];
medianFilter->medianBuffer[(i + 1) % medianFilter->numNodes].prevValue = &medianFilter->medianBuffer[i];
}
//initialize heads
medianFilter->ageHead = medianFilter->medianBuffer;
medianFilter->valueHead = medianFilter->medianBuffer;
medianFilter->medianHead = &medianFilter->medianBuffer[medianFilter->numNodes / 2];
return 0;
}
return -1;
}
int MEDIANFILTER_Insert(sMedianFilter_t *medianFilter, int sample)
{
unsigned int i;
sMedianNode_t *newNode, *it;
if(medianFilter->ageHead == medianFilter->valueHead)
{ //if oldest node is also the smallest node, increment value head
medianFilter->valueHead = medianFilter->valueHead->nextValue;
}
if((medianFilter->ageHead == medianFilter->medianHead) ||
(medianFilter->ageHead->value > medianFilter->medianHead->value))
{ //prepare for median correction
medianFilter->medianHead = medianFilter->medianHead->prevValue;
}
//replace age head with new sample
newNode = medianFilter->ageHead;
newNode->value = sample;
//remove age head from list
medianFilter->ageHead->nextValue->prevValue = medianFilter->ageHead->prevValue;
medianFilter->ageHead->prevValue->nextValue = medianFilter->ageHead->nextValue;
//increment age head
medianFilter->ageHead = medianFilter->ageHead->nextAge;
//find new node position
it = medianFilter->valueHead; //set iterator as value head
for(i = 0; i < medianFilter->numNodes - 1; i++)
{
if(sample < it->value)
{
if(i == 0)
{ //replace value head if new node is the smallest
medianFilter->valueHead = newNode;
}
break;
}
it = it->nextValue;
}
//insert new node in list
it->prevValue->nextValue = newNode;
newNode->prevValue = it->prevValue;
it->prevValue = newNode;
newNode->nextValue = it;
//adjust median node
if(i >= (medianFilter->numNodes / 2))
{
medianFilter->medianHead = medianFilter->medianHead->nextValue;
}
return medianFilter->medianHead->value;
}

38
test/MedianFilter.h

@ -1,38 +0,0 @@
/*
* MedianFilter.h
*
* Created on: May 19, 2018
* Author: alexandru.bogdan
*/
#ifndef MEDIANFILTER_H_
#define MEDIANFILTER_H_
#ifdef __cplusplus
extern "C" {
#endif
typedef struct sMedianNode
{
int value; //sample value
struct sMedianNode *nextAge; //pointer to next oldest value
struct sMedianNode *nextValue; //pointer to next smallest value
struct sMedianNode *prevValue; //pointer to previous smallest value
}sMedianNode_t;
typedef struct
{
unsigned int numNodes; //median node buffer length
sMedianNode_t *medianBuffer; //median node buffer
sMedianNode_t *ageHead; //pointer to oldest value
sMedianNode_t *valueHead; //pointer to smallest value
sMedianNode_t *medianHead; //pointer to median value
}sMedianFilter_t;
int MEDIANFILTER_Init(sMedianFilter_t *medianFilter);
int MEDIANFILTER_Insert(sMedianFilter_t *medianFilter, int sample);
#ifdef __cplusplus
}
#endif
#endif

1
test/README.md

@ -1 +0,0 @@
pip install wfdb

BIN
test/a.exe

28
test/test.c

@ -1,28 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include "MedianFilter.h"
#define NUM_ELEMENTS 201
static sMedianFilter_t medianFilter;
static sMedianNode_t medianBuffer[NUM_ELEMENTS];
int main() {
medianFilter.numNodes = NUM_ELEMENTS;
medianFilter.medianBuffer = medianBuffer;
MEDIANFILTER_Init(&medianFilter);
int newValue = 1;
while (1) {
newValue++;
int medianValue = MEDIANFILTER_Insert(&medianFilter, newValue);
printf("New value: %d \tMedian value: %d\r\n", newValue, medianValue);
Sleep(1);
}
return 0;
}

129
test/test.py

@ -1,129 +0,0 @@
import csv
from datetime import datetime
import wfdb
import matplotlib.pyplot as plt
import numpy as np
from scipy.signal import medfilt
import pywt
fliter = int(0.8*500)
Initial_intercept_point = 0
Final_intercept_point = 2000
Give_up_size = int(fliter/2)
# Get dates, high, and low temperatures from file.
filename = 'sunyan.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
leaddatas= []
for row in reader:
try:
leaddata = int(row[0])
except ValueError:
print(leaddata, 'missing data')
else:
leaddatas.append(leaddata)
#读取文件结束
#bandpass filter
from scipy import signal
fs = 500 # 采样率为500 Hz
# 设计低通滤波器
cutoff_freq = 40 # 截止频率
order = 1 # 滤波器阶数
nyquist = 0.5 * fs
cutoff = cutoff_freq / nyquist
b, a = signal.butter(order, cutoff, btype='low')
# 应用低通滤波器
lowpass_ecg_leaddatas = signal.filtfilt(b, a, leaddatas)
# 设计高通滤波器
cutoff_freq_high = 0.5 # 截止频率
order_high = 1 # 滤波器阶数
#nyquist = 0.5 * fs
cutoff_high = cutoff_freq_high / nyquist
b, a = signal.butter(order_high, cutoff_high, btype='high')
# 应用高通滤波器
filtered_ecg_signal_leaddatas = signal.filtfilt(b, a, lowpass_ecg_leaddatas)
'''
# 使用小波变换,效果不好
wavelet = 'sym5' # 选择小波类型,sym5是一种对称小波,常用于ECG信号
levels = 4 # 分解级数
coeffs = pywt.wavedec(filtered_ecg_signal_leaddatas, wavelet, level=levels)
# 对小波系数进行阈值处理,这有助于去噪
threshold = 0.2 * np.max(coeffs[-1])
coeffs = [pywt.threshold(c, threshold, mode='soft') for c in coeffs]
reconstructed_signal = pywt.waverec(coeffs, wavelet)
'''
'''
# 小波分解
wavelet = 'db4'
coeffs = pywt.wavedec(filtered_ecg_signal_leaddatas, wavelet, level=4)
# 对高频系数进行阈值处理(软阈值)
sigma = np.median(np.abs(coeffs[-1])) / 0.6745 # 估计噪声标准差
threshold = sigma * np.sqrt(2 * np.log(len(filtered_ecg_signal_leaddatas)))
# 对各层系数进行阈值处理
denoised_coeffs = [pywt.threshold(c, threshold, mode='soft') for c in coeffs]
# 重建信号
denoised_signal = pywt.waverec(denoised_coeffs, wavelet)
'''
# Define the window size for moving average (adjust as needed)
window_size = 2
# Perform moving average filtering
moving_avg_ecg1 = np.convolve(lowpass_ecg_leaddatas, np.ones(window_size)/window_size, mode='valid')
#record = wfdb.rdrecord('mit-bih-arrhythmia-database-1.0.0/100', sampfrom=0, sampto=25000, physical=True, channels=[0, ])
#Original_ECG = record.p_signal[Initial_intercept_point:Final_intercept_point].flatten()
Original_ECG = moving_avg_ecg1
ECG_baseline = medfilt(Original_ECG, fliter+1)
Totality_Bias = np.sum(ECG_baseline[Give_up_size:-Give_up_size])/(Final_intercept_point-Initial_intercept_point-fliter)
Filtered_ECG = Original_ECG - ECG_baseline
Final_Filtered_ECG = Filtered_ECG[Give_up_size:-Give_up_size]-Totality_Bias
plt.figure(figsize=(100, 8))
plt.subplot(2, 1, 1)
plt.ylabel("Original ECG signal")
plt.plot(leaddatas)#输出原图像leaddatas
plt.subplot(2, 1, 2)
plt.ylabel("Filtered ECG signal")
plt.plot(Original_ECG)#基线滤波结果
plt.show()
#心率计算
import biosppy.signals.ecg as ecg
rpeaks = ecg.hamilton_segmenter(signal=Final_Filtered_ECG, sampling_rate=500)
def calculate_heart_rate(r_peaks, sampling_rate):
# 计算相邻R波之间的时间间隔(单位:秒)
rr_intervals = np.diff(r_peaks) / sampling_rate
# 将时间间隔转换为每分钟的心跳数(bpm)
heart_rates = 60 / rr_intervals
return heart_rates
# 计算心率
heart_rates = calculate_heart_rate(rpeaks, sampling_rate=500)
print("Heart rates (bpm):", heart_rates)

4
tools/build.bat

@ -1,4 +0,0 @@
g++ -static -static-libgcc -static-libstdc++ -lwsock32 -lstdc++ .\sample_bin_parse.cpp -o sample_bin_parse.exe
g++ -static -static-libgcc -static-libstdc++ -lwsock32 -lstdc++ text2bin.cpp -o text2bin.exe
g++ -static -static-libgcc -static-libstdc++ -lwsock32 -lstdc++ one_lead_upload_packet_parser.cpp -o one_lead_upload_packet_parser.exe
g++ -static -static-libgcc -static-libstdc++ -lwsock32 -lstdc++ one_lead_realtime_report_parser.cpp -o one_lead_realtime_report_parser.exe

BIN
tools/nrfutil.exe

121
tools/one_lead_realtime_report_parser.cpp

@ -1,121 +0,0 @@
#include <fstream>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <thread>
#include <vector>
//
#include <winsock2.h>
//
#include <Windows.h>
//
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 8988
// #define EACH_FRAME_SIZE 180
// #define DATA_NUM (EACH_FRAME_SIZE / 3)
// 5A A5
// 03 00 65
// 05 00 00 00
// 77 07
// 80 07
// 7F 07
// 88 07
// 8D 07
// 5B B5
#pragma pack(1)
typedef struct parse_packet_to_csv {
uint8_t h0;
uint8_t h1;
uint8_t header[3];
uint8_t index[4];
uint16_t data[5];
uint8_t e0;
uint8_t e1;
};
#pragma pack()
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
uint16_t chdatacache[5];
void parse_chdatacache(parse_packet_to_csv *packet) {
chdatacache[0] = packet->data[0];
chdatacache[1] = packet->data[1];
chdatacache[2] = packet->data[2];
chdatacache[3] = packet->data[3];
chdatacache[4] = packet->data[4];
}
int main(int argc, char *argv[]) {
/**
* @brief
* raw.txt
* raw.txt全部内容
*
* 16
* raw.bin
*/
std::ifstream ifs("Data.txt");
std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
ifs.close();
std::string str2;
for (auto &c : str) {
if (c == ' ' || c == '\n' || c == '\r') {
continue;
}
str2.push_back(c);
}
std::ofstream ofs("Data.bin", std::ios::binary);
for (size_t i = 0; i < str2.size(); i += 2) {
std::string str3 = str2.substr(i, 2);
char c = (char)std::stoi(str3, nullptr, 16);
ofs.write(&c, 1);
}
ofs.close();
/**
* @brief
*
*/
{
std::ifstream ifs("Data.bin", std::ios::binary);
std::vector<char> buffer((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
ifs.close();
printf("buffer.size() = %d\n", buffer.size());
std::ofstream ofs("Data.csv");
for (size_t i = 0; i < buffer.size();) {
parse_packet_to_csv *packet = (parse_packet_to_csv *)&buffer[i];
if (packet->h0 == 0x5A && packet->h1 == 0xA5 && packet->e0 == 0x5B && packet->e1 == 0xB5) {
parse_chdatacache(packet);
for (size_t i = 0; i < ARRAY_SIZE(chdatacache); i += 1) {
ofs << chdatacache[i] << "\n";
}
i += sizeof(parse_packet_to_csv);
} else {
i++;
}
}
}
printf("parse over\n");
while (true) {
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}

BIN
tools/one_lead_realtime_report_parser.exe

102
tools/one_lead_upload_packet_parser.cpp

@ -1,102 +0,0 @@
#include <fstream>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <thread>
#include <vector>
//
#include <winsock2.h>
//
#include <Windows.h>
//
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 8988
// #define EACH_FRAME_SIZE 180
// #define DATA_NUM (EACH_FRAME_SIZE / 3)
typedef struct parse_packet_to_csv {
uint8_t h0;
uint8_t h1;
uint8_t data[128];
uint8_t e0;
uint8_t e1;
};
uint32_t chdatacache[64];
void parse_chdatacache(parse_packet_to_csv *packet) {
for (size_t i = 0; i < 64; i++) {
chdatacache[i] = (packet->data[i * 2]) | (packet->data[i * 2 + 1] << 8);
}
}
int main(int argc, char *argv[]) {
/**
* @brief
* raw.txt
* raw.txt全部内容
*
* 16
* raw.bin
*/
std::ifstream ifs("Data.txt");
std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
ifs.close();
std::string str2;
for (auto &c : str) {
if (c == ' ' || c == '\n' || c == '\r') {
continue;
}
str2.push_back(c);
}
std::ofstream ofs("Data.bin", std::ios::binary);
for (size_t i = 0; i < str2.size(); i += 2) {
std::string str3 = str2.substr(i, 2);
char c = (char)std::stoi(str3, nullptr, 16);
ofs.write(&c, 1);
}
ofs.close();
/**
* @brief
*
*/
{
std::ifstream ifs("Data.bin", std::ios::binary);
std::vector<char> buffer((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
ifs.close();
printf("buffer.size() = %d\n", buffer.size());
std::ofstream ofs("Data.csv");
for (size_t i = 0; i < buffer.size();) {
parse_packet_to_csv *packet = (parse_packet_to_csv *)&buffer[i];
parse_chdatacache(packet);
if (packet->h0 == 0x4A && packet->h1 == 0xA4 && packet->e0 == 0x4B && packet->e1 == 0xB4) {
for (size_t i = 0; i < 64; i += 1) {
ofs << chdatacache[i] << "\n";
}
i += sizeof(parse_packet_to_csv);
} else {
i++;
}
}
}
printf("parse over\n");
while (true) {
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}

BIN
tools/one_lead_upload_packet_parser.exe

54
tools/sample_bin_parse.cpp

@ -1,54 +0,0 @@
#include <fstream>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <thread>
#include <vector>
//
#include <winsock2.h>
//
#include <Windows.h>
//
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 8988
int main(int argc, char *argv[]) {
// 打开 0.bin
// 读取 0.bin 到数组中
// 每次读9byte
// 3byte 3byte 3byte
// 存放到0.csv中
std::ifstream ifs("0.bin", std::ios::binary);
if (!ifs) {
std::cerr << "open 0.bin failed" << std::endl;
return -1;
}
std::ofstream ofs("0.csv", std::ios::binary | std::ios::trunc);
if (!ofs) {
std::cerr << "open 0.csv failed" << std::endl;
return -1;
}
char buf[9];
while (ifs.read(buf, 9)) {
unsigned int a = 0;
unsigned int b = 0;
unsigned int c = 0;
a = (unsigned char)buf[0] | (unsigned char)buf[1] << 8 | (unsigned char)buf[2] << 16;
b = (unsigned char)buf[3] | (unsigned char)buf[4] << 8 | (unsigned char)buf[5] << 16;
c = (unsigned char)buf[6] | (unsigned char)buf[7] << 8 | (unsigned char)buf[8] << 16;
ofs << a << "," << b << "," << c << std::endl;
}
return 0;
}

BIN
tools/sample_bin_parse.exe

54
tools/text2bin.cpp

@ -1,54 +0,0 @@
#include <fstream>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <thread>
#include <vector>
//
#include <winsock2.h>
//
#include <Windows.h>
//
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 8988
int main(int argc, char *argv[]) {
/**
* @brief
* raw.txt
* raw.txt全部内容
*
* 16
* raw.bin
*/
std::ifstream ifs("raw.txt");
std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
ifs.close();
std::string str2;
for (auto &c : str) {
if (c == ' ' || c == '\n' || c == '\r') {
continue;
}
str2.push_back(c);
}
std::ofstream ofs("raw.bin", std::ios::binary);
for (size_t i = 0; i < str2.size(); i += 2) {
std::string str3 = str2.substr(i, 2);
char c = (char)std::stoi(str3, nullptr, 16);
ofs.write(&c, 1);
}
ofs.close();
return 0;
}

BIN
tools/text2bin.exe

Loading…
Cancel
Save