今天在一本信號分析的書上看到 Kolmogorov–Zurbenko filter 這種濾波器, 好奇下去查了一些資料, 但除了維基外似乎沒有更詳細的說明, 節譯如下 :
此濾波器係前蘇聯數學家 A.N. Kolmogorov 與 Igor Zurbenko 所發展, 兩人都是莫斯科國立大學的數學教授與機率專家. KZ 濾波器的構想源自於他們所做的太平洋亂流 (turbulence) 研究, 他們發現標準的快速傅立葉演算法會受到雜訊與不平穩洋流的干擾而得到不正確結果, 於是發展了 KZ 濾波器演算法.
KZ 濾波器是強固 (robust) 而幾近是最佳化 (optimal) 的演算法, 因為它採用了簡單的移動平均 (moving avaerage, MA) 算法, 在有缺漏資料的環境下, 不論是由於空間稀疏造成的資料缺漏以及有缺漏的多維時間序列, 其處理效能都非常好, 資料缺漏對 KZ 濾波器轉移函數的影響非常微小.
KZ 濾波器是一個具有平滑效果的低通濾波器, 其演算法主要是利用 m 個奇數長度的移動平均濾波器進行 k 次迭代, 所以它基本上就是一群重複的 MA 濾波器, 由於 KZ 濾波器對這兩個參數有清楚的定義, 所以它很容易被其他不同領域的專家應用於各種場合.
KZ 濾波器已經實作於一些軟體平台, 例如 R 語言提供了標準的 kz() 與具有自適應特徵的 kza() 等函數可讓使用者方便呼叫, 參考 :
Python 的實作參考 :
只要用 pandas 就可以簡單實作出來, 不過對於自適應 KZ 濾波器而言, 直接用 Python 迴圈實作效能會很差, 底層應該要用 C 實作.
KZ 濾波器也被實作在 Arduino 上, 參考下面這個稱為 Microsmooth 的函式庫, 它提供了多個信號平滑化的函數 :
目前還沒時間學, 先記錄一下.
沒有留言:
張貼留言