找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2720|回复: 0
打印 上一主题 下一主题
收起左侧

简易的触摸屏滤波

[复制链接]
跳转到指定楼层
楼主
ID:90014 发表于 2015-9-14 18:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jialinx 于 2015-9-14 18:42 编辑

     使用电阻的触摸屏时,ADC采集的信号往往有误差,这个时候就需要点击触摸屏一次 ADC就采集多次 (比如 采集10次) 然而 一般来说就是取 这10个数的平均值 作为信号的值 但是 经过试验 这是非常不可靠的.例如 某次采集的 信号是  53 52 54 53 52 51 55 4095 0 1105 3321 4095  对于这样的结果如果直接把这些数取平均值 那样的话太不可靠了  我们观察数据 显然ADC采样的正确的值 应该是 52 左右 . 为什么呢? 因为观察发现 53 52 54 53 52 51 这5个数差异不大 ,后面的5个数 显然差异太大了... 对的信号往往是在某个范围内变化的(范围越大 精度越小 可信度不高) 显然前面的5个AD值的变化范围是 可信的.
     然而 怎么样让计算机 知道正确的信号呢?
    对于这10个信号  我假设 正确的 值为 X 我定义一个可以接受的范围 N  假如说着10个数中 落在 X-N 到X+N 的范围内的数 最多那么 此时的X的值 就是正确的信号 ( 也就落在是 落在X的N领域中的数最多 )


  1. typedef unsigned char uint8_t;

  2. #define N     3  //定于可以接受的范围

  3. uint8_t LB(uint8_t *arr , uint8_t Length)
  4. {
  5.        uint8_t Max = 0 , Number = 0 ;//保存最多出现的次数 和 该值
  6.         uint8_t  i , j ;
  7.        uint8_t cc;// 差
  8.        uint8_t Count=0;// 计数器
  9.        for( i = 0 ; i < Length ; i++ )
  10.        {
  11.               for(j=0;j<Length;j++)
  12.               {
  13.                    if( i == j )
  14.                            continue;
  15.                     /* 求两个数的差的绝对值 */
  16.                      if( arr[i] > arr[j] )
  17.                             cc = arr[i] - arr[j] ;
  18.                      else
  19.                             cc = arr[j] - arr[i] ;
  20.                     /* 如果差在范围内 */
  21.                      if( cc<= N )
  22.                             Count++;
  23.               }
  24.                
  25.               if( Count > Max )
  26.               {
  27.                  
  28.                      Max = Count;
  29.                  
  30.                      Number = arr[i];

  31.               }
  32.               Count=0;
  33.        }

  34.        printf("Num=%d\tMax=%d\n",Number,Max);

  35. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表