使用VC6,将串口接收到的指脉数据(每个数据为0~255的数值,100HZ),使用差分阈值法找到波峰,计算心率。
1、使用五点差分,公式是  k=∑_(i=1)^4 [x(n+i)-x(n-i)],n=2~102但是我不知道用VC怎么实现这个公式??
2、每一百个为一组数据,对其差分,然后设定阈值,找到峰值N1,在继续下一组数据找到峰值N2,那怎么能计算出N1到N2中间有几个点??
要用VC做毕设,所以寻求各位大神的帮助啊~~

解决方案 »

  1.   

    仁兄,我用数组存从txt文件中读取的100个整数,然后想实现上面的公式,我可以找到i-n项的值,但我找不到i+n项的值,是不是说数组不会读取到后一项,或者后几项的值啊?谢谢~~
      

  2.   

    是你这个意思,其实想法我懂,但是具体编程的时候怎么实现啊?怎么算先把数据读进来在计算?我把代码拿来你帮我看一下。
    int  a[100];
    int  b[100];
    int m;
    int i;
    // int j;
    CString  str;
    int max=0,maxid=0;
    for(i=4;i<95;i++)//找两个最大值间数据点个数,将99改为49,做两次循环,选取两个最大值,将两次循环比较后的两个最大值间点数计算出。
    {
    a[i]=atoi(pBuf);//char *pBuf用于打开文件时候,读取txt文件中的数据
    pBuf=pBuf+4;
    for(n=1;n<5;n++)
    {
    b[i]=a[i+n]-a[i-n];//断点调试到这里,就找不到a[i+n]项的值
    if(b[i]>max)
    {
    max=b[i];
    maxid=i;
    str.Format("%d和%d",max,maxid);
    }
    m_strMax.SetWindowText(str);
    }

    }
    }
      

  3.   

    当然没有i+n的数据,你还没读呢。两个循环,第一个循环读数据填充a[100],第二个循环处理数据。不过你读数据的方法好像也不对,难道都是4个字节一个数字?那是二进制啊。
      

  4.   

    还只能是没全部读取进来,你说的4个字节是这行pBuf=pBuf+4;吧?这个我也不知道为什么会这样,但是这样读到数据才是对的,可是我后来发现,这样也不是很对,a[4],a[8],a[10]的数据又不对,这是怎么回事啊?
      

  5.   

    我是先把数据存起来,存成txt的,再打开,对这些数据计算,数据是这样的98 98 98 98 98 99 99 99 99 100 100 100 100 100 100 100 100 101 102 102 102 103 ,0~255递增或递减,有一定周期,我现在就暂时这样做先把算法完成,然后最终我要实现的是,一个后台软件,可以实时接收数据,保存数据,计算数据。不用操作者点击什么按钮,就可以。
      

  6.   

    我不懂你说的不能按照字节读是什么意思,我是定义了一个char *pBuf,来读txt中的数据,其实这也是网上找的程序,然后在把pBuf转成int,在处理数据的。