0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于遞推算術(shù)平均算法的平滑濾波器設(shè)計(jì)

CHANBAEK ? 來源:木南創(chuàng)智 ? 作者:尹家軍 ? 2022-12-13 17:33 ? 次閱讀

信號(hào)采集是非常常見的需求,我們也總是希望采集到的數(shù)據(jù)是純凈而真實(shí)的,但這只是我們的希望。環(huán)境中存在太多的干擾信號(hào),為了讓我們得到的數(shù)據(jù)盡可能地接近實(shí)際值,我們需要降低這些干擾信號(hào)的影響,于是就有了濾波器的用武之地。這里我們討論的主要是軟件實(shí)現(xiàn)的數(shù)字濾波器,這一篇我們就來討論基于遞推算術(shù)平均算法的平滑濾波器。

1 、問題的提出

在我們通過AD采集獲取數(shù)據(jù)時(shí),不可避免會(huì)受到干擾信號(hào)的影響,而且很多時(shí)候我們希望盡可能的將這種影響減到最小。為實(shí)現(xiàn)這一目的,人們想了很多辦法,有硬件方面的,也有軟件方面的。在硬件難以改變或者軟件能夠達(dá)到相應(yīng)效果時(shí),我們一般采用軟件方法來實(shí)現(xiàn),通常稱之為數(shù)字濾波。

實(shí)現(xiàn)數(shù)字濾波的算法有很多種,根據(jù)不同的應(yīng)用需求我們可以選擇不同濾波算法來實(shí)現(xiàn)。對(duì)于一般的AD采集最常見的是周期性干擾和隨機(jī)性噪聲,對(duì)于此類干擾一般采用算術(shù)平均的方法就能得到比較理想的效果。其計(jì)算公式如下:

使用簡(jiǎn)單的算術(shù)平均值算法雖然能夠?qū)崿F(xiàn)濾波,但在一些情況下有一個(gè)問題可能會(huì)有影響,那就是當(dāng)做算術(shù)平均的數(shù)量比較大時(shí)會(huì)出現(xiàn)曲線并不是十分平滑的情況。這很容易理解,因?yàn)橐淮尾杉痭個(gè)數(shù)做算術(shù)平均得到一個(gè)結(jié)果,當(dāng)n越大則間隔的時(shí)間就越長(zhǎng)。為了解決這一問題我們并不是甲酸完后就將n個(gè)數(shù)同時(shí)丟棄,而是將最早的數(shù)丟棄并采用最新采集的數(shù)代替,這就是所謂的遞推算術(shù)平均算法。但其計(jì)算公式并沒有發(fā)生變化。

2 、算法設(shè)計(jì)

我們?nèi)绾螌?shí)現(xiàn)這種遞推方式的平滑濾波器呢?首先我們來看一看一般的算術(shù)平均算法是如何實(shí)現(xiàn)的。算術(shù)平均算法就是采集N個(gè)數(shù)然后對(duì)這N個(gè)數(shù)取平均值作為最終的結(jié)果。我們將這些數(shù)的序列記錄如下:

這N個(gè)數(shù)計(jì)算完畢后就會(huì)丟棄,然后再采集N個(gè)數(shù)。很顯然,如果N值較大,采集所耗費(fèi)的時(shí)間跨度就會(huì)比較長(zhǎng),數(shù)據(jù)看起來可能就并不那么平滑,而且數(shù)據(jù)的輸出速率會(huì)慢很多,也不能展示數(shù)據(jù)的變化過程。而遞推平均算法則不存在這些問題。同樣是一個(gè)長(zhǎng)度為N的數(shù)據(jù)隊(duì)列,但沒采樣一次數(shù)據(jù),我們就用最新的數(shù)據(jù)替換掉最久的數(shù)據(jù),并輸出算術(shù)平均值。我們將這些數(shù)的序列記錄如下:

