在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

滑動窗口濾波器的原理與實現

CHANBAEK ? 來源:明解嵌入式 ? 作者:Sharemaker001 ? 2023-04-19 11:35 ? 次閱讀

前言

嵌入式開發程序中涉及數據采樣如傳感器采樣,AD采樣等如果直接讀取信號后,將信號值直接參與后續邏輯處理,若程序無軟件濾波,會導致靜態或者動態采樣時:

1、信號曲線相對沒有那么平滑。

2、同時可能存在脈沖干擾導致邏輯判斷錯誤。

在信號處理系統中,輸入信號通常含有各種噪聲和干擾。 為對信號進行準確的測量和控制,必須削弱或濾除被測信號中的噪聲和干擾。 因此在工程應用需要使用軟件濾波,軟件濾波也稱數字濾波,是通過一定的算法削弱噪聲的影響。 在實際的開發過程中使用了滑動窗口濾波算法來對傳感器的數據采樣進行濾波處理。

一、圖解滑動窗口濾波器的原理

1、建立采樣窗口和濾波窗口,自定義各窗口長度大小。

圖片

2、當數據樣本點數未填滿采樣窗口,對采樣窗口內的數據累加做平均值計算。

例如此時采樣窗口內數據采樣點只有4個,小于定義的采樣窗口長度,則將4個值累加后再做平均值計算。

圖片

3、當數據樣本點數已填滿采樣窗口,進行冒泡排序后,去除n個最大值及最小值后,對濾波窗口內的數據累加做平均值運算。

例如此時采樣窗口內數據采樣點有7個,已填滿定義長度大小的采樣窗口,則分別去除自定義的1個最大值和1個最小值后,對剩余濾波窗口內的數據累加后再做平均值計算。

圖片

4、新的數據樣本到來,移除采樣窗口中時間最早的點(FIFO),重復上述3操作。

圖片

二、滑動窗口濾波器的特點

1、經過濾波處理后,濾除了噪聲干擾,數據波動穩定平滑。

2、每采樣一個新數據,就將最早采集的那個數據丟掉,因此每進行一次采樣,就可計算出一個新的平均值,從而加快了數據處理的速度。

3、可以根據實時性的要求和需要濾波后數據的平滑度來設置采樣窗口和濾波窗口的大小。

4、當采樣的數據量非常大時,這時的采樣窗口會設置很大,那么窗口需要消耗一定的內存空間。

5、當采樣數據越多,數據實時性越差,當數據突然發生較大變化時,不能被立刻檢測到,無法及時處理突發事件。

三、滑動窗口濾波器的C++代碼實現

1、基本思路

1、在工程根目錄下新建filter文件夾,將源文件filter.cpp和頭filter.h放在文件夾中供修改調用。

2、頭文件:

(1)定義濾波算法函數中的可修改宏值;

(2)聲明定義的濾波函數模板;

(3)使用extern的方式聲明實例化后的模板函數。

3、源文件:

(1)定義需要使用濾波算法的函數模板;

(2)在定義的函數模板后進行函數實例化操作,通過這樣的方法實現具體的模板函數。

2、頭文件filter.h

#ifndef _FILTER_H_
#define _FILTER_H_


#define MAX_SENSOR_NUM 9   //使用濾波時的傳感器數量
#define MAX_DATA_NUM 9     //最大采樣點數量,即采樣窗口長度
#define WINDOW_DATA_NUM 5  //濾波窗口長度
//去除采樣窗口內最大最小值的數量,這里去除兩個最大和兩個最小 
#define REMOVE_MAXMIN_NUM ((MAX_DATA_NUM - WINDOW_DATA_NUM)/2)  


//extern double m_dataList[MAX_SENSOR_NUM][MAX_DATA_NUM];


