Fork me on GitHub

一 概念
EDF,全称是 European Data Format,是一种标准文件格式,用于交换和存储医疗时间序列。其能够存储多通道的数据,允许每个信号拥有不同的采样频率。在内部,它包括标题和一个或多个数据记录。标题包含一些一般信息(患者标识,开始时间......等等)以及每个信号的技术规格(校准,采样率,过滤,......等等),编码为 ASCII 字符。数据记录包含小端 16 位整数的样本。 所以,EDF 也是多导睡眠图(PSG)录音的流行格式。
二 源码解析
1 设置格式和通道个数
  hdl = edfopen_file_writeonly("testa.edf", EDFLIB_FILETYPE_BDFPLUS, chns);

2. 设置每个采样点的个数

  for(i=0; i<chns; i++)
  {
    if(edf_set_samplefrequency(hdl, i, SMP_FREQ))
    {
      printf("error: edf_set_samplefrequency()\n");

      return(1);
    }
  }

3. 设置最大的数字量程

  for(i=0; i<chns; i++)
  {
    if(edf_set_digital_minimum(hdl, i, -8388608))
    {
      printf("error: edf_set_digital_minimum()\n");

      return(1);
    }
  }

4.数据转换格式

                                                  for(uint32_t iss = 0; iss < FRAME_OPUS; iss += 24)
                                                  {
                                                          ads1299_data_process(buf3+iss,24);
                                                          fprintf(file_out,"%d,%d,%d,%d,%d,%d,%d,%d,%d\n",tick_num,ads1299_data[0],ads1299_data[1],ads1299_data[2],ads1299_data[3],ads1299_data[4],ads1299_data[5],ads1299_data[6],ads1299_data[7]);
                                                          printf("%f\n",(double)ads1299_data[0]);
                                                          buf[send_cnt++] = (double)ads1299_data[0];
                                                          amount_num++;
                                                  }

                                                  if(edfwrite_physical_samples(hdl, buf))
                                                  {
                                                    printf("error: edfwrite_physical_samples()\n");

                                                    return(1);
                                                  }

 

posted on 2024-09-12 15:54  虚生  阅读(33)  评论(0编辑  收藏  举报