脉搏检测器脉冲检测算法

这个是近期整理到的多年前帮别人做的一个脉搏检测器的毕业设计。
中间的一个核心是对脉搏进行检测。
算法的原理是://http://www.ixueshu.com/document/a460a38fab50393a318947a18e7f9386.html
下面是代码,因为这是很多年前的代码了。写的有点乱。

int plus_dectect(int adc_val)
{
	  enum
	  {
	   Search_Max,
	   Search_Min,
	  };
	  #define  PER_ACC_COUNT       15
	  #define  PER_ATTEN           0.98           //每次阈值降低的百分比
	  static int max_val = 0, min_val = 4096;      //初始最大最小值
	   static int threshold = 3000;          //初始阈值较大一点
	  static long int sumtime = 0;
	  static u8 sta = Search_Max;
	  static int per_count = 0;                 //每隔多少时间降低阈值百分点
	  
	  if (per_count > PER_ACC_COUNT)
	  {
		   threshold *= PER_ATTEN;
		   per_count = 0;
	  }
	  else
	  	 per_count++;	  
	  if (sta == Search_Max)
	  {
		   if (adc_val > max_val)
		   {//更新MAX值,并记录该点为最大点
		    	max_val = adc_val;
		   }
		   else
		   {//求两者的差值,若小于1/2的阈值不做处理,认为可能是个小坡
			    if ((max_val - adc_val) > (threshold * 0.55))
			    {//如果大于1/2,确定之前那个为最大值
				      sta = Search_Min;        //转化到求最小值状态/
				      /脉冲计数+1
			    }
		 }
 	}	 
 	else
  	{
	  	   if (adc_val < min_val)
		   {//更新MIN值
		  	  min_val = adc_val;
		   }
		   else
		   {//求两者的差值,若小于1/2的阈值不做处理,认为可能是个小坡
			    if ((adc_val - min_val) > (threshold * 0.55))
			    {//如果大于1/2,确定之前那个为最小值
				      sta = Search_Max;        //转化到求最小值状态
				      threshold = max_val - min_val;   //得到新的阈值
				      per_count = 0;
				      //period_count++;
				//       pulsFreq = 300000 / get_time();
				//       clear_time();
				      pulsFreq = time_count;
				      time_count = 0;
				      printf("%d ", pulsFreq);
				      return 1;
				}
		 }
	}
	 return 0;
}			  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值