久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18370|回復: 16
收起左側

STM32 ADC采樣的十種濾波加程序

  [復制鏈接]
ID:511461 發表于 2019-7-20 16:54 | 顯示全部樓層 |閱讀模式
360截圖20190720165122106.jpg
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "lcd.h"
  6. #include "adc.h"
  7. #include "usartbo.h"

  8. u16 ftable[255] = {
  9.         2048, 2098, 2148, 2198, 2248, 2298, 2348, 2398, 2447, 2496,
  10. 2545, 2594, 2642, 2690, 2737, 2785, 2831, 2877, 2923, 2968,
  11. 3013, 3057, 3100, 3143, 3185, 3227, 3267, 3307, 3347, 3385,
  12. 3423, 3460, 3496, 3531, 3565, 3598, 3631, 3662, 3692, 3722,
  13. 3750, 3778, 3804, 3829, 3854, 3877, 3899, 3920, 3940, 3958,
  14. 3976, 3992, 4007, 4021, 4034, 4046, 4056, 4065, 4073, 4080,
  15. 4086, 4090, 4093, 4095, 4095, 4095, 4093, 4090, 4086, 4080,
  16. 4073, 4065, 4056, 4046, 4034, 4021, 4007, 3992, 3976, 3958,
  17. 3940, 3920, 3899, 3877, 3854, 3829, 3804, 3778, 3750, 3722,
  18. 3692, 3662, 3631, 3598, 3565, 3531, 3496, 3460, 3423, 3385,
  19. 3347, 3307, 3267, 3227, 3185, 3143, 3100, 3057, 3013, 2968,
  20. 2923, 2877, 2831, 2785, 2737, 2690, 2642, 2594, 2545, 2496,
  21. 2447, 2398, 2348, 2298, 2248, 2198, 2148, 2098, 2047, 1997,
  22. 1947, 1897, 1847, 1797, 1747, 1697, 1648, 1599, 1550, 1501,
  23. 1453, 1405, 1358, 1310, 1264, 1218, 1172, 1127, 1082, 1038,
  24. 995, 952, 910, 868, 828, 788, 748, 710, 672, 635,
  25. 599, 564, 530, 497, 464, 433, 403, 373, 345, 317,
  26. 291, 266, 241, 218, 196, 175, 155, 137, 119, 103,
  27. 88, 74, 61, 49, 39, 30, 22, 15, 9, 5,
  28. 2, 0, 0, 0, 2, 5, 9, 15, 22, 30,
  29. 39, 49, 61, 74, 88, 103, 119, 137, 155, 175,
  30. 196, 218, 241, 266, 291, 317, 345, 373, 403, 433,
  31. 464, 497, 530, 564, 599, 635, 672, 710, 748, 788,
  32. 828, 868, 910, 952, 995, 1038, 1082, 1127, 1172, 1218,
  33. 1264, 1310, 1358, 1405, 1453, 1501, 1550, 1599, 1648, 1697,
  34. 1747, 1797, 1847, 1897, 1947
  35. };

  36. int a=0;
  37. int b=1;
  38. /*//////////////////////////////////////////////////////////////////////////
  39. 方法一:限幅濾波法
  40. 方法:根據經驗判斷,確定兩次采樣允許的最大偏差值(設為A),每次檢測到新值時判斷:
  41.       如果本次值與上次值之差<=A,則本次值有效,
  42.       如果本次值與上次值之差>A,則本次值無效,放棄本次值,用上次值代替本次值。
  43. 優點:能克服偶然因素引起的脈沖干擾
  44. 缺點:無法抑制周期性的干擾,平滑度差
  45. //////////////////////////////////////////////////////////////////////////*/

  46. #define  A 51
  47. u16 Value1;

  48. u16 filter1()
  49. {
  50.   u16 NewValue;
  51.         Value1 = ftable[b-1];
  52.   NewValue = ftable[b];
  53.         b++;
  54.         a++;
  55.         if(a==255) a=0;
  56.         if(b==255) b=1;
  57.   if(((NewValue - Value1) > A) || ((Value1 - NewValue) > A))
  58.         {
  59.                 print_host(ftable[a],NewValue);
  60.     return NewValue;
  61.         }
  62.   else
  63.         {
  64.                  print_host(ftable[a],Value1);
  65.      return Value1;
  66.         }
  67. }

  68. /*//////////////////////////////////////////////////////////////////////////
  69. 方法二:中位值濾波法
  70. 方法: 連續采樣N次(N取奇數),把N次采樣值按大小排列,取中間值為本次有效值。
  71. 優點:克服偶然因素(對溫度、液位的變化緩慢的被測參數有良好的濾波效果)
  72. 缺點:對流量、速度等快速變化的參數不宜
  73. //////////////////////////////////////////////////////////////////////////*/
  74. #define N 3

  75. u16 value_buf[N];
  76. u16 filter2()
  77. {  
  78.   u16 count,i,j,temp;
  79.   for(count=0;count<N;count++)
  80.   {
  81.     value_buf[count] =  ftable[a];
  82.           a++;
  83.           if(a==255) a=0;
  84.   }
  85.         for (j=0;j<N-1;j++)
  86.         {
  87.                  for (i=0;i<N-j;i++)
  88.                  {
  89.                         if ( value_buf[i] >  value_buf[i+1] )
  90.                         {
  91.                          temp = value_buf[i];
  92.                          value_buf [i]= value_buf[i+1];
  93.                          value_buf[i+1] = temp;
  94.                         }
  95.                  }
  96.         }
  97. //        printf("%d\n",value_buf[(N-1)/2]);
  98.         return value_buf[(N-1)/2];
  99. }
  100. void pros2()
  101. {
  102.    print_host(4,filter2());
  103. }
  104. /*//////////////////////////////////////////////////////////////////////////
  105. 方法三:算術平均濾波法
  106. 方法:連續取N個采樣值進行算術平均運算:( N值的選取:一般流量,N=12;壓力:N=4。)
  107.       N值較大時:信號平滑度較高,但靈敏度較低;
  108.       N值較小時:信號平滑度較低,但靈敏度較高;     
  109. 優點:適用于對一般具有隨機干擾的信號進行濾波;這種信號的特點是有一個平均值,信號在某一數值范圍附近上下波動
  110. 缺點:對于測量速度較慢或要求數據計算速度較快的實時控制不適用,比較浪費RAM。
  111. ////////////////////////////////////////////////////////////////////////*/

  112. #define N 5
  113. u16 filter3()
  114. {
  115.         u16 sum = 0,count;
  116.         for ( count=0;count<N;count++)
  117.         {
  118.                 sum = sum+ ftable[a];
  119.                 a++;
  120.                 if(a==255) a=0;
  121.         }
  122.         print_host(4,sum/N);
  123. //        printf("%d\n",sum/N);
  124.         return (sum/N);
  125. }

  126. /*//////////////////////////////////////////////////////////////////////////
  127. 方法四:遞推平均濾波法(又稱滑動平均濾波法)
  128. 方法: 把連續取得的N個采樣值看成一個隊列,隊列的長度固定為N,
  129.        每次采樣到一個新數據放入隊尾,并扔掉原來隊首的一次數據(先進先出原則),
  130.        把隊列中的N個數據進行算術平均運算,獲得新的濾波結果。
  131.        N值的選。毫髁浚琋=12;壓力,N=4;液面,N=4-12;溫度,N=1-4。
  132. 優點:對周期性干擾有良好的抑制作用,平滑度高;
  133.       適用于高頻振蕩的系統。
  134. 缺點:靈敏度低,對偶然出現的脈沖性干擾的抑制作用較差;
  135.       不易消除由于脈沖干擾所引起的采樣值偏差;
  136.       不適用于脈沖干擾比較嚴重的場合;
  137.       比較浪費RAM。
  138. ////////////////////////////////////////////////////////////////////////*/

  139. #define FILTER4_N 3
  140. u16 filter_buf[FILTER4_N + 1];
  141. u16 filter4()
  142. {
  143.   int i;
  144.   int filter_sum = 0;
  145.   filter_buf[FILTER4_N] = ftable[a];               
  146.         a++;
  147.         if(a==255) a=0;
  148.   for(i = 0; i < FILTER4_N; i++)
  149.         {
  150.     filter_buf[i] = filter_buf[i + 1]; // 所有數據左移,低位仍掉
  151.     filter_sum += filter_buf[i];
  152.   }
  153. //        printf("%d\n",filter_sum / FILTER4_N);
  154.   return (int)(filter_sum / FILTER4_N);
  155. }


  156. void pros4(void)
  157. {
  158.         u16 i=0;
  159.   print_host(4,filter4());
  160. }
  161. /*//////////////////////////////////////////////////////////////////////////
  162. 方法五:中位值平均濾波法(又稱防脈沖干擾平均濾波法)
  163. 方法: 采一組隊列去掉最大值和最小值后取平均值,     (N值的選。3-14)。
  164.       相當于“中位值濾波法”+“算術平均濾波法”。
  165.       連續采樣N個數據,去掉一個最大值和一個最小值,
  166.       然后計算N-2個數據的算術平均值。   
  167. 優點: 融合了“中位值濾波法”+“算術平均濾波法”兩種濾波法的優點。
  168.        對于偶然出現的脈沖性干擾,可消除由其所引起的采樣值偏差。
  169.        對周期干擾有良好的抑制作用。
  170.        平滑度高,適于高頻振蕩的系統。
  171. 缺點:對于測量速度較慢或要求數據計算速度較快的實時控制不適用,比較浪費RAM。
  172. ////////////////////////////////////////////////////////////////////////*/

  173. #define N 3
  174. int filter5()
  175. {
  176.   int i, j;
  177.   int filter_temp, filter_sum = 0;
  178.   int filter_buf[N];
  179.   for(i = 0; i < N; i++)
  180.         {
  181.     filter_buf[i] = ftable[a];
  182.                 a++;
  183.                 if(a==255)   a=0;
  184.     delay_us(10);
  185.   }
  186.   // 采樣值從小到大排列(冒泡法)
  187.   for(j = 0; j < N - 1; j++)
  188.         {
  189.     for(i = 0; i < N - 1 - j; i++)
  190.                 {
  191.       if(filter_buf[i] > filter_buf[i + 1])
  192.                         {
  193.         filter_temp = filter_buf[i];
  194.         filter_buf[i] = filter_buf[i + 1];
  195.         filter_buf[i + 1] = filter_temp;
  196.       }
  197.     }
  198.   }
  199.   // 去除最大最小極值后求平均
  200.   for(i = 1; i < N - 1; i++) filter_sum += filter_buf[i];
  201. //        printf("%d\n",filter_sum / ( N - 2));
  202.   return filter_sum / (N - 2);
  203. }

  204. void pros5(void)
  205. {
  206.         u16 i=0;
  207.         for(i=0;i<255;i++)
  208.         {
  209.      print_host(ftable[i],filter5());
  210.         }
  211. }

  212. /*//////////////////////////////////////////////////////////////////////////
  213. 方法六:限幅平均濾波法
  214. 方法: 相當于“限幅濾波法”+“遞推平均濾波法”;
  215.        每次采樣到的新數據先進行限幅處理,
  216.        再送入隊列進行遞推平均濾波處理。
  217. 優點: 融合了兩種濾波法的優點;
  218.       對于偶然出現的脈沖性干擾,可消除由于脈沖干擾所引起的采樣值偏差。
  219. 缺點:比較浪費RAM。
  220. ////////////////////////////////////////////////////////////////////////*/
