[C#] ECG와 PPG

강서현·2022년 6월 7일
0

C#

목록 보기
5/23
post-thumbnail

ECG는 심전도, PPG는 맥파이다.
두 데이터(.txt)를 이용하여 여러 기능을 가진 차트를 만들어보자.

전역변수

private double[] ecg = new double[100000];
private double[] ppg = new double[100000];
private int ecgCount; //ecg 데이터 개수
private int ppgCount; //ppg 데이터 개수
private Timer t = new Timer();

main

this.WindowState = FormWindowState.Maximized; //창의 속성: 최대화

EcgRead();
PpgRead();

ChartSetting();

t.Interval = 10; //간격 : 0.01초
t.Tick += T_Tick;

Ecg, Ppg 불러오기


//EcgRead()
string fileName = "../../Data/ecg.txt"; //exe파일 기준으로 경로
string[] lines = File.ReadAllLines(fileName);

double min = double.MaxValue;
double max = double.MinValue;

int i = 0;
foreach(var line in lines)
{
	ecg[i]=double.Parse(line) +3;
	if (ecg[i] < min) min = ecg[i];
	if (ecg[i] > max) max = ecg[i];
	i++;
}
ecgCount = i;
string s = string.Format(
"ECG: ecgCount ={0}, min ={1}, max ={2}", ecgCount, min, max);
MessageBox.Show(s);

차트 셋팅하기

private void ChartSetting()
        {
            // chart 영역 설정
            // 커서 사용 가능
            ch.ChartAreas["ChartArea1"].CursorX.IsUserEnabled = true;
            // zoom 범위 선택 가능
            ch.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;

            //chart 영역 설정
            ch.ChartAreas[0].BackColor = Color.Black;
            ch.ChartAreas[0].AxisX.Minimum = 0;
            ch.ChartAreas[0].AxisX.Maximum = ecgCount;
            ch.ChartAreas[0].AxisX.Interval = 50;
            ch.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Gray;
            ch.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;

            ch.ChartAreas[0].AxisY.Minimum = -2;
            ch.ChartAreas[0].AxisY.Maximum = 6;
            ch.ChartAreas[0].AxisY.Interval =0.5;
            ch.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Gray;
            ch.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;

            //Series 2개 새로 만들기
            ch.Series.Clear();
            ch.Series.Add("ECG");
            ch.Series.Add("PPG");

            ch.Series["ECG"].ChartType = SeriesChartType.Line;
            ch.Series[0].Color = Color.Orange;
            ch.Series[0].BorderWidth = 2;
            ch.Series[0].LegendText = "ECG";

            ch.Series["PPG"].ChartType = SeriesChartType.Line;
            ch.Series[1].Color = Color.LightGreen;
            ch.Series[1].BorderWidth = 2;
            ch.Series[1].LegendText = "PPG";

            //데이터를 series에 추가
            foreach(var v in ecg)
            {
                ch.Series["ECG"].Points.Add(v);
            }

            foreach (var w in ppg)
            {
                ch.Series["PPG"].Points.Add(w);
            }

        }

T_Tick 함수

int cursorX = 0; //디스플레이되는 데이터의 시작점
bool scrolling = false; //true일때 스크롤
int datacount = 500; //한화면에 보여주는 데이터 갯수
private int speed = 2;

private void T_Tick(object sender, EventArgs e)
{
     //한 화면에 500개의 데이터를 보여줄 예정
     if (cursorX + datacount < ecgCount)
          ch.ChartAreas[0].AxisX.ScaleView.Zoom(cursorX, cursorX + datacount);
     else
          t.Stop();
          cursorX += speed;
}
profile
Recording...

0개의 댓글