//聲明定義的函數模板
template<typename InType> InType Filter_SlidingWindowAvg(int index, InType data);
//使用extern的方式聲明實例化后的模板函數,根據實際需要自定義數據類型
extern template short Filter_SlidingWindowAvg(int index, short data);
extern template unsigned int Filter_SlidingWindowAvg(int index, unsigned int data);


#endif

3、源文件filter.cpp

#include 
#include "Filter.h"


using namespace std;
//定義各個傳感器的數據采樣點列表
double m_dataList[MAX_SENSOR_NUM][MAX_DATA_NUM] = {0};
//滑窗均值濾波,使用函數模板可用于適配不同數據類型的采樣點
template<typename InType>
InType Filter_SlidingWindowAvg(int index, InType data)   
{
    static int dataNum[MAX_SENSOR_NUM] = {0}; //定義記錄傳感器的采樣點個數
    int i;
    double sum = 0;
    double out = 0;
    double array[MAX_DATA_NUM] = {0};

    //數據采樣點在采樣窗口內移動,FIFO操作
    for(i = MAX_DATA_NUM - 2; i >= 0; i--)
        m_dataList[index][i+1] = m_dataList[index][i];

    m_dataList[index][0] = data;
    //數據采樣點數量小于采樣窗口長度,對采樣窗口數據累加后進行平均值運算                                     
    if(dataNum[index] < MAX_DATA_NUM) 
    {
        dataNum[index]++;
        for(i = 0; i < dataNum[index]; i++)
        {
            sum += m_dataList[index][i];
        }
        out = sum / dataNum[index];
    }
    //數據采樣點已填滿采樣窗口,進行排序后,去除n個最大值及最小值后,對濾波窗口內的數據累加后進 
    //行平均值運算   
    else        
    {  
        for(i = 0; i < MAX_DATA_NUM; i++)
        {
            array[i] = m_dataList[index][i];
        }
        //利用C++標準庫的sort函數進行排序,這里使用默認的升序
        sort(array, array + MAX_DATA_NUM);

        int start = (MAX_DATA_NUM - WINDOW_DATA_NUM) / 2; //start = REMOVE_MAXMIN_NUM

        for(i = start; i < start + WINDOW_DATA_NUM; i++)
        {
            sum += array[i];
        }
        out = sum / WINDOW_DATA_NUM;
    }
    return out;
}


//對函數模板進行函數實例化操作,根據實際需要自定義數據類型
template short Filter_SlidingWindowAvg(int index, short data);
template unsigned int Filter_SlidingWindowAvg(int index, unsigned int data);

四、滑動窗口濾波器的C代碼實現

1、基本思路

1、在工程根目錄下新建filter文件夾,將頭filter.h和源文件filter.c放在文件夾中供修改調用。

2、頭文件:

(1)定義濾波算法函數中的可修改宏值;

(2)聲明定義的濾波算法函數;

3、源文件:

(1)定義冒泡排序功能函數;

(2)定義濾波算法功能函數。

2、頭文件filter.h

#ifndef _FILTER_H_
#define _FILTER_H_


#define MAX_SENSOR_NUM 9   //使用濾波時的傳感器數量
#define MAX_DATA_NUM 9     //最大采樣點數量,即采樣窗口長度
#define WINDOW_DATA_NUM 5  //濾波窗口長度
//去除采樣窗口內最大最小值的數量,這里去除兩個最大和兩個最小 
#define REMOVE_MAXMIN_NUM ((MAX_DATA_NUM - WINDOW_DATA_NUM)/2)  


//extern double m_dataList[MAX_SENSOR_NUM][MAX_DATA_NUM];


//聲明定義的函數
double Filter_SlidingWindowAvg(int index, double data);


#endif

3、源文件filter.c

#include "Filter.h"


//定義各個傳感器的數據采樣點列表
double m_dataList[MAX_SENSOR_NUM][MAX_DATA_NUM] = {0};


