|
本帖最后由 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領域中的數最多 )
- typedef unsigned char uint8_t;
- #define N 3 //定于可以接受的范圍
- uint8_t LB(uint8_t *arr , uint8_t Length)
- {
- uint8_t Max = 0 , Number = 0 ;//保存最多出現的次數 和 該值
- uint8_t i , j ;
- uint8_t cc;// 差
- uint8_t Count=0;// 計數器
- for( i = 0 ; i < Length ; i++ )
- {
- for(j=0;j<Length;j++)
- {
- if( i == j )
- continue;
- /* 求兩個數的差的絕對值 */
- if( arr[i] > arr[j] )
- cc = arr[i] - arr[j] ;
- else
- cc = arr[j] - arr[i] ;
- /* 如果差在范圍內 */
- if( cc<= N )
- Count++;
- }
-
- if( Count > Max )
- {
-
- Max = Count;
-
- Number = arr[i];
- }
- Count=0;
- }
- printf("Num=%d\tMax=%d\n",Number,Max);
- }
復制代碼
|
|