【算法】指數滑動濾波器

指數滑動濾波器

  • 作用
  • 原理
  • 特點
  • 公式
  • 代碼
    • 優化升級

作用

首先這個濾波器能夠將一些突變的信號對系統的影響降低,能夠平滑輸入信號,濾除噪聲,減少測量數據的瞬間波動和干擾,就是實現輸入信號不能不變,數值不會突然變大,比如你根據編碼器的值控制呼吸燈的亮度,如果編碼器突然拉的值很大,呼吸燈不會立刻變得很亮,會慢慢亮。

原理

原理就是不完全采樣當前的輸入信號,而是將輸入信號的值和上一刻濾波后的輸入信號做一個權重劃分,然后得到最終濾波后的信號值,比如前一刻濾波后是10V,當前采樣的電壓是5V,假如設置前一刻的權重是90%,當前采樣的信號權重是10%,則將100.9+50.1 = 9.5V,這就是濾波后的結果,不會說因為10V掉到5V,我對應的輸出也立刻改變,而是先按照9.5V對應輸出,如果后面保持5V,那么根據權重劃分輸出信號也會慢慢降低的,只是響應沒那么快。

特點

特點就是響應沒那么快,但是輸出信號會平滑,所以這個權重的設定也非常的重要,如果歷史值(也就是上一刻的濾波結果)占的權重比較大,就會導致響應非常的緩慢,如果歷史值的權重比較小,就會導致信號平滑的效果不是那么好。

所以需要注意系統剛開始運行的時候,輸出信號也是要緩慢變化才能達到目標值,這是因為系統第一次濾波時上一刻的濾波結果為0,如果想要在系統剛開始運行時就達到目標值附近在開始濾波,可以在進行第一次濾波時給上一刻濾波結果賦當前輸入值,讓系統更快速達到目標值附件。

公式

y[n]=a×x[n]+(1?a)×y[n?1]y[n] = a \times x[n] + (1 - a) \times y[n-1]y[n]=a×x[n]+(1?a)×y[n?1]

  • x[n] 是最新的測量值
  • y[n] 是濾波后的輸出值
  • a 是濾波器“記憶權重”,越小說明當前輸入影響越小,濾波越平滑(但響應慢)

代碼

下面給出一段Python的案例代碼:

import numpy as npdef exponential_filter(input_signal, a):"""單一輸入信號的指數滑動濾波:param input_signal: 輸入信號列表:param a: 濾波系數(本次輸入權重),0 < a < 1:return: 濾波后的輸出信號列表"""output_signal = [input_signal[0]]  # 以第一個輸入作為初始濾波值for n in range(1, len(input_signal)):y_prev = output_signal[-1]x_curr = input_signal[n]y_curr = a * x_curr + (1 - a) * y_prevoutput_signal.append(y_curr)return output_signal# 模擬你的濾波系數
a_vdc = 1 / 16  # vdc權重# 示例輸入信號,替換成你的采樣數據
np.random.seed(0)
input_vdc = 17 + 2 * np.random.randn(100)  # 模擬帶噪聲電壓信號filtered_vdc = exponential_filter(input_vdc, a_vdc)# 輸出前10個濾波值查看
for i in range(10):print(f"原始vdc: {input_vdc[i]:.3f}, 濾波vdc: {filtered_vdc[i]:.3f}")

結果如下:

原始vdc: 20.528, 濾波vdc: 20.528
原始vdc: 17.800, 濾波vdc: 20.358
原始vdc: 18.957, 濾波vdc: 20.270
原始vdc: 21.482, 濾波vdc: 20.346
原始vdc: 20.735, 濾波vdc: 20.370
原始vdc: 15.045, 濾波vdc: 20.037
原始vdc: 18.900, 濾波vdc: 19.966
原始vdc: 16.697, 濾波vdc: 19.762
原始vdc: 16.794, 濾波vdc: 19.576
原始vdc: 17.821, 濾波vdc: 19.467

這里可以看出濾波后的值并不會由于原始vdc的值的變化而發生比較大的突變,接下來給出在單片機中C語言的實現代碼

u16 DataFilter(u16 dat) {static u16 s_u16LastDat;	// 記錄歷史值float a = 0.9;				// 歷史值權重u16 result;// 進行指數濾波計算result = a * s_u16LastDat + (1 - a) * dat;// 記錄當前濾波結果用于下次計算s_u16LastDat = result;return result;
}

優化升級

雖然這樣寫可以,但是可以考慮一下單片機的性能問題,對單片機來說浮點運算是非常耗時的,因為有些單片機沒有浮點單元(大部分都沒有把),所以接下來對這段代碼進行優化升級:

