1. 程式人生 > >維納濾波器(一)

維納濾波器(一)

很久沒有靜下心來整理一下了,我很早之前就想做一個從Wiener 濾波器了開始講的部落格了,現在終於有了安靜坐下來總結一下的理由。從這裡開始入手我感覺是對這一年多時間的尊敬,我會從模型開始講起,會把我從論文和書中的理解呈現出來,如果有時間,我會把我的程式碼放到我的git上,有興趣的可以去看一下,不多說,進入主題。

1 訊號模型

在很多的應用中,我們很多的工作都是對系統進行辨識(system iditification)。說白了就是一個假象模型裡面缺少很多引數,我們需要通過各種演算法把引數進行估計,然後得到系統。可能你會問為什麼我需要個系統?這麼說:假設你想對你錄到的語音進行增強,也就是變相的減小噪聲,那麼這就是一個系統,我想我這麼說大家應該會理解為什麼需要一個系統。

那麼在我們真正辨識系統之前,有個更主要的需要我們提前瞭解---訊號模型。就是你對你的訊號的組成進行建模,看其中都有哪些成分,比如包含噪聲,回聲等等,所以我們從訊號模型開始入手。

1.1 SISO模型

這個模型其實指的就是單輸入單輸出模型。(這裡深入想可能會有些繞,我僅僅是想對我的訊號進行建模,怎麼都出來輸入輸出了?那要看你怎麼理解輸入和輸出,這裡的輸入指的是我們的原始訊號比如你想增強的那個人的語音,輸出指的是我們的觀測訊號也就是你錄製的那個可能帶有噪聲的訊號,這裡的變化其實就是訊號從原始經過何種變化最終我們得到了觀測訊號。)

現在我們給出此模型的公式:


其系統圖示如下:


這裡的h是通道衝擊響應,這裡的*是卷積的意思(對於不明白卷積含義的,這裡不做解釋,可以自己去查閱資料)。s(k)是在k時刻的源訊號,b(k)是附加的噪聲。我們假設系統是線性的並且是時移不變的(這兩點非常重要,因為我們一般訊號處理的操作,都是為了後端提高識別率的,所以保證系統是線性的是必要的)。一般我們使用一個FIR濾波器而不是IIR濾波器來表示h。接下來我們給出SISO模型的向量形式:


其中:


(僅僅是變為了向量的形式,不過多解釋)。其中T表示的是轉置(行變列,列變行),L是我們濾波器的長度,一提到長度當然我們指的是在時域。這個長度在演算法中很重要,是一個可調的重要引數,日後會遇到,我們先不展開說。

接下來我們使用Z變換,其實就是針對離散資料的傅立葉變換,我們的SISO模型變為如下:


其中各個大寫字母是其各個訊號的Z變換形式。同時從這裡可以看出:時域的卷積可以巧妙的變化為頻域的乘積。(很多演算法選擇在頻域進行是從計算量出發的,不過不要以偏概全)。

1.2 SIMO模型

所謂SIMO就是單輸出多輸出的模型,可能有些人不理解,一個輸入怎麼會有多個輸出呢?少年,發揮你追你女朋友的想象力,人有多大膽,地有多大產。假如一個人說話,多個麥克風採集,那是不是SIMO模型呢?不多說,我們給出關於SIMO的圖解:


這裡我們使用變數N來代表總共有N路輸出。那麼第n個輸出的公式如下:


這裡我們給的直接是向量的形式。如果上面理解了,下面我們要更見識更加麻煩和有難度的公式。我們剛才說了,上面的公式是求第n個,那麼我如何拿公式來表示所有的N個輸出呢?


其中:


這顯然比我們SISO的式子要複雜,2D別慌,我能秀,呸呸,我能講。首先我們看x,x變成了向量,並且是列向量,長度為N,不難理解,這是把N個輸出都表示出來沒毛病往下看H。H打眼一看感覺不是人看的,那麼我們從矩陣乘法的角度推理:我們的x是一個列向量,要是使式子成立,我們的b也得是列項量表示各個輸出夾雜的噪聲,沒毛病對的上。那麼我們的Hs(k)也必然得是列向量。這也就是說一個N*L的H必須與一個L*1的s(k)進行想乘。那也就是我們H的各行與s(k)相乘然後得到最終結果。也就說用各個通道的通道衝擊響應與源訊號進行卷積然後得到N個通道的輸出,完美解決,沒有什麼事情是一遍解決不了的,如果有,那就兩遍。(聰明的小夥伴可能已經想到MIMO的時候的形式了)