復制代碼

全部資料51hei下載地址:
十大濾波.7z (206.02 KB, 下載次數: 568)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:280151 發表于 2019-8-9 09:30 | 顯示全部樓層
很有用    太謝謝了
回復

使用道具 舉報

ID:140183 發表于 2019-8-17 20:24 | 顯示全部樓層
之前學了一下STC單片機.現在要學習STM32.非常感謝!
回復

使用道具 舉報

ID:582109 發表于 2019-8-18 12:24 | 顯示全部樓層
太有用了
回復

使用道具 舉報

ID:511461 發表于 2019-10-23 19:15 | 顯示全部樓層
資料共享,大家互相學習
回復

使用道具 舉報

ID:47541 發表于 2019-10-24 09:41 | 顯示全部樓層

資料共享,大家互相學習
回復

使用道具 舉報

ID:67425 發表于 2019-10-29 11:22 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

ID:25310 發表于 2019-11-26 08:48 | 顯示全部樓層
實用資料果斷收藏!
回復

使用道具 舉報

ID:701882 發表于 2020-3-12 20:21 | 顯示全部樓層
互相學習
回復

使用道具 舉報

ID:502584 發表于 2020-7-18 10:18 | 顯示全部樓層
非常感謝樓主的無私奉獻!
回復

使用道具 舉報

