1. 程式人生 > >濾波器設計(3):維納(Wiener)濾波器的設計

濾波器設計(3):維納(Wiener)濾波器的設計

引言

通訊領域中,當然完全不止通訊領域,一個很常見的需求就是,從含有噪聲,或是已經畸變的訊號中,提取出或恢復出原始的、有用的訊號。怎麼做?可以用濾波器(Filter)。濾波器的變數(輸入)是訊號,訊號又是時間or空間or時間空間or…的函式。於是,函式的函式——泛函。至今,我沒有學過,唉……一定要抽時間學一下“泛函分析”……%>_<%關於濾波器的設計,在大學本科開設的“電路原理”、“類比電子技術基礎”、“訊號與系統”等課程中,或多或少要涉及一點,但好像基本上都是一些經典濾波器。比如LPF、HPF,……,IIR、FIR……前面的文章裡,有一些對IIR、FIR濾波器的回顧。對於濾波效果的評判標準有很多,這個問題沒有標準答案。客觀而言,均方誤差最小,均方離差(絕對誤差)最小等。主觀而言,看起來效果變好了?聽起來效果變好了?其實,就連聽起來效果變好了,這種話也是非常非常非常不嚴格的。比如,有些人就喜歡重低音的鼓點,有些人就是喜歡清晰的人聲。所以,實際效果還真的就是因人而異了。實際上(“實際上”,“事實上”的意思,就是提醒讀者注意,後面即將要出現重要的內容了!),在平均平方誤差(mean square error)的意義下,經典濾波器常常不能達到“最優”。
所以,更進一步,用現代濾波器做訊號處理。但是,通常,這是以“先要知道訊號的一些統計特性”為代價的。於是,維納(Wiener)濾波器,閃亮登場。其實,在學維納濾波器之前,應該先有一些隨機過程的基本概念。

維納濾波器簡介

以下摘自百度百科。維納濾波器(Wiener filter)是由數學家維納(Rorbert Wiener)提出的一種以最小平方為最優準則的線性濾波器。在一定的約束條件下,其輸出與一給定函式(通常稱為期望輸出)的差的平方達到最小,通過數學運算最終可變為一個託布利茲方程的求解問題。維納濾波器又被稱為最小二乘濾波器或最小平方濾波器,目前是基本的濾波方法之一。維納濾波是利用平穩隨機過程的相關特性和頻譜特性對混有噪聲的訊號進行濾波的方法,1942年美國科學家N.維納為解決對空射擊的控制問題所建立,是40年代線上性濾波理論方面所取得的最重要的成果。
更加詳細的資訊可參考百度百科的詞條維納濾波器。另外,維納濾波器應該是一個FIR濾波器。自適應濾波器(adaptive filter)基本框圖如下。自適應濾波器後面會講。跟自適應濾波器不同的地方就是,維納濾波器好像是沒有反饋的吧……所以維納濾波器的框圖,就是把下圖的反饋環路去掉,同時濾波器的係數不可變。自適應的是可以通過反饋回來的e進行係數調整。

x是濾波器的輸入,y是濾波器的輸出。輸出與一個參考訊號(期望訊號)d作差,得到誤差訊號e。

注意事項

剛開始接觸這一類濾波器的時候,我總是不知道這個參考訊號d是什麼情況。有些書上會把d說出期望訊號。我就在想,既然都能知道所期待的輸出訊號是什麼了,為什麼還要去濾波?這不簡直就是“脫了褲子放屁——多此一舉”嗎?我相信有很多人跟我一樣,初學的時候會覺得真的很奇怪。有些書根本就回避了這個至關重要的問題。我只能說,也許作者是真的很懂,以至於不知道我們這些初學者什麼不懂。好慘。其實,這裡面好像是有個“訓練”,或者叫“預先測試”的過程。我把它叫A階段,同時,把真正工作的階段叫B階段。在預先測試的過程中,要做的工作是去求濾波器的係數w;而一旦預先測試過程結束,濾波器真正開始工作了,其係數就不改變了。以我現在的認知水平,維納濾波器的邏輯是這樣的。1. 在預先測試的過程中,期望訊號d是可以知道的。x是可以獲取的。因此,可以求出濾波器的係數w。2. 在後來真正執行的過程中,就拿著這個w,去處理可以獲取的x。x可能是含噪訊號,可能是畸變訊號,等等。處理後,會輸出y。這就是處理過後的訊號,也許是濾除噪聲的,也許是通道均衡後的,也許是恢復過後的,等等。

一個例子

假設現在在一個很吵的環境中,要用話筒錄音,那不可避免會錄入噪聲。如何去除噪聲?除了用經典濾波器外呢,如果要求用維納濾波器呢?我個人的做法會是這樣。A. 預先測試過程1. 找一段所謂的乾淨的語音,作為d。假設就是在安靜的錄音棚裡錄下來的。先準備著。2. 播放乾淨的d,用話筒把它錄音,錄下來。因為有了噪聲,所以變成了含噪訊號x。我也拿到了。3. 用x和d,去計算濾波器係數w。B. 真正錄音階段1. 演員登場,真正的錄音開始了。這是能夠錄到含噪訊號x。2. 用A階段得到的w,去處理這時錄到的x。此時,應該說,輸出的y,就是降噪以後的訊號了。當然,感覺上,A階段所準備的乾淨語音,如果就是B階段中,真正要說話的那個人的聲音,按理說,效果可能會好一些。

