日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年08月01日(星期五)

2019年08月01日 | STM32實戰(zhàn)七 數(shù)字濾波

發(fā)布者:火星叔叔 來源: eefocus關(guān)鍵字:STM32  實戰(zhàn)  數(shù)字濾波 手機看文章 掃描二維碼
隨時隨地手機看文章

數(shù)字濾波是數(shù)據(jù)處理是常用、靈活、有效的方法。前面的按鍵程序已經(jīng)用到了濾波,屬于開關(guān)量濾波,這里要討論的是模擬量濾波程序,包括最常用的兩種方法,中值濾波和平均值濾波。


中值濾波的原理是,每次取最近幾個數(shù)的中間值作為輸出數(shù)據(jù),每個波形的最高和最低幾個數(shù)被濾掉,優(yōu)點是基本保留原有數(shù)據(jù),能有效抑制大幅值低頻尖峰干擾,俗稱椒鹽噪聲。


平均值濾波,就是對最近一些數(shù)求平均,是最常用最簡單的方法,對高頻低幅值隨機噪聲有效,缺點是會損失原始數(shù)據(jù)中的高頻分量,對高幅值干擾會擴大影響。下面的程序中應(yīng)用了移位平均算法,效率高,且不受求平均的數(shù)據(jù)數(shù)目大小的影響。兩種濾波方式都有一定延時。


AverageFilter.h


#ifndef __AVERAGEFILTER__

#define __AVERAGEFILTER__

 

extern "C" { // 兼容C,按C語言編譯,Keil5中的包含文件已經(jīng)加入了C++兼容,不用再加這一段

#pragma diag_remark 368 //消除 warning:  #368-D: class "" defines no constructor to initialize the following:

 

#include "stm32f10x.h"

 

#pragma diag_default 368 // 恢復(fù)368號警告

}

 

#define AF_MAXWINDOW 150 // 最大窗寬150

 

class AverageFilter

{

// Construction

public:

AverageFilter( s32 ini, u16 nNum );

 

// Properties

public:

u16 m_number; // 指定平均的個數(shù),最多150

u16 m_seek; // 游標(biāo)

s32 m_summation; // 指定數(shù)組的總和

s32 m_input[AF_MAXWINDOW]; // 數(shù)據(jù)緩存

 

private:

 

// Methods

public:

s32 filter( s32 vi ); // 濾波算法

// Overwrite

public:

};

 

#endif

AverageFilter.cpp


/**

  ******************************************************************************

  * @file AverageFilter.cpp

  * @author Mr. Hu

  * @version V1.0.0 STM32F103VET6

  * @date 06/06/2019

  * @brief 均值濾波

  ******************************************************************************

  * @remarks

  * 采用移位平均法,大大提高效率,不受數(shù)據(jù)數(shù)量的影響

  */ 

 

/* Includes ------------------------------------------------------------------*/

extern "C" { // 兼容C,按C語言編譯,Keil5中的包含文件已經(jīng)加入了C++兼容,不用再加這一段

#pragma diag_remark 368 //消除 warning:  #368-D: class "" defines no constructor to initialize the following:

 

#pragma diag_default 368 // 恢復(fù)368號警告

}

 

#include "AverageFilter.h"

 

/**

  * @date 06/06/2019

  * @brief  均值濾波

  * @param ini 初始值,避免前幾個輸出數(shù)偏差太大

  * @param nNum 濾波數(shù)量,最大150,越大效果越好,但延時較多

  * @retval None

*/

AverageFilter::AverageFilter( s32 ini, u16 nNum )

: m_number(nNum)

, m_seek(0)

, m_summation(0)

{

if( m_number > AF_MAXWINDOW ) // 控制在數(shù)組范圍內(nèi)

m_number = AF_MAXWINDOW;

// 初始化數(shù)組

for( int i = 0; i < AF_MAXWINDOW; i++ )

{

m_input[i] = ini;

}

// 初始化總和

m_summation = ini * m_number;

}

 

/**

  * @date 06/06/2019

  * @brief  濾波算法,采用移位算法,減去第一個,加上最后一個。

  * @param vi 輸入數(shù)據(jù)

  * @retval 濾波后輸出數(shù)據(jù)

*/

s32 AverageFilter::filter( s32 vi )

{

m_summation += ( vi - m_input[m_seek] ); // 總和中減去最早的數(shù),加上新數(shù)

// 用循環(huán)方法記錄輸入數(shù)據(jù)

assert_param(m_number <= AF_MAXWINDOW);

m_input[m_seek] = vi;

if (++m_seek >= m_number)

m_seek = 0;

// 返回平均值

return m_summation / m_number;

}

MedianFilter.h


#ifndef __MEDIANFILTER__

#define __MEDIANFILTER__

 

extern "C" { // 兼容C,按C語言編譯,Keil5中的包含文件已經(jīng)加入了C++兼容,不用再加這一段

#pragma diag_remark 368 //消除 warning:  #368-D: class "" defines no constructor to initialize the following:

 

#include "stm32f10x.h"

 

#pragma diag_default 368 // 恢復(fù)368號警告

}

 

