標籤:表示 混合 利用 操作 時域 存在 標記法 雜訊 使用
實數形式的離散傅裡葉變換(real DFT)
上一章留了一個變換的實現形式的問題,其實這是一個雙向過成,正變化和逆變換,在此我們先瞭解一些頻率的知識一、頻域中關於頻率的四種表示方法1、序號標記法:根據時域中訊號的樣本數取0 ~N/2 ,用這種方法在程式中使用起來可以更直接地取得每種頻率的幅度值,因為頻率值跟數組的序號是一一對應的:X[K],取值範圍是0~ N/22、分數標記法,根據時域中訊號的樣本數的比例值取0~0.5:X[?] ,?=k/n 取值範圍是0-0.53、用弧度值來表示,把?乘以一個2π得到一個弧度值,這種表示方法叫做自然頻率 X[W],w=2π?=2πk/N,取值範圍是0~π4、以赫茲的方式表示二、DFT基本函數ck[i] = cos(2πki/N)sk[i] = sin (2πki/N)其中k表示每個正餘弦波的頻率,如為2表示在0到N長度中存在的兩個完整的周期,10即10和周期,如:中每個波形的振幅是怎麼計算出來的是是DFT比較重要的地方,比較難以理解。我們先把分解的正餘弦波合成原始訊號(反 DFT)三、合成運算方法DFT合成等式(合成原始時間訊號,頻率-->時間,逆向變換)是不是對這個公式比較眼熟在第一節中的傅裡葉級數很相似,看看下面這個公式:不管第一個公式是怎麼來的我們只要清楚傅裡葉級數就可以了,把第一個公式作為一個工具拿來用就可以。 DFT合成等式中的Im X[k]和Re X[k]跟之前提到的Im X[k]和Re X[k]是不一樣的,下面是轉換方法(關於此公式的解釋,見下文):但k等於0和N/2時,實數部分的計算要用下面的等式:上面四個式中的N是時域中點的總數,k是從0到N/2的序號。為什麼要這樣進行轉換呢?這個可以從頻譜密度(spectral density)得到理解,如就是個頻譜圖:、 這是一個頻譜圖,橫座標表示頻率大小,縱座標表示振幅大小,原始訊號長度為N(這裡是32),經DFT轉換後得到的17個頻率的頻譜,頻譜密度表示每單位頻寬中為多大的振幅,那麼頻寬是怎麼計算出來的呢?看,除了頭尾兩個,其餘點的所佔的寬度是2/N,這個寬度便是每個點的頻寬,頭尾兩個點的頻寬是1/N,而]Im X[k和Re X[k]表示的是頻譜密度,即每一個單位頻寬的振幅大小,但表示2/N(或1/N)頻寬的振幅大小,所以 應當是Im X[k]和Re X[k]的2/N(或1/N)。頻譜密度就象物理中物質密度,原始訊號中的每一個點就象是一個混合物,這個混合物是由不同密度的物質組成的,混合物中含有的每種物質的品質是一樣的,除了最大和最小兩個密度的物質外,這樣我們只要把每種物質的密度加起來就可以得到該混合物的密度了,又該混合物的品質是單位品質,所以得到的密度值跟該混合物的品質值是一樣的。 如果已經得到了DFT結果,這時要進行逆轉換,即合成原始訊號,則可按如下步驟進行轉換:1、先根據上面四個式子計算得出的值:2、再根據DFT合成等式得到原始訊號資料四、分解運算方法有三種完全不同的方法進行DFT:一種方法是通過聯立方程進行求解, 從代數的角度看,要從N個已知值求N個未知值,需要N個聯立方程,且N個聯立方程必須是線性獨立的,但這是這種方法計算量非常的大且極其複雜,所以很少被採用;第二種方法是利用訊號的相關性(correlation)進行計算,這個是我們後面將要介紹的方法;第三種方法是快速傅立葉變換(FFT),這是一個非常具有創造性和革命性的的方法,因為它大大提高了運算速度,使得傅立葉變換能夠在電腦中被廣泛應用,但這種演算法是根據複數形式的傅立葉變換來實現的,它把N個點的訊號分解成長度為N的頻域,這個跟我們現在所進行的實域DFT變換不一樣,而且這種方法也較難理解,這裡我們先不去理解,等先理解了複數DFT後,再來看一下FFT。有一點很重要,那就是這三種方法所得的變換結果是一樣的,經過實踐證明,當頻域長度為32時,利用相關性方法進行計算效率最好,否則FFT演算法效率較高。現在就讓我們來看一下相關性演算法。利用第一種方法、訊號的相關性(correlation)可以從雜訊背景中檢測出已知的訊號,我們也可以利用這個方法活動訊號波中是否含有某個頻率的訊號波:把一個待活動訊號波乘以另一個訊號波,得到一個新的訊號波,再把這個新的訊號波所有的點進行相加,從相加的結果就可以判斷出這兩個訊號的相似程度。如: 上面a和 b兩個圖是待活動訊號波,圖a很明顯可以看出是個3個周期的正弦訊號波,圖b的訊號波則看不出是否含有正弦或餘弦訊號,圖c和d都是個3個周期的正弦訊號波,圖e和f分別是a、b兩圖跟c、d兩圖相乘後的結果,圖e所有點的平均值是0.5,說明訊號a含有振幅為1的正弦訊號c,但圖f所有點的平均值是0,則說明訊號b不含有訊號d。這個就是通過訊號相關性來檢測是否含有某個訊號的方法。 第二種方法:相應地,我也可以通過把輸入訊號和每一種頻率的正餘弦訊號進行相乘(關聯操作),從而得到原始訊號與每種頻率的關聯程度(即總和大小),這個結果便是我們所要的傅立葉變換結果,下面兩個等式便是我們所要的計算方法: 第二個式子中加了個負號,是為了保持複數形式的一致,前面我們知道在計算Im X[k]時又加了個負號,所以這隻是個形式的問題,並沒有實際意義,你也可以把負號去掉,並在計算Im X[k]時也不加負號。這裡有一點必須明白一個正交的概念:兩個函數相乘,如果結果中的每個點的總和為0,則可認為這兩個函數為正交函數。要確保關聯性演算法是正確的,則必須使得跟原始訊號相乘的訊號的函數形式是正交的,我們知道所有的正弦或餘弦函數是正交的,這一點我們可以通過簡單的高數知識就可以證明它,所以我們可以通過關聯的方法把原始分離信號出正餘弦訊號。當然,其它的正交函數也是存在的,如:方波、三角波等形式的脈衝訊號,所以原始訊號也可被分解成這些訊號,但這隻是說可以這樣做,卻是沒有用的。 這隻是在實域上的離散傅立葉變換,其中雖然也用到了複數的形式,但那隻是個替代的形式,並無實際意義,現實中一般使用的是複數形式的離散傅立葉變換,且快速傅立葉變換是根據複數離散傅立葉變換來設計演算法的,在後面我們先來複習一下有關複數的內容,然後再在理解實域離散傅立葉變換的基礎上來理解複數形式的離散傅立葉變換
傅裡葉變換3