基本原理

上面把例子都舉過了,現在再來說原理。詳細的原理和公式的推導可以找任何一本靠譜點的現代訊號處理、自適應濾波之類的書來參考。原理的話,就是希望在A階段,找一組濾波器係數w,讓濾波器的輸出y和期望訊號d之間的均方誤差最小。後來均方誤差是關於w的一個二次型,所謂的二次曲面,有唯一的極小值,同時也是最小值。然後就是一堆求偏導數,求最值。同時,令各個偏導導函式為0,求出駐點,也是極值點,也是最小值所在的自變數w所在的位置。利用隨機過程裡的一些式子,再假定什麼x寬平穩,再用相關函式的定義之類的一些東西,從而得到一個Wiener-Hoff方程。(Ax = b型別的非齊次線性方程組,此x非上文的x。單純是線性代數中的Ax=b那個x)方程中的A,是收集到的,待處理訊號x的自相關陣,也是一個Hermitian對稱陣,還是一個託普利茲(Toeplitz)矩陣。如果x是實訊號,那就是對稱矩陣。半正定,等等性質。方程中的x,是要求的維納濾波器的係數w。方程中的b,就是要求的期望訊號d和待處理訊號x之間的互相關陣。最後,算這個方程就是了。至於,w階數取多少,這個嘛,我反正目前只知道,“試”。trail and error。下面摘了一些資料過來。





擴充套件應用

維納濾波器,不僅可以用來降噪,也可以用來預測,還可以用來均衡。應用很廣泛的。後面會有維納濾波器的例項程式碼。今天就寫這麼多。

相關推薦

濾波器設計3Wiener濾波器設計

引言通訊領域中,當然完全不止通訊領域,一個很常見的需求就是,從含有噪聲,或是已經畸變的訊號中,提取出或恢復出原始的、有用的訊號。怎麼做?可以用濾波器(Filter)。濾波器的變數(輸入)是訊號,訊號又是時間or空間or時間空間or…的函式。於是,函式的函式——泛函。至今,我沒

音訊噪聲抑制2Wiener濾波器

之前的文章講了使用經典濾波器來抑制噪聲。裡面提到,“用經典濾波器抑制噪聲,非常簡單。如果噪聲的功率譜PSD和有用訊號功率譜PSD沒有重疊的話,那可以實現非常好的效果。但是,如果有重疊,去噪的效果就不是特別理想了。因為在復指數訊號空間裡面,沒辦法把有用訊號和噪聲訊號分離啊。”正

設計模式第3生成器模式Builder

一.生成器模式要解決的問題   生成器模式主要解決工廠方法模式和抽象工廠模式在所建立的物件包含大量的屬性時所面臨的問題: 當客戶端程式向工廠類傳遞大量引數時很容易發生錯誤,因為很多引數的型別有可能是相同的,並且也很難保證傳遞引數的順序。 在傳遞引數時有些引數是可選的,但是在工廠設計模式中,所有的

自適應濾波濾波器——FIR及IIR設計

作者:桂。 時間:2017-03-23  06:28:45  【讀書筆記02】 前言 仍然是西蒙.赫金的《自適應濾波器原理》第四版,距離上次看這本書已經過去半個月,要抓點緊了。本文主要包括:   1)何為維納濾波器(Wiener Filter);   2)Wiener濾波器的推導;

樹莓派3學習筆記77寸分辨率800 480顯示器配置

樹莓派、顯示器配置樹莓派3學習筆記(7):7寸(分辨率800 480)顯示器配置 樹莓派搭載分辨率為800X480的顯示器在顯示的時候可能會遇到無法全屏顯示的問題, 顯示器只有部分能夠顯示,有一部分是黑邊,對於這一種情況,我們只需進入系統的boot目錄,找到config.txt文件,或者直接在命

重構改善既有代碼設計--重構手法02Inline Method 內聯函數& 03 Inline Temp(內聯臨時變量)

臨時變量 替代 xtra 移動 get replace 16px ber ble Inline Method (內聯函數) 一個函數調用的本體與名稱同樣清楚易懂。在函數調用點插入函數體,然後移除該函數。 int GetRating()

重構改善既有代碼設計--重構手法01Extract Method 提煉函數

設置 都是 覆寫 list() 為什麽 新建 細粒度 align 容易 背景: 你有一段代碼可以被組織在一起並獨立出來。將這段代碼放進一個獨立函數,並讓函數名稱解釋該函數的用途。 void PrintOwing(double amount)

23種設計模式9訪問者模式