這樣每采樣一個(gè)數(shù)據(jù)我們都會(huì)輸出一個(gè)濾波后的數(shù)據(jù),而不是等待采集N個(gè)數(shù)據(jù)后才會(huì)輸出,這樣既可保證數(shù)據(jù)的連續(xù)性也可達(dá)到平滑濾波的效果。

3 、代碼實(shí)現(xiàn)

我們分析了平滑濾波器的實(shí)現(xiàn)算法,接下來我們來討論如何實(shí)現(xiàn)這一濾波器。首先我們將濾波器作為一個(gè)對(duì)象,我們實(shí)現(xiàn)的濾波器操作也將面向這一對(duì)象來實(shí)現(xiàn)。那么我們實(shí)現(xiàn)對(duì)濾波器對(duì)象的操作需要確定該對(duì)象的那些屬性呢?

作為濾波器肯定需要獲取當(dāng)前采集到的數(shù)據(jù)值;同時(shí)我們?yōu)榱藢?shí)現(xiàn)對(duì)N個(gè)數(shù)據(jù)的遞推平均就需要有一個(gè)存儲(chǔ)這N個(gè)數(shù)的隊(duì)列;我們需要記錄最新的數(shù)據(jù)硬件存儲(chǔ)到哪個(gè)位置就需要一個(gè)位置指針;同時(shí)我們也需要知道N的大小,所以我們將它們都定義濾波器對(duì)象的屬性。平滑濾波的過程必須要計(jì)算算術(shù)平均值,而遞推算術(shù)平均則是在每次采集一個(gè)數(shù)據(jù)之時(shí)都計(jì)算平均值,可是如果N值較大時(shí),就會(huì)存在大量的重復(fù)計(jì)算。我們考慮到上一次采樣的平均值已經(jīng)得到,我們將其記錄下來的話就可以用最新采集的數(shù)據(jù)替換掉最老的數(shù)據(jù),從而得到新的平均值,所以我們將上一時(shí)間的輸出值記錄下來作為對(duì)象的一個(gè)屬性。根據(jù)以上分析我們可定義濾波器對(duì)象類型為:

1 /*定義平滑濾波對(duì)象類型*/
2 typedef struct FilterObject{
3   float newValue;       //最新測(cè)量值
4   float lastValue;      //上一個(gè)輸出值
5   float *buffer;        //數(shù)據(jù)緩存區(qū)
6   int16_t position;    //寫操作位置指針
7   uint16_t bufCount;    //濾波的數(shù)量
8 }FilterObjectType;

我們獲得了濾波器對(duì)象,接下來我們基于該對(duì)象實(shí)現(xiàn)平滑濾波器。對(duì)于平滑濾波自然是要采取計(jì)算平均值的過程。但我們使用了循環(huán)隊(duì)列的操作方式,所以判斷新數(shù)據(jù)指針當(dāng)前所處的位置。具體實(shí)現(xiàn)如下:

1 /*平滑濾波處理函數(shù),返回濾波后的值 */
 2 float SmoothingFilter(FilterObjectType *filter)
 3 {
 4   float result=0.0;
 5  
 6   if(filter->position<0)
 7   {
 8     for(int i=0;i<filter->bufCount;i++)
 9     {
10       filter->buffer[i]=filter->newValue;
11     }
12     filter->position=0;
13     filter->lastValue=filter->newValue;
14   }
15  
16   if(filter->position>=filter->bufCount)
17   {
18     filter->position=0;
19   }
20  
21   result=filter->lastValue-filter->buffer[filter->position]/filter->bufCount;
22  
23   result=result+filter->newValue/filter->bufCount;
24  
25   filter->buffer[filter->position++]=filter->newValue;
26  
27   filter->lastValue=result;
28  
29   filter->newValue=0.0;
30   return result;
31 }

4 、應(yīng)用總結(jié)

我們實(shí)現(xiàn)了基于算術(shù)平均的平滑濾波器,對(duì)于消除周期性干擾有良好的抑制作用,對(duì)于一般具有隨機(jī)干擾的信號(hào)也能進(jìn)行濾波。對(duì)于數(shù)據(jù)平滑度較高有不錯(cuò)的效果。