#define DF_MAXWINDOW 21 // 最大窗寬,奇數(shù),太大了反而不好

 

class MedianFilter

{

// Construction

public:

MedianFilter( s32 ini, u16 nNum );

 

// Properties

public:

u16 m_dfMedian; // 半窗寬,最大10

u16 m_seek; // 輸入數(shù)據(jù)指針

s32 m_input[DF_MAXWINDOW]; // 輸入數(shù)據(jù),循環(huán)使用,不用移位,提高效率

s32 m_sort[DF_MAXWINDOW]; // 排序數(shù)據(jù),最近輸入的數(shù)據(jù)排序,取中間值輸出

 

private:

 

// Methods

public:

s32 filter( s32 vi ); // 濾波算法

// Overwrite

public:

};

 

#endif

MedianFilter.cpp


/**

  ******************************************************************************

  * @file MedianFilter.cpp

  * @author Mr. Hu

  * @version V1.0.0 STM32F103VET6

  * @date 06/05/2019

  * @brief 中值濾波

  ******************************************************************************

  * @remarks

  * 中值濾波的原理是,每次取最近幾個數(shù)的中間值作為輸出數(shù)據(jù),每個波形的最高和最低

  * 幾個數(shù)被濾掉,優(yōu)點是基本保留原有數(shù)據(jù),相當(dāng)于去掉幾個最高數(shù),去掉幾個最低數(shù),能有

  * 效抑制大幅值低頻尖峰干擾,俗稱椒鹽噪聲。

  */ 

 

/* Includes ------------------------------------------------------------------*/

extern "C" { // 兼容C,按C語言編譯,Keil5中的包含文件已經(jīng)加入了C++兼容,不用再加這一段

#pragma diag_remark 368 //消除 warning:  #368-D: class "" defines no constructor to initialize the following:

 

#pragma diag_default 368 // 恢復(fù)368號警告

}

 

#include "MedianFilter.h"

 

/**

  * @date 06/05/2019

  * @brief  中值濾波

  * @param ini 初始值,前幾個輸出數(shù)都是這個值

  * @param nNum 濾波數(shù),最大10,越大效果越好,但延時較多

  * @retval None

*/

MedianFilter::MedianFilter( s32 ini, u16 nNum )

: m_dfMedian(nNum)

, m_seek(0)

{

if( m_dfMedian > (DF_MAXWINDOW - 1) / 2 ) // 中值限制在數(shù)組范圍內(nèi)

m_dfMedian = (DF_MAXWINDOW - 1) / 2;

// 初始化兩個數(shù)組

for( int i = 0; i < DF_MAXWINDOW; i++ )

{

m_input[i] = ini;

m_sort[i] = ini;

}

}

 

/**

  * @date 06/05/2019

  * @brief  濾波算法

  * @param vi 輸入數(shù)據(jù)

  * @retval 濾波后輸出數(shù)據(jù)

*/

s32 MedianFilter::filter( s32 vi )

{

u8 w1 = m_dfMedian * 2; // 窗寬-1

assert_param(w1 < DF_MAXWINDOW);

// 計算將要移除的值在排序數(shù)組中的位置

u8 j = 0;

for (; j <= w1 && m_input[m_seek] != m_sort[j]; j++);

 

// 移除最早的數(shù)據(jù)并把新數(shù)據(jù)插入到適當(dāng)?shù)奈恢?p> // 如果新數(shù)據(jù)在較小半段,數(shù)據(jù)后移,否則數(shù)據(jù)前移,實現(xiàn)排序

// 只處理大于和小于情況,等于時不動

if (vi < m_input[m_seek])

{ // 向前移

while (j > 0 && vi < m_sort[j-1])

{

j--;

m_sort[j + 1] = m_sort[j];

}

}

else if (vi > m_input[m_seek])

{ // 向后移

while (j < w1 && vi > m_sort[j+1])

{

j++;

m_sort[j - 1] = m_sort[j];

}

}

 

// 加入新值

assert_param(j >= 0 && j < w);

m_sort[j] = vi;

 

// 用循環(huán)方法記錄輸入數(shù)據(jù),高效

m_input[m_seek] = vi;

if (++m_seek > w1)

m_seek = 0;

 

// 返回中間值

return m_sort[m_dfMedian];

}

關(guān)鍵字:STM32  實戰(zhàn)  數(shù)字濾波 引用地址:STM32實戰(zhàn)七 數(shù)字濾波

上一篇:STM32實戰(zhàn)六 PWM加移相正交
下一篇:STM32實戰(zhàn)八 DAC/ADC

推薦閱讀