ID:246133 發表于 2020-7-23 09:03 | 顯示全部樓層
太有用了,非常感謝樓主分享。
回復

使用道具 舉報

ID:326430 發表于 2020-7-23 16:10 | 顯示全部樓層
你這軟件是什么軟件?
回復

使用道具 舉報

ID:807274 發表于 2020-7-23 16:51 | 顯示全部樓層
學了一下STC單片機.現在要學習STM32.非常感謝!
回復

使用道具 舉報

ID:511461 發表于 2020-8-1 21:17 | 顯示全部樓層
727742898 發表于 2020-7-23 16:10
你這軟件是什么軟件?

山外調試助手,我分享過,這是鏈接http://www.zg4o1577.cn/bbs/dpj-193123-1.html
回復

使用道具 舉報

ID:457079 發表于 2021-2-2 10:15 | 顯示全部樓層
很好的東西 非常有用啊
回復

使用道具 舉報

ID:904778 發表于 2021-4-12 23:17 | 顯示全部樓層
好東西,最近DIY小玩意要用,多謝分享
回復

使用道具 舉報

ID:536912 發表于 2023-1-5 14:51 | 顯示全部樓層
感謝分享
非常感謝樓主的無私奉獻!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品免高潮在线观看 | 日本免费在线观看视频 | 成人不卡一区二区 | 欧美不卡在线 | 久久精品国产一区 | 日本黄视频在线观看 | 中文在线播放 | 97伦理影院 | 亚洲国产成人精品女人久久久 | 成人免费三级电影 | 亚洲一区不卡 | 亚洲成人在线免费 | 欧美日本在线观看 | 日韩播放 | 福利色导航 | 国产高清久久 | 久久精品亚洲精品国产欧美 | 国产精品久久国产精品久久 | 国产羞羞视频在线观看 | 亚洲成网站 | 中文字幕一区二区三区在线观看 | 欧美极品一区二区 | 九九久久久 | 九九热这里只有精品6 | 国产欧美一区二区三区在线看 | 一区二区中文 | 波多野结衣在线观看一区二区三区 | 中文字幕一区在线 | 中文字幕日韩欧美 | 中文字幕在线一 | 蜜桃视频在线观看免费视频网站www | av国产精品| 视频一区二区三区中文字幕 | 成人精品一区二区 | 日本一区二区高清不卡 | 91精品成人久久 | 国产免费人成xvideos视频 | 亚洲av毛片| 国产精品九九视频 | 国产美女精品 | 国产精品美女久久久久久久网站 |