u16 DataFilter(u16 dat) {static u16 s_u16LastDat;	// 記錄歷史值u16 result;// 進行指數濾波計算,歷史權重比為0.9375result = (dat >> 4) + ((s_u16LastDat * 15) >> 4);// 記錄當前濾波結果用于下次計算s_u16LastDat = result;return result;
}

通過右移的方式,把乘除運算變成位移能夠大幅提高運算速度,這里是如何設置權重的呢,>>4相當于?16,所以系數a = 1/16 = 0.0625,而*15>>4相當于?15在?16,系數a=15/16 = 0.9375;最終的權重和還是為1的,只是將權重剛好設置成2的倍數,就能夠通過位移完成計算。

最后需要提醒一下這個權重系數的設置關系整個系統的性能,需要根據實際情況選擇合適的權重比。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93917.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93917.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93917.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32F4—電源管理器

Power supply schemesPower supply supervisorInternal reset ON有PDR_ON pin的MCU&#xff0c;PDR_ON pin被拉高的時候電源監視器被使能。沒有PDR_ON pin的MCU默認一直使能。內部集成了power-on reset (POR) / power-down reset (PDR)POR&#xff08;上電復位&#xff09;&…

MySQL鎖的分類 MVCC和S/X鎖的互補關系

各位看官&#xff0c;大家早安午安晚安呀~~~如果您覺得這篇文章對您有幫助的話歡迎您一鍵三連&#xff0c;小編盡全力做到更好 歡迎您分享給更多人哦今天我們來學習&#xff1a;MySQL鎖的分類 && MVCC和S/X鎖的互補關系1.鎖分類1.按鎖粒度分類&#xff1a;全局鎖&#…

第五屆智能通信與計算國際學術會議(ICICC 2025)

重要信息 官網&#xff1a;www.ic-icc.org 時間&#xff1a;2025年8月15-16日 地點&#xff1a;中國 南京 第五屆智能通信與計算國際學術會議(ICICC 2025&#xff09;定于2025年8月15-16日在中國 南京舉行。隨著信息技術的飛速發展&#xff0c;智能通信與計算領域的研究與…

基于C#和NModbus4庫實現的Modbus RTU串口通信

基于C#和NModbus4庫實現的Modbus RTU串口通信&#xff0c;包含完整的界面設計和功能實現&#xff1a;一、項目依賴配置NuGet包安裝&#xff1a; Install-Package NModbus4 Install-Package System.IO.Ports窗體控件布局&#xff1a; <!-- 基礎控件配置 --> <ComboBox …

想要批量提取視頻背景音樂?FFmpeg 和轉換器都安排上

你是否遇到過這樣的情況&#xff1f;看到一個超贊的短視頻&#xff0c;里面的背景音樂特別好聽&#xff0c;想單獨保存下來當手機鈴聲或收藏&#xff0c;卻不知道怎么把音樂從視頻里“摳”出來&#xff1f;別擔心&#xff01;今天就為大家分享兩種簡單易行的方法&#xff0c;無…

為什么MCP協議是AI集成的未來API

一、企業AI應用的核心挑戰與架構演進 當前企業AI落地面臨三大核心痛點&#xff1a; ??系統集成困境??&#xff1a;需對接企業內部業務系統&#xff08;CRM/ERP等&#xff09;??異構環境兼容??&#xff1a;需整合第三方AI服務與傳統API??數據孤島突破??&#xff1…

Apache Tomcat樣例目錄session操縱漏洞解讀

【漏洞名稱】&#xff1a;Apache Tomcat樣例目錄session操縱漏洞 &#xff08;Apache Tomcat示例目錄漏洞&#xff09;【漏洞等級】&#xff1a;中危&#xff0c;5.9分。【漏洞描述】Apache Tomcat默認安裝頁面中存在examples樣例目錄&#xff0c;里面存放著Servlets、JSP、Web…

Go語言實戰案例:實現HTTP客戶端請求并解析響應

本文是 Go 網絡與并發實戰系列的第2篇&#xff0c;聚焦于如何使用 Go 實現一個 HTTP 客戶端&#xff0c;完成請求發送、響應解析、錯誤處理、Header與Body提取等完整流程。一、前言&#xff1a;為什么學習HTTP客戶端&#xff1f;在日常開發中&#xff0c;無論是調用 RESTful AP…

java的冒泡排序算法

冒泡排序是一種簡單的排序算法&#xff0c;通過重復遍歷待排序序列&#xff0c;比較相鄰元素并在必要時交換位置&#xff0c;最終實現排序。以下是Java實現的詳細說明&#xff1a;核心原理?比較相鄰元素?&#xff1a;從序列第一個元素開始&#xff0c;逐對比較相鄰元素的大小…