//冒泡排序
void BubbleSort(int array[], int len)
{
    int temp;
    //外層循環控制排序的趟數,n個元素排序需要循環n-1次
    for(int i=0; i

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2551

    文章

    51099

    瀏覽量

    753570
  • 嵌入式
    +關注

    關注

    5082

    文章

    19126

    瀏覽量

    305194
  • 濾波器
    +關注

    關注

    161

    文章

    7817

    瀏覽量

    178126
  • C++
    C++
    +關注

    關注

    22

    文章

    2108

    瀏覽量

    73651
  • AD采樣
    +關注

    關注

    0

    文章

    23

    瀏覽量

    15989
收藏 人收藏

    評論

    相關推薦

    梳狀濾波器以及積分梳狀濾波器的FPGA實現

    作者:lee 在實現多級CIC濾波器前我們先來了解滑動平均濾波器、微分、積分以及梳狀
    的頭像 發表于 11-21 09:57 ?5783次閱讀
    梳狀<b class='flag-5'>濾波器</b>以及積分梳狀<b class='flag-5'>濾波器</b>的FPGA<b class='flag-5'>實現</b>

    基于FPGA的多級CIC濾波器原理

    實現多級CIC濾波器前我們先來了解滑動平均濾波器、微分、積分以及梳狀
    的頭像 發表于 12-03 11:55 ?5840次閱讀
    基于FPGA的多級CIC<b class='flag-5'>濾波器</b>原理

    數字濾波器的設計和實現

    濾波器設計是一個創建滿足指定濾波要求的濾波器參數的過程。濾波器實現包括濾波器結構選擇和
    的頭像 發表于 10-31 10:38 ?1586次閱讀
    數字<b class='flag-5'>濾波器</b>的設計和<b class='flag-5'>實現</b>

    3*3窗口生成模塊,用于生成濾波滑動窗口,得到窗口內的所有元素數據

    誰有用Verilog寫的3*3的模塊代碼,3*3窗口生成模塊,用于生成濾波滑動窗口,得到窗口內的所有元素數據。可否分享一下,謝謝。誰有代碼
    發表于 08-24 20:06

    有源濾波器中數字低通濾波器的設計及其DSP實現

    有源濾波器中數字低通濾波器的設計及其DSP實現摘要:介紹了基于瞬時無功功率理論的ip iq 諧波檢測方法及對低通濾波器的要求,分析討論了數字低通濾波
    發表于 05-13 17:19 ?90次下載

    滑動濾波器型譜分析在極窄帶濾波中的應用

    【摘 要】滑動濾波器型譜分析是通過短時傅立葉變換來進行實時譜分析的,本文詳細分析了其用作濾波器時的頻域特性。給出了極窄帶濾波器的具體
    發表于 05-22 20:46 ?1199次閱讀
    <b class='flag-5'>滑動</b><b class='flag-5'>濾波器</b>型譜分析<b class='flag-5'>器</b>在極窄帶<b class='flag-5'>濾波</b>中的應用

    詳細解析濾波器的定義,濾波器的特性,濾波器的工作原理,濾波器的分類,濾波器的典型電路原理圖

    濾波器的基礎是諧振電路,只要能構成諧振電路組合就可實現濾波器濾波器有4種基本原型,即低通濾波器、帶通
    發表于 05-03 16:20 ?1.8w次閱讀
    詳細解析<b class='flag-5'>濾波器</b>的定義,<b class='flag-5'>濾波器</b>的特性,<b class='flag-5'>濾波器</b>的工作原理,<b class='flag-5'>濾波器</b>的分類,<b class='flag-5'>濾波器</b>的典型電路原理圖

    通過滑動平均濾波器解決數控系統加減速控制的跳變問題

    本文通過在直線加減規劃之后,通過滑動平均濾波器來解決加速度的跳變問題,在不改變原有程序結構的情況下,實現了和S形曲線等效的加減速效果。
    的頭像 發表于 04-29 08:30 ?4767次閱讀
    通過<b class='flag-5'>滑動</b>平均<b class='flag-5'>濾波器</b>解決數控系統加減速控制的跳變問題

    采用FPGA實現多級CIC濾波器的四倍抽取一

    實現多級CIC濾波器前我們先來了解滑動平均濾波器、微分、積分以及梳狀
    發表于 06-22 10:35 ?2994次閱讀
    采用FPGA<b class='flag-5'>實現</b>多級CIC<b class='flag-5'>濾波器</b>的四倍抽取一

    高斯濾波器的原理和實現

    高斯濾波器是一種線性濾波器,能夠有效的抑制噪聲,平滑圖像。其作用原理和均值濾波器類似,都是取濾波器窗口內的像素的均值作為輸出。
    發表于 09-01 11:09 ?8761次閱讀
    高斯<b class='flag-5'>濾波器</b>的原理和<b class='flag-5'>實現</b>

    空間濾波器matlab實現

    空間濾波器的調整取決于濾波器的類型,比如均值濾波器可以調整濾波器的大小,中值濾波器可以調整濾波器
    發表于 02-16 09:40 ?908次閱讀
    空間<b class='flag-5'>濾波器</b>matlab<b class='flag-5'>實現</b>

    高通濾波器和低通濾波器的關系

    高通濾波器和低通濾波器是互補的,它們可以組合使用,從而實現更復雜的濾波功能。例如,可以將高通濾波器和低通
    發表于 02-17 17:47 ?4949次閱讀

    腔體濾波器和介質濾波器的區別

    腔體濾波器和介質濾波器都是常見的微波濾波器,它們的主要區別在于工作原理和實現方式。
    發表于 02-27 11:44 ?3937次閱讀

    滑動窗口算法技巧

    說起滑動窗口算法,很多讀者都會頭疼。這個算法技巧的思路非常簡單,就是維護一個窗口,不斷滑動,然后更新答案么。LeetCode 上有起碼 10 道運用
    的頭像 發表于 04-19 10:55 ?907次閱讀
    <b class='flag-5'>滑動</b><b class='flag-5'>窗口</b>算法技巧

    emi濾波器是什么濾波器

    會對電子設備的正常工作產生影響,甚至導致設備損壞。因此,EMI濾波器在電子設備中具有非常重要的作用。 EMI濾波器的原理 EMI濾波器的基本原理是利用濾波器對電磁波進行選擇性傳輸或阻斷
    的頭像 發表于 08-25 15:59 ?1046次閱讀
    主站蜘蛛池模板: 国产一区二区影院| 午夜影院欧美| 女色窝人体色77777| 中文字幕一二三四区| 天堂资源在线观看| 国产乱码免费卡1卡二卡3卡四| 欧美黑人黄色片| 美女黄网站人色视频免费国产| 日本黄色片在线观看| 一级免费黄色片| xxxx性欧美高清| 色www永久免费视频| 一区二区午夜| 亚洲一区二区三区高清| 日韩精品你懂的在线播放| 一级特色黄大片| 亚洲黄网免费| 女人张开腿双腿让男人桶| 欧美性猛片xxxxⅹ免费| 很黄很污的视频网站| 精品xxxxxbbbb欧美中文| 加勒比黑人喝羽月希奶水| 亚洲人成网站在线在线| 菲菲国产在线观看| 酒色1314| 全黄h全肉边做边吃奶在线观看| 天天干天天操天天爱| 韩国美女丝袜一区二区| 国产手机在线| 激情六月丁香婷婷| 欧美日韩国产乱了伦| 久久人人爽爽爽人久久久| 亚洲成a人片在线观看中| 99色综合| 黄到让你下面湿的视频| 国产欧美亚洲精品第二区首页 | 黄色网址有那些| 5g影院午夜伴侣| 日本三级免费观看| 女bbbbxxxx毛片视频| 婷婷午夜影院|