理解離散時不變系統的含義

理解離散時不變系統的含義

4 人贊了文章

一、前言

首先聲明幾點,我現在在H264視頻編解碼的開發過程中遇到了很多問題,遇到了一些不太理解的配置參數,比如那一坨離散餘弦變換,量化參數等等,宏塊大小等等,因此重拾了離散傅里葉分析,順帶又看了離散時間系統(這個其實和H264沒啥關係,只是學著玩)。我發布這篇文章的目的不是為了博取什麼點擊量,也不為了賺錢,只是希望讀者能夠通過這篇文章能夠理解時不變系統的實際意義,在思維的碰撞中獲取到鑽研技術的樂趣。

二、正文

在離散信號處理中,我們常常遇到時變系統和時不變系統,但是卻不能很好地理解這個定義真正代表的含義,在下面的講解中,我會以一個初學者的視角完整地講解時不變系統,並結合實際分析。

要理解時不變系統,首先要理解什麼是離散時間變數。在信號處理的實際問題上,離散時間變數可以理解為信號的採樣時間點,假設我的採樣周期是0.5s,那麼當n=0,n=1,n=2時,實際上對應著在真實時間0s,0.5s,1s的時刻採樣。這就將這個概念和實際的現象結合起來了。

然後要理解離散時間系統的定義。在奧本海默的《離散時間信號處理(第二版)》的教材里,離散時間系統的定義如下:

在數學上,一個離散時間系統可以定義為一種變換或者運算元,它把值為x[n]的輸入序列映射為值為y[n]的輸出序列,記作:

y[n]=T[ x[n] ],其中T[]表示某種映射關係(這裡可以理解為關於x的函數)

也就是說,其實輸入信號x[n]和輸出信號y[n]都是關於離散時間變數n的函數(嚴格來說,叫做n到x或者n到y的映射,不過大部分時候這種映射都是函數關係,為了方便絕大部分人的理解,使用了「函數」這個定義)

那麼什麼是時不變系統呢?首先我們要理解的一個概念是——什麼是函數的位移,以及函數位移在時間系統的實際意義。

在初高中的數學教材里我們知道,函數的變換中有一個變換是平移變換,就是將自變數增減某個常量,然後再替代原來的自變數作為新的自變數。注意,一定要理解替代的含義,變換以後函數的表達式已經發生了改變(但自變數並沒有改變),也就是新的函數圖像依然是在原來的坐標軸上(即坐標軸的變數和單位沒有發生變化,這一點非常重要,因為時域分析的自變數永遠是單位時間)表達的,這樣,整個新函數圖像就會(相對原來的函數)左移和右移。有了這個基礎,我們再來理解時間與平移變換的關係。假設有一個與離散時間變數n有關的函數x[n]=f[n],作平移變換:

x[n-n0]=f[n-n0]

這個怎麼理解呢,記住,時間是滾滾向前,不會停止的。聯繫文章開頭對離散時間變數的解釋,以n為自變數,假設n0=2,在n=3的時刻採樣,對比原函數和變換後的函數,差別如下:

變換前:x[3]=f[3]

變換後(已經是新的函數了):x[3-2]=x[1]=f[1]

就是說,我雖然在n=3的時刻採樣,但是在變換後的函數里,我得到的卻是f[x]本應在n=1時刻早就該得到的函數值,也就是說,變換後的信號相比原信號,出現了時間上的滯後。

信號的超前也同理。但是,你可能會比較懵逼,信號怎麼會超前?難道有了預測未來的能力?實際上不是,超前滯後都是相對量,有了對比,才有超前滯後的概念,比如在電路的分析中,電壓電流實際上都會有時間上的超前滯後,由於電壓電流的關係是確定的(從這個角度說,你確實有預測未來的能力),那麼以電壓電流任意一個做自變數(在離散系統中可以叫做被採樣的信號)都可以,一個超前,另一個必然滯後,反之同理。

現在,預備知識已經足夠,可以進入時不變系統的學習了。

還是先引用書中的定義,然後再展開解釋:

時不變(又稱位移不變)系統是這樣一種系統,輸入序列的移位或者延遲將引起輸出序列相應的位移或者延遲。具體的說,假設一個系統將值為x[n]的輸入序列變換為值為y[n]的輸出序列,這個系統如果說是時不變的,則對所有n0,值為x1[n]=x[n-n0]的輸入序列將產生值為y1[n]=y[n-n0]的輸出序列。

初次看到這個定義,我也是很懵逼的,因為這實際上很違反直覺,啥?難道還有時變系統?難道我輸入信號的時間延遲了3秒,輸出信號還能延遲10秒?隨著時間的移位,還會影響函數的變化?

那麼我們先以一個簡單的時不變系統做引子,來理解時變時不變的詭異概念。

