用STM32是实现心电图的实时滤波,有哪些简单快速的算法可以用c语言实现,请各位大神指教 5

 我来答
百度网友3d14df2
2012-12-13
知道答主
回答量:15
采纳率:0%
帮助的人:9.8万
展开全部
1、限副滤波  /* A值可根据实际情况调整
  value为有效值,new_value为当前采样值
  滤波程序返回有效的实际值 */
  #define A 10
  char value;
  char filter()
  {
  char new_value;
  new_value = get_ad();
  if ( ( new_value - value > A ) || ( value - new_value > A )
  return value;
  return new_value;
  }
  2、中位值滤波法
  /* N值可根据实际情况调整
  排序采用冒泡法*/
  #define N 11
  char filter()
  {
  char value_buf[N];
  char count,i,j,temp;
  for ( count=0;count
  {
  value_buf[count] = get_ad();
  delay();
  }
  for (j=0;j
  {
  for (i=0;i
  {
  if ( value_buf[i]>value_buf[i+1] )
  {
  temp = value_buf[i];
  value_buf[i] = value_buf[i+1];
  value_buf[i+1] = temp;
  }
  }
  }
  return value_buf[(N-1)/2];
  }
  3、算术平均滤波法
  /*
  */
  #define N 12
  char filter()
  {
  int sum = 0;
  for ( count=0;count
  {
  sum + = get_ad();
  delay();
  }
  return (char)(sum/N);
  }
  4、递推平均滤波法(又称滑动平均滤波法)
  /*
  */
  #define N 12
  char value_buf[N];
  char i=0;
  char filter()
  {
  char count;
  int sum=0;
  value_buf[i++] = get_ad();
  if ( i == N ) i = 0;
  for ( count=0;count
  sum = value_buf[count];
  return (char)(sum/N);
  }
  5、中位值平均滤波法(又称防脉冲干扰平均滤波法)
  /*
  */
  #define N 12
  char filter()
  {
  char count,i,j;
  char value_buf[N];
  int sum=0;
  for (count=0;count
  {
  value_buf[count] = get_ad();
  delay();
  }
  for (j=0;j
  {
  for (i=0;i
  {
  if ( value_buf[i]>value_buf[i+1] )
  {
  temp = value_buf[i];
  value_buf[i] = value_buf[i+1];
  value_buf[i+1] = temp;
  }
  }
  }
  for(count=1;count
  sum += value[count];
  return (char)(sum/(N-2));
  }
  6、限幅平均滤波法
  /*
  */
  略 参考子程序1、3
  7、一阶滞后滤波法
  /* 为加快程序处理速度假定基数为100,a=0~100 */
  #define a 50
  char value;
  char filter()
  {
  char new_value;
  new_value = get_ad();
  return (100-a)*value + a*new_value;
  }
  8、加权递推平均滤波法
  /* coe数组为加权系数表,存在程序存储区。*/
  #define N 12
  char code coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12};
  char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;
  char filter()
  {
  char count;
  char value_buf[N];
  int sum=0;
  for (count=0,count
  {
  value_buf[count] = get_ad();
  delay();
  }
  for (count=0,count
  sum += value_buf[count]*coe[count];
  return (char)(sum/sum_coe);
  }
  9、消抖滤波法
  #define N 12
  char filter()
  {
  char count=0;
  char new_value;
  new_value = get_ad();
  while (value !=new_value);
  {
  count++;
  if (count>=N) return new_value;
  delay();
  new_value = get_ad();
  }
  return value;
  }
10、限幅消抖滤波法
  /*
  */
  略 参考子程序1、9
第10种方法限幅消抖滤波法A方法相当于“限幅滤波法”+“消抖滤波法”先限幅后消抖B优点继承了“限幅”和“消抖”的优点改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统C缺点对于快速变化的参数不宜第11种方法IIR 数字滤波器A方法确定信号带宽,滤之。Y(n) = a1*Y(n-1) + a2*Y(n-2) + ... + ak*Y(n-k) + b0*X(n) + b1*X(n-1) + b2*X(n-2) + ... + bk*X(n-k)B优点高通,低通,带通,带阻任意。设计简单(用matlab)C缺点运算量大
来自:求助得到的回答
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式