但是這種濾波方式有幾點(diǎn)是需要注意的。第一,它的靈敏度低。這很好理解,因?yàn)槲覀兛偸菍?duì)N個(gè)數(shù)采取平均值算法,所以新數(shù)據(jù)對(duì)平均值的影響有限,數(shù)據(jù)變化不明顯,響應(yīng)較慢,而且N越大越明顯。第二.對(duì)偶然出現(xiàn)的脈沖性干擾的抑制作用較差。第三,不易消除由于脈沖干擾所引起的采樣值偏差。所以這種濾波器并不適用于脈沖干擾比較嚴(yán)重的場(chǎng)合。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 濾波器
    +關(guān)注

    關(guān)注

    161

    文章

    7817

    瀏覽量

    178150
  • 數(shù)字濾波器
    +關(guān)注

    關(guān)注

    4

    文章

    270

    瀏覽量

    47026
  • 算法設(shè)計(jì)
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    8152
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于遞推算術(shù)平均算法的帶阻平滑濾波器設(shè)計(jì)

    濾波器的用武之地。這里我們討論的主要是軟件實(shí)現(xiàn)的數(shù)字濾波器,這一篇我們就來討論基于遞推算術(shù)平均算法的帶阻平滑
    的頭像 發(fā)表于 12-13 17:35 ?1100次閱讀
    基于<b class='flag-5'>遞推算術(shù)平均</b><b class='flag-5'>算法</b>的帶阻<b class='flag-5'>平滑</b><b class='flag-5'>濾波器</b>設(shè)計(jì)

    基于遞推算術(shù)平均算法的階進(jìn)平滑濾波器設(shè)計(jì)

    濾波器的用武之地。這里我們討論的主要是軟件實(shí)現(xiàn)的數(shù)字濾波器,這一篇我們就來討論基于遞推算術(shù)平均算法的階進(jìn)平滑
    的頭像 發(fā)表于 12-13 17:37 ?1166次閱讀
    基于<b class='flag-5'>遞推算術(shù)平均</b><b class='flag-5'>算法</b>的階進(jìn)<b class='flag-5'>平滑</b><b class='flag-5'>濾波器</b>設(shè)計(jì)

    基于算術(shù)平均算法的中值數(shù)字濾波器設(shè)計(jì)

    在信號(hào)采集系統(tǒng)中,除了我們感興趣的數(shù)據(jù)外,難免會(huì)有一些來自于環(huán)境的干擾信號(hào)。但我們總希望我們得到的數(shù)據(jù)是純凈而真實(shí)的,為了達(dá)到這個(gè)目標(biāo),我們不得不想辦法去除這些干擾信號(hào),于是濾波器就成為我們必不可少的幫手。這一篇我們就來討論如何通過軟件實(shí)現(xiàn)基于中值平均
    的頭像 發(fā)表于 12-13 17:41 ?1241次閱讀
    基于<b class='flag-5'>算術(shù)平均</b><b class='flag-5'>算法</b>的中值數(shù)字<b class='flag-5'>濾波器</b>設(shè)計(jì)

    基于算術(shù)平均算法的限幅濾波器設(shè)計(jì)

    通過AD采集數(shù)據(jù)時(shí),我們總是希望采集到的數(shù)據(jù)是純凈而真實(shí)的,而實(shí)際上環(huán)境中存在太多的干擾信號(hào),為了讓我們得到的數(shù)據(jù)盡可能地接近實(shí)際值,我們需要降低這些干擾信號(hào)的影響。所以軟件實(shí)現(xiàn)的數(shù)字濾波器應(yīng)運(yùn)而生,這一篇我們就來討論基于中值算術(shù)平均
    的頭像 發(fā)表于 12-13 17:47 ?1292次閱讀
    基于<b class='flag-5'>算術(shù)平均</b><b class='flag-5'>算法</b>的限幅<b class='flag-5'>濾波器</b>設(shè)計(jì)

    十大濾波算法程序大全

    1、限幅濾波法2、中位值濾波法3、算術(shù)平均濾波法4、遞推平均
    發(fā)表于 07-29 16:17

    史上最全濾波算法(Arduino編程)

    算術(shù)平均濾波法4、遞推平均濾波法(又稱滑動(dòng)平均濾波
    發(fā)表于 06-16 10:51

    轉(zhuǎn):史上最全濾波算法(Arduino編程)

    、算術(shù)平均濾波法4、遞推平均濾波法(又稱滑動(dòng)平均濾波
    發(fā)表于 07-28 11:08

    十一種通用濾波算法(一)

    引起的波動(dòng)干擾對(duì)溫度、液位的變化緩慢的被測(cè)參數(shù)有良好的濾波效果C、缺點(diǎn):對(duì)流量、速度等快速變化的參數(shù)不宜3、算術(shù)平均濾波法A、方法:連續(xù)取N個(gè)采樣值進(jìn)行算術(shù)平均運(yùn)算N值較大時(shí):信號(hào)
    發(fā)表于 09-12 23:10

    AD采集濾波算法

    的被測(cè)參數(shù)有良好的濾波效果 C、缺點(diǎn):對(duì)流量、速度等快速變化的參數(shù)不宜3、算術(shù)平均濾波法 A、方法:連續(xù)取N個(gè)采樣值進(jìn)行算術(shù)平均運(yùn)算N值較大時(shí):信號(hào)
    發(fā)表于 04-30 03:43

    算術(shù)平均濾波法的優(yōu)缺點(diǎn)

    算術(shù)平均數(shù)能較好的過濾隨機(jī)干擾(使正負(fù)干擾的期望相互抵消)
    發(fā)表于 07-18 06:33

    分享幾種較簡(jiǎn)單而常用的濾波算法

    法)**二、中位值濾波法****三、算術(shù)平均濾波法****四、遞推平均濾波法****五、中位值
    發(fā)表于 12-21 06:10

    加權(quán)遞推平均濾波法是什么

    加權(quán)遞推平均濾波法是對(duì)遞推平均濾波法的改進(jìn),即不同時(shí)刻的數(shù)據(jù)加以不同的權(quán)。通常是,越接近現(xiàn)時(shí)刻的
    發(fā)表于 01-11 07:01

    十一個(gè)經(jīng)典的濾波算法的介紹和示例程序詳細(xì)資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是十一個(gè)經(jīng)典的濾波算法的詳細(xì)資料免費(fèi)下載主要內(nèi)容包括了:1、限幅濾波法(又稱程序判斷濾波法)2、中位值濾波法3、
    發(fā)表于 11-06 19:35 ?20次下載
    十一個(gè)經(jīng)典的<b class='flag-5'>濾波</b><b class='flag-5'>算法</b>的介紹和示例程序詳細(xì)資料免費(fèi)下載

    濾波算法有哪些十大濾波算法的資料介紹

    本文檔的主要內(nèi)容詳細(xì)介紹的是十大濾波算法的資料介紹包括了:限幅濾波法(程序判斷濾波法),中位值濾波法,
    發(fā)表于 01-04 08:00 ?28次下載
    <b class='flag-5'>濾波</b><b class='flag-5'>算法</b>有哪些十大<b class='flag-5'>濾波</b><b class='flag-5'>算法</b>的資料介紹

    單片機(jī)有哪些常用濾波算法詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是單片機(jī)有哪些常用濾波算法詳細(xì)資料說明包括了:1、限幅濾波法,2、中位值濾波法,3、算術(shù)平均
    發(fā)表于 07-29 17:36 ?4次下載
    單片機(jī)有哪些常用<b class='flag-5'>濾波</b><b class='flag-5'>算法</b>詳細(xì)資料說明