假設有這樣一個離散時間系統,它的輸入輸出關係如下:

y[n]=k * x[n] ,k就取……呃,任意整數吧

它表示,對於輸入序列x[n],輸出序列將以輸入序列倍增/倍減展現。

那麼,如何判定它是否是時不變系統呢?即如何理解時不變系統定義的那句話——設一個系統將值為x[n]的輸入序列變換為值為y[n]的輸出序列,這個系統如果說是時不變的,則對所有n0,值為x1[n]=x[n-n0]的輸入序列將產生值為y1[n]=y[n-n0]的輸出序列。

實際上,時不變的判定是從輸入輸出兩端進行對比的。首先從輸出端分析,在上述的式子中,y[n]的序列雖然是由x[n]序列確定的,但x[n]序列一旦確定,y[n]序列就已經確定了,那麼直接對輸出序列做平移變換n-n0,有

y[n-n0]=k * x[n-n0]

這個就是輸出序列延遲n0以後的新的輸出序列,但它並不是通過延遲n0以後的輸入序列x1[n]=x[n-n0]得到的,而是直接通過函數平移的定義,從輸出序列y[n]的表達式對n進行平移得到的,是空想出來的.所以,我們要驗證當輸入序列不再是x[n]而是x[n-n0]時,輸出序列是y[n-n0]。

從輸入端看去,經過函數的嚴謹變換,那麼應該有

y1[n]=k * x1[n],其中x1[n]=x[n-n0]

將x1[n]代回原表達式,得到y1[n]=k * x[n-n0]

這個y1[n]就是正兒八經通過函數變換得到的輸出序列,可以看到

y[n-n0]= y1[n]

也就證明了當輸入序列延遲n0以後,輸出序列也會有n0的延遲,且波形不變。

上述證明好像很啰嗦,繞來繞去總感覺像自己證自己,因為一眼看過去就知道……肯定時不變嘛!但是,這確實是時不變判定的思想,因為確實有時變系統,而且還有挺多的。

在奧本海默的《離散時間信號處理(第二版)》中,就提供了一個時變系統的經典案例(其實構造時變系統很簡單,只要在輸入序列外加入和時間有關的參數來構造輸出隊列就可以了比如n*x[n],但我覺得教材的這個很經典,能更好地理解序列這個詞的含義),有如下離散時間系統:

y[n]=x[Mn],其中M是任意正整數

這實際上是一個壓縮器,什麼意思呢?首先我們要理解x[Mn]的含義,正常情況下,我們都是以x[n]作為輸入序列的,這裡是x[Mn],也就是說,輸入序列和之前是不一樣的,當n變化時,實際上是不能取到x[n]所有的值的,也就是拋棄了原先x[n]中的某些值,對序列進行了壓縮。記住,輸入序列的時延永遠是對輸入序列來說的時延。這句話好像是個病句,但卻是時變時不變判定的精華。在直覺中,我們始終拋棄不了原函數序列x[n]對思維的影響,雖然新的函數序列是通過原函數序列變換而來的,但它並不受原函數序列的影響,它是獨立的隨離散時間變數n變化的函數。序列!序列!序列!重要的事情說三遍!也就是說輸入序列延遲了n0,新的輸入序列實際上是x[Mn-n0],而不是x[M(n-n0)],明白了嗎?這個非常重要,直接影響了時變時不變的判定。

下面我們來證明它的時變性(其實上面已經證明完了,這次正兒八經地證一遍)。

從輸出端來看,y[n]是隨n進行變化的,直接做函數的平移變換,有

y[n-n0]=x[M(n-n0)]

從輸入端來看,輸入序列進行時延n0以後,有

y1[n]=x1[Mn]=x[Mn-n0]

這樣y1[n]和我們預期的y[n-n0]不一樣,也就是說這是一個時變系統。

從實際的角度也很好理解,我們假設y[n]=x[3n],也就是說變換後的輸入序列每隔3個採樣點才從中選擇一個作為實際的輸入序列,但是到底選這三個中的哪一個作為採樣點,這隻能通過時延n0來決定,n0不同,獲取到的輸入隊列的是完全不一樣的取值,只有n0以3的倍數變化時,才會產生時不變系統,但是這就違背了n0可以取任意值的條件。

這樣,就完成了時不變系統的理解。

後續還會慢慢更新離散時間系統一些知識,然後是離散傅里葉分析的知識,有時間的話再更新一下H264的知識。

學海無涯苦做舟,共勉。


推薦閱讀:

阻抗匹配,示波器,50歐姆電阻,他們之間是什麼關係?(第二回)
信號與系統筆記3連續時間傅里葉變換
學習大話通信 信號調製
信號與系統筆記1導言
信號與系統筆記2連續離散時間系統的時域分析

TAG:H264MPEG4高級視頻編碼 | 信號與系統 | 數學 |