同樣我們仿照上面的形式,進行Z變換:


這裡:


1.3 MISO模型

MISO模型就是多個輸入一個輸出,發揮想象力,沒錯多個人講話一個麥克風採集最終形成了MISO模型。MISO模型的圖解如下:


在最後我們看到了一個累加符號,那麼明白了,其實就是把多個輸出相加變為一個輸出。那麼我們的公式如下:


這裡:


這裡就有意思了,實話說我只能看懂第一部,對於使用矩陣相乘的方式(也就是第二個等號的位置)我個人認為書裡這裡是寫錯了的。理由如下:從第一個等號右邊及其圖解我們可以知道,最終我們得到的是一個時間點上的值。但是轉化成矩陣後,我這裡推解為:L*M的矩陣與M*L的矩陣的乘積是一個方陣L*L,並不是一個值,這與第一個式子右邊的相互矛盾,所以我認為這裡作者是寫錯了的。(如果哪位大V發現了我理解的漏洞歡迎在下面評論區指正,十分感謝)

根據上面我們得到MISO的Z變換如下:


那我從這裡理解的話,是不是第一個等式第二個等號右邊部分是hT與s(k)的卷積呢?猜測,僅僅是猜測。這裡:


1.4 MIMO模型

也就是著名的多輸出多輸出模型。實際場景為多個人說話,多個麥克風採集。MIMO的圖解有些複雜,如下:


那麼我們這裡假設有M個輸入,N個輸出,k時刻我們得到公式如下:


其中:


這裡有些麻煩,不過很容易理解,主要過程都是一一對應圖解我不做詳細推導,其中最關鍵的點就是:H是一個三維矩陣,N*L*M那麼他和二維M*L相乘的話得到的應該是N*1,而我們的輸出為N,所以能夠對應。hnm表示從輸入m到輸出n的衝擊響應。那麼我們可以得到其Z變換如下:


其中:


我們可以看出來,MIMO模型是最通用的,其他三種都可以看做是其特殊情況。

相關推薦

濾波器

很久沒有靜下心來整理一下了,我很早之前就想做一個從Wiener 濾波器了開始講的部落格了,現在終於有了安靜坐下來總結一下的理由。從這裡開始入手我感覺是對這一年多時間的尊敬,我會從模型開始講起,會把我從論文和書中的理解呈現出來,如果有時間,我會把我的程式碼放到我的git上,有興

QR二碼原理

info 分別是 最大 mask 多字節字符 包含 多字節 版本 錯誤 一、什麽是QR碼 QR碼屬於矩陣式二維碼中的一個種類,由DENSO(日本電裝)公司開發,由JIS和ISO將其標準化。QR碼的樣子其實在很多場合已經能夠被看到了,我這還是貼個圖展示一下: 這個圖如果被正確

精密測量 —— 種求圓標誌中心亞像素級邊緣標定算法

它的 圖像 擬合 bsp 亞像素 三維 時間 像素 面積 一、邊緣細定位邊緣 1 參數擬合法的基本原理 CCD是光積分器件,它以固定大小的面積在固定的時間間隔內對投影其感光面上的光強進行積分,輸出的結果就是圖像的灰度值。由於CCD的積分時間和面積是相對固

Linux進階:自動化運之ANSIBLE

運維自動化發展歷程 1、本地部署(On-Premiss) 部署硬體+軟體+作業系統+環境+服務 2、基礎設施即服務(Iaas) 相當於只准備硬體 3、平臺即服務(Paas) 相當於只准備服務 4、軟體即服務(SaaS) 直接使用 企業實際應用場景分析 1、Dev開發環境 使用者:程式

碼問題

描述 Android用Zxing生中文二維碼現問號。 分析 // 生二維矩陣(編碼時指定大小,生圖後縮放會模糊致識別失敗) BitMatrix matrix=null; // 該法不支援生中文二維碼 matrix = new MultiFormatWriter().encod

課程筆記20181019

一、虛擬機器管理 1、開啟虛擬機器 rht-vmctl start desktop 2、顯示虛擬機器 rht-vmctl view desktop 3、關閉虛擬機器 rht-vmctl poweroff desktop 4、重置虛擬機器 rht-v

Python自動化運開發----基礎

