91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 5KB
    文件類型: .c
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-13
  • 語言: C/C++
  • 標簽:

資源簡介

在嵌入式開發中經常會用到一些濾波算法,我整理了一些資料把這些算法封裝成可以直接調用的函數,方便以后的開發,包括限幅濾波、中位值濾波法、 算術平均濾波法、一階滯后濾波法、加權遞推平均濾波法、消抖濾波法 ,其他的一些包括卡爾曼濾波什么的之后有機會再整理

資源截圖

代碼片段和文件信息

#include?“filter.h“



/*
限幅濾波

  A方法:?根據經驗判斷,確定兩次采樣允許的最大偏差值(設為A),每次檢測到新值時判斷:?如果本次值與上次值之差<=A,則本次值有效,如果本次值與上次值之差>A,則本次值無效,放棄本次值,用上次值代替本次值。

  B優點:?能有效克服因偶然因素引起的脈沖干擾。

  C缺點:?無法抑制那種周期性的干擾,平滑度差。

A值可根據實際情況調整

value為有效值,new_value為當前采樣值

濾波程序返回有效的實際值
*/

#define?DEVIATION??10

float?limit_filter(float?new_value)
{
????static?float?value?=?20.0;??//需要賦一個初值
????if?(?(?new_value?-?value?>?DEVIATION?)?||?(?value?-?new_value?>?DEVIATION?))
????????return?value;
????return?new_value;
}


/*
中位值濾波法

  A方法:?取之前采樣的N次(N取奇數),把N次采樣值按大小排列,取中間值為本次有效值。

  B優點:?能有效克服因偶然因素引起的波動干擾,對溫度、液位的變化緩慢的被測參數有良好的濾波效果。

  C缺點:?對流量、速度等快速變化的參數不宜。

????排序采用冒泡法?只需要移動最后一個元素即可

*/
#define?MIDDLE_FILTER_N??11

float?middle_filter(?float?new_value)
{
????static?float?value_buf[MIDDLE_FILTER_N];
????float?temp?;
????uint8_t?count?i;
????for?(?count?=?0;?count?????{
????????value_buf[count]?=?value_buf[count?+?1]?;
????}
????value_buf[MIDDLE_FILTER_N?-?1]?=?new_value;

????for?(i?=?MIDDLE_FILTER_N;?i?>?0?;?i?--)
????{
????????if?(?value_buf[i]?????????{
????????????temp?=?value_buf[i];
????????????value_buf[i]?=?value_buf[i?-?1];
????????????value_buf[i?-?1]?=?temp;
????????}
????}
????return?value_buf[(MIDDLE_FILTER_N?-?1)?/?2];
}


/*
???算術平均濾波法

A方法:?連續取N個采樣值進行算術平均運算,N值較大時:信號平滑度較高,但靈敏度較低;N值較小時:信號平滑度較低,但靈敏度較高。N值的選取:一般流量,N=12;壓力:N=4。

  B優點:?適用于對一般具有隨機干擾的信號進行濾波,這樣信號的特點是有一個平均值,信號在某一數值范圍附近上下波動。

  C缺點:?對于測量速度較慢或要求數據計算速度較快的實時控制不適用,比較浪費RAM?。

???無需每次求一編所有的和,減去第一個數據加上新數據

*/

#define?AVERAGE_N?12

float?average_filter(float?new_value)
{
????static?float?average_value_buf[AVERAGE_N];
????static??float?average_sum?=?0;
????uint8_t?count;
????average_sum?-=?average_value_buf[0];
????for?(?count?=?0;?count?????{
????????average_value_buf[count]?=?average_value_buf[count?+?1]?;
????}
????average_value_buf[AVERAGE_N?-?1]?=?new_value;
????average_sum?+=?average_value_buf[11];

????return?(ave

評論

共有 條評論

相關資源