玻爾茲曼分布與玻爾茲曼探索

目錄 玻爾茲曼分布定義 玻爾茲曼探索&#xff1a; 1. 玻爾茲曼分布公式 2. 溫度 T 如何影響采樣結果&#xff1f; (1) 高溫 (T→∞)&#xff1a; (2) 低溫 (T→0)&#xff1a; (3) 中等溫度 (T∈(0,∞))&#xff1a; 3. 直觀示例 4. 實際應用中的意義 5.核心誤區澄清…

【工具】jsDelivr CDN完全指南:免費高速的開源項目CDN服務

前言 在現代Web開發中&#xff0c;內容分發網絡&#xff08;CDN&#xff09;已經成為提升網站性能的重要工具。jsDelivr作為一個免費、快速、可靠的開源CDN服務&#xff0c;為全球開發者提供了優質的靜態資源分發服務。無論是加速GitHub倉庫訪問、分發npm包&#xff0c;還是為…

OSPF筆記整理

一、OSPF 基礎特性1. 技術背景&#xff08;對比 RIP&#xff09;RIP 的缺陷&#xff1a;最大跳數 15 限制、周期性發送全路由表&#xff08;占用帶寬&#xff09;、收斂慢、以跳數為度量值、易產生環路、30 秒更新間隔。OSPF 的改進&#xff1a;無跳數限制&#xff08;支持大規…

sqLite 數據庫 (3):以編程方式使用 sqLite,4 個函數,以及 sqLite 移植,合并編譯

&#xff08;22&#xff09; 只有四個函數 &#xff1a;以及 &#xff1a;&#xff08;23&#xff09;以及 &#xff1a;&#xff08;24&#xff09;&#xff08;25&#xff09; sqLite 的源代碼很少 &#xff1a;&#xff08;26&#xff09;&#xff08;27&#xff09;&#x…

Nginx跨域問題與 MIME 類型錯誤深度排錯指南:解決 MIME type of “application/octet-stream“ 報錯

前言&#xff1a;在 Web 開發中&#xff0c;跨域請求和資源加載錯誤是前端工程師和運維人員經常遇到的棘手問題。本文將詳細解析 Nginx 環境下跨域配置的多種方案、gzip 類型參數的優化要點&#xff0c;以及.mjs 文件 MIME 類型錯誤的解決方法&#xff0c;并結合排錯思路和原理…

什么是大端?什么是小端?如何驗證?

什么是大端&#xff1f;什么是小端&#xff1f;如何驗證&#xff1f; 在計算機系統中&#xff0c;大端&#xff08;Big-Endian&#xff09; 和小端&#xff08;Little-Endian&#xff09; 是兩種不同的字節序&#xff08;Byte Order&#xff09;&#xff0c;用于描述多字節數據…

JavaScript 語句和函數

1. JavaScript 語句 1&#xff09;if語句 if (condition) statement1 else statement2這里的條件&#xff08;condition&#xff09;可以是任何表達式&#xff0c;并且求值結果不一定是布爾值。 ECMAScript會自動調用Boolean()函數將這個表達式的值轉換為布爾值。 如果條件…

代碼隨想錄刷題Day22

替換數字 這道題比較簡單&#xff0c;遇到字母就copy到新的字符數組&#xff0c;如果是遇到數字&#xff0c;就在新字符數組中加入number的字符串。代碼如下&#xff1a; #include<stdio.h> #include<ctype.h> #include<string.h> #define Max 1000000 int…

邏輯回歸參數調優實戰指南

邏輯回歸的參數調節參數展示 LogisticRegression(penaltyl2,dualFalse,tol1e4,C1.0,fit_interceptTrue,intercept_scaling1,class_weightNone,random_stateNone,solverliblinear,max_iter100,multi_classovr,verbose0,warm_startFalse, n_jobs1)在前面的學習中&#xff0c;我們…

cocosCreator2.4 googlePlay登錄升級、API 35、16KB內存頁面的支持

環境&#xff1a;我這里是cocosCreator 2.4.12 導出的android 工程 登錄升級 后臺收到的google 的提醒&#xff1a; 之前是通過implementation com.google.android.gms:play-services-auth:20.0.0 來獲取玩家 uid 和 郵箱&#xff0c;然后發送到我們的服務器獲取賬號。 升級…

unity avpro實現互動影游關鍵問題

創建視頻播放器?在Hierarchy面板中右鍵創建&#xff1a;Video > AVPro Video - MediaPlayer創建后會生成一個MediaPlayer對象&#xff0c;用于控制視頻播放添加視頻資源將視頻文件放入項目的StreamingAssets文件夾下在MediaPlayer組件的設置中選擇要播放的視頻文件在UI上顯…