前言:環境是python3 1.第一個python程式(在學任何一門語言的時候第一程式好像都是hello world),下邊我們用python的直譯器去輸出一個hello world >>> print("hello world") hello worl

kafka 常用運命令介紹

文章目錄 一、連線zk zkCli 命令 二、topic 相關 列出所有的topic & 獲取命令幫助 建立topic 列出所有topic的詳情 刪除topic

CityEngine使用GIS模板創造三數字城市

ArcGIS提供了ArcScene和ArcGlobe兩種應用程式,二維資料可以以三維的形式進行視覺化展示。然而,一般採用設定圖層的“Base Heights”屬性實現。某些情況下,把二維幾何圖形轉化為貼附地形表面的三維要素是非常必要的。這樣,當你想使用這些要素和地表互動

讀SRE Google運解密有感

前言 這幾天打算利用碎片時間讀了一下”SRE Google運維解密”這本書,目前讀了前幾章,感覺收穫頗多,結合自己的工作經歷和書中的要點,寫一些感悟和思考 SRE 有關SRE我就不多介紹了,是Site Reliability Engineering的英文縮寫,中文名字叫站點可靠性工程師,它的由來是goog

重建學習特徵提取和追蹤

前言 今年大三,7月份來到澳洲國立大學(ANU)留學讀雙學位,在這的第一個學期就申請了Research and Development Project,有幸能夠跟隨導師做一個關於3D重建的專案。具體專案是基於一篇ICCV2015的論文《High Quality Struct

你知道運嗎?

一、初識“運維" 最初接觸“運維”是在老師的課堂上,當時吳老師說“今天我們來講一下‘運維’”,緊接著就聽到一陣竊竊私語的聲音,想必有大部分人和我一樣是第一次接觸這個名詞。 為了加深我們對運維的理解,吳老師舉了個例子:眾所周知,“雙十一狂歡節”近幾年來對我們的影響

濾波器---看完必懂不懂再看遍就懂

首先我們討論一下什麼叫濾波器,一個濾波器就是一段含有噪聲的訊號,經過這個濾波器之後,變成了另一個訊號,只不過,這個訊號比較特殊,它和原來的訊號有聯絡,這個聯絡就是現在的訊號是原來訊號的+噪聲訊號。這就是輸出訊號,和輸入訊號的相關性。 既然濾波器就是這麼一個東西h(n),我們

C# ZXing.Net生成二碼、識別二碼、生成帶Logo的二

tree bit 字符串 單位 images j2se lba 支付 .net 一.ZXing.Net 源代碼地址:http://zxingnet.codeplex.com/ 也可以使用Nuget包管理,添加如圖: 說明:ZXing是一個開源Java類庫用於解析多種格式的

渲染引擎設計與時間

註冊 三維 特定 渲染引擎 交互 文件 集合 工具 調度 一、初始osg 三維渲染引擎:為了實現三維場景圖形的結構管理和繪制而提供的一系列API的集合。包括構建層和交互層。 Crystal Space、Java3D、Unreal…… osg庫:構件場景圖形的場景圖形節點類、

Linux系統運常見面試簡答題15題

數據庫 route add 書寫 iptable sync 語句 日誌 mas ech 1、請描述下linux 系統的開機啟動過程開機加電BIOS自檢———–>MBR引導———–>grub引導菜單———–>加載內核———–>啟動init進程———–&

Linux運筆記網絡基礎知識

使用 可靠 height image inter 電話線 ppp協議 網址 esp 網絡基礎知識 一、基本概念 1.ARPANET & TCP/IP:以“軟件”技術將網絡硬件整合,使得不同的計算機或者數據可以通過這個軟件達成數據溝通(TCP/IP技術也被稱為Inte

自動化運工具——ansible詳解

數據 修改時間 們的 ransac 例如 ces 備份文件 其中 其他 ansible 簡介 ansible 是什麽?   ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、chef、func、fabric)的優點,實現了批量系

日常運

系統命令監控系統狀態 w、uptime 查看系統負載 w 查看系統負載 系統時間、運行時間、登錄用戶數、平均負載1min 5min 15min tty1 系統登錄用戶 pts/0 遠程登錄用戶 cat /proc/cpuinfo 查看cup核數 processor 0 為 1顆 1為2顆 邏

自動化運工具Ansible實戰簡介和部署

Ansible 自動化運維 一、Ansible的介紹 Ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點。實現了批量系統配置、批量程序部署、批量運行命令等功能。Ansible是基於模塊工作的,本身沒