類方法 打印 interface 增加 http col visitor 設計模式的 接口 定義:封裝某些作用於某種數據結構中各元素的操作,它可以在不改變數據結構的前提下定義作用於這些元素的新的操作。 類型:行為類模式 類圖: 訪問者模式可能是行為類模式中最

重構改善既有代碼設計--重構手法14Hide Delegate 隱藏委托關系

nag 其他 耦合 pan manager 容易 -- 暴露 現在 客戶通過一個委托類來調用另一個對象。在服務類上建立客戶所需的所有函數,用以隱藏委托關系。 動機:封裝即使不是對象的最關機特性,也是最關機特性之一。“封裝”意味著每個對象都應該少了解

深入理解Java的註解Annotation註解處理器3

isp 通過反射 out peid 擴展 .cn 自定義註解 忽略 否則 如果沒有用來讀取註解的方法和工作,那麽註解也就不會比註釋更有用處了。使用註解的過程中,很重要的一部分就是創建於使用註解處理器。Java SE5擴展了反射機制的API,以幫助程序員快速的構造自定義註解處

回顧2017系列篇人工智能給UI/UX設計帶來的影響

如今,我們正處於設計新紀年的轉折點上,用機器人和人工智能方面的專家說法表達即“The end is near(終點近了)”。但這並不意味著世界末日,但未來機器人將毫無疑問地接管一部分目前被人類占領的工作。正如未來學家Thomas Frey在TED Talks演講中所預測,到2030年將會消失20億個工作

c語言程序設計3周編程作業數字特征

對數 bsp idt 作業 表格 技術分享 很快 lec .com 題目內容: 對數字求特征值是常用的編碼算法,奇偶特征是一種簡單的特征值。對於一個整數,從個位開始對每一位數字編號,個位是1號,十位是2號,以此類推。這個整數在第n位上的數字記作x,如果x和n的奇偶性相同,

構建NetCore應用框架之實戰篇什麽是框架,如何設計一個框架

net 希望 dmi 清晰 構建 組織 評估 系統開發 概念 一、系列簡述 本篇起,將通過一系列文章,去描述如何構建一個應用開發框架,並以作者開發的框架為例,逐個點展開分析,如何從零開始,構建自己的開發框架。 本系列文章的目的,是帶領有一編程經驗的人,通過動手,初步完成

Spring學習3Spring概述轉載

效率 調度 jpa 源代碼 一個 維護 html www hiberna 1. Spring是什麽?   Spring是一個開源的輕量級Java SE(Java 標準版本)/Java EE(Java 企業版本)開發應用框架,其目的是用於簡化企業級應用程序開發。   在面向對

Spring學習3IOC基礎轉載

目標 發生 由於 不同 擴展 通過 new 包括 control 一. IoC是什麽   Ioc—Inversion of Control,即“控制反轉”,不是什麽技術,而是一種設計思想。在Java開發中,Ioc意味著將你設計好的對象交給容器控制,而不是傳統的在你的對象內部

[SLAM]3-3旋轉向量軸角 及其與旋轉矩陣的變換

結合 高翔老師的著作《視覺SLAM十四講:從理論到實踐》,加上小白的工程經驗共同完成。建議購買紙製書籍搭配使用。 1.旋轉矩陣的缺點 由矩陣表示旋轉至少有以下幾個缺點: SO(3)的旋轉矩陣有九個量,但一次旋轉只能有三個自由度。因此這種表達方式是冗餘的。 旋轉矩

通過實際部署應用程式來學習Web 3.0動手實踐IPFS +以太坊

“分散式網路”或“Web 3.0”現因其將給當今行業帶來的革命性變革已儼然成為流行語。但是我們中有多少人真正瞭解Web 3.0呢? 在本文中,我會對Web 3.0的顯著特點進行介紹。在獲得對Web 3.0的基本瞭解之後,我們將一起在IPFS上部署應用程式。該應用程式具有一份Solidit

JAVA設計模式8過濾器模式條件模式

過濾器模式或條件模式是一種設計模式,使開發人員可以使用不同的條件過濾一組物件,並通過邏輯操作以解耦方式將其連結。 這種型別的設計模式屬於結構模式,因為該模式組合多個標準以獲得單個標準。 例項實現 我們將建立一個Person物件,Criteria介面和具體類,實現這個介面來過濾Person物件

微信小程式選座系統3主要內容陣列的動態生成

人生不易且無趣,一起找點樂子吧。歡迎評論,和文章無關的也可以。 前面我們說了列表的渲染,由一個二維陣列,怎樣去畫出座位。還談了陣列的修改,怎樣從座位的點選事件,獲得對應的位置,也就是陣列的下標,去修改相應的值。這次我們來談談最後的一塊的內容,這應該是這個板塊的最

設計模式(二 Adapter模式介面卡模式

Adapter模式(介面卡模式) 介面卡模式 1.類介面卡模式(繼承) 委託介面卡模式(物件) 記錄 介面卡模式 1.類介面卡模式(繼承) 基礎類,提供printWithParen()方法來列印帶()的內