熱辣滾燙的夏天讓我們酷熱難耐,上班的路上連喘氣兒都是熱的,十分羨慕出門有車的筒子們。而身邊那些每天開車上下班的朋友似乎也沒好到哪兒去,太陽無情的炙烤著他們的愛車,簡直像是進入了火爐一般,外烤內(nèi)蒸,分分鐘暴脾氣,就算開著天窗欣賞美景也無濟于事。如果在停車的時候通過天窗收集的太陽能量來驅(qū)動車內(nèi)的通風(fēng)系統(tǒng)持續(xù)運行,這樣打開車門坐在座位...
關(guān)于STM32F0系列的啟動配置,有人說有點看不太懂,貌似有兩套啟動方式,又是腳又是選項位的。其實,它跟其它STM32 系列一樣也是有三種啟動模式,只是配置方式上有其特色。 它有兩種配置方式,第一種是利用BOOT0物理腳和Nboot1、Boot_Sel選項位來確定啟動模式;第二種只使用Boot_Sel、Nboot1 、Nboot0 三個選項位來確定啟動模式,完全省卻了物理腳,多出...
彭博報道稱,預(yù)見到美國對香港的制裁將使貿(mào)易更加困難,中國計算機芯片進口商正在加大香港渠道的設(shè)備采購。今年上半年,通過香港轉(zhuǎn)往內(nèi)地的半導(dǎo)體再出口量與2019年同期相比增長了11%,幾乎是芯片總購買量增長的兩倍,僅6月份,轉(zhuǎn)口貿(mào)易就增長了21%。數(shù)據(jù)顯示,從香港進口的芯片平局占中國芯片進口總量的38%以上。此前美國宣布撤銷香港的特殊貿(mào)易地位,以限...
7月30日,士蘭微公告顯示,公司于2021年7月30日收到中國證監(jiān)會核發(fā)的《關(guān)于核準杭州士蘭微電子股份有限公司向國家集成電路產(chǎn)業(yè)投資基金股份有限公司發(fā)行股份購買資產(chǎn)并募集配套資金的批復(fù)》。具體為:獲準向國家集成電路產(chǎn)業(yè)投資基金股份有限公司發(fā)行8235萬股股份購買相關(guān)資產(chǎn),發(fā)行股份募集配套資金不超過11.22億元。該批復(fù)自下發(fā)之日起12個月內(nèi)有效。此...

史海拾趣

問答坊 | AI 解惑

請大家隨時關(guān)注,關(guān)于小車蹺蹺板分析馬上上線!

本帖最后由 paulhyde 于 2014-9-15 09:18 編輯 大家好!請大家再等待一會兒,2007年電子設(shè)計大賽F題(小車蹺蹺板)分析馬上就要整理上線了!!  …

查看全部問答∨

電賽小車大家都用什么電源

本帖最后由 paulhyde 于 2014-9-15 09:26 編輯 電賽小車大家都用什么樣的電源 貌似一般的電池跑一下就不行了 不知道大家都用什么樣的  …

查看全部問答∨

看了稻花香米,我才知道,我離中國的人才標(biāo)準遠了.

看了稻花香米,我才知道,我離中國的人才標(biāo)準遠了. 100W/天啊,這賺的比我們多的多.…

查看全部問答∨

ADS7846

小弟在寫一個觸摸屏驅(qū)動,在ADS上調(diào)試遇到了一些問題。 #define X_LOCATION_CMD  0xd0 #define Y_LOCATION_CMD  0x90 ……………………省略若干…………………………………… /****************************************** ...…

查看全部問答∨

防盜報警系統(tǒng)斷線呼救無線網(wǎng)研究與應(yīng)用

針對借助固定電話通信的防盜報警器在話線遭到破壞情況下,無法將警情送達接警中心或用戶手機的現(xiàn)象,提出一種電路簡單、通信可靠、占用信道時間短、成本低廉的話線斷線無線呼救系統(tǒng)。給出完整的硬件電路,其中包括話線斷線與摘機檢測電路,ASK調(diào)制 ...…

查看全部問答∨

求救!在LM3s8962使用LwIP建立TCP連接時遇到的問題

    無操作系統(tǒng),通過以下程序在keil中建立TCP客戶端時,總是會在 tcp_connect()函數(shù)里出現(xiàn)問題(FaultISR),但在IAR中式可以的,為什么?lwipopt.h配置是一樣的,只不過在IAR中使用的是LwIP1.3.0而在Keil中使用的是LwIP1.3.1.?,F(xiàn) ...…

查看全部問答∨

2010參加TI杯電賽的湖北老鄉(xiāng)進群啊?。?!

本帖最后由 paulhyde 于 2014-9-15 08:58 編輯 群號:72132835  …

查看全部問答∨

求鋰電池給3.3V供電的解決方案,便宜通用的穩(wěn)壓塊

求鋰電池給3.3V供電的解決方案,電流要求不大,給單片機及少數(shù)功耗不大的外設(shè)供電,但是要求電源芯片本身功耗要低!還要便宜通用好買。 另外對于鋰電池電壓降到接近3.3V甚至3.3v以下,一般怎么處理?認為已經(jīng)欠壓(實際對鋰電池本身來說還沒有吧? ...…

查看全部問答∨
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved