[問題] DFT 的適用時機 (DSP問題)

看板MATLAB作者時間6年前 (2017/06/29 03:39), 6年前編輯推噓2(2040)
留言42則, 2人參與, 最新討論串1/1
各位版上的先進大家好,小弟剛大學畢業,趁研究所開學前的空閒正在複習訊號處理(DSP) ( 先說我研究所的領域是 CS 的,跟這個八竿子打不著 XD ) 有個問題困擾了我許久,只可惜在學校的時候沒學好,現在找不到老師問, 想說 matlab 版的大家應該有比較多訊號處理的經驗,所以 PO 上來尋求協助, 我只覺得訊號處理這種科目沒有人帶真的很難學到精隨,是很吃經驗的科目呢。 ========================================================================== 問題是這樣的:什麼時候該用 DFT,什麼時候該用 DTFT? 我們都知道在離散時間裡面處理訊號的方式有兩種,DTFS (俗稱DFT) 跟 DTFT, 前者適用於週期性訊號,會使頻譜離散化,而後者適用於非週期性訊號,頻譜連續, 不過我實在想不到該用 DFT 而不用 DTFT 的理由。 如果單純只是對時域的訊號做處理,那我大可以在時域設計出一個 FIR, 然後兩個一起做 convolution,答案就出來了,也就是說頻譜的「連續性」只是一個現象, 不一定要讓頻譜離散化才能用 matlab 運算吧。 再考慮 IIR (無限延伸的 filter) 的情況,如果這個 filter 剛好在 n 很大的時候值會 趨近於零, 我們應該也可以直接忽略它,化簡成一個 FIR (有限長度),直接跟訊號 convolution, 就跟上面提到的一樣。 所以說目前我只想到該用 DFT 而不用 DTFT 的原因只有兩個: (1) IIR 在任意時刻都有不可忽略的值,不容易直接乘,只好取一部份並利用 DFT 自動 隱含週期性的特性運算 (2) DFT 有 FFT 快速實作法,在計算頻譜會快很多 ======================================================================== 以上大概就是主要問題,想不太到在實際訊號處理的案例中 DFT 相對於 DTFT 的優點, 請問版上各位先進上面的論述是否正確?又 DFT 的主要應用為何?先謝謝版上大大! 因為這個問題困擾我許久,視情況我可能會發送稅前 30P - 50P 給有說服到我的最佳解 答作為回報 ( 意即,只能有一位最佳解,因為我很窮 QQ ) 當然,如果其他解答也很好的話我視財力也會發送一些 (10P) 作為謝禮! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.168.86.10 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1498678746.A.BC7.html ※ 編輯: alan23273850 (1.168.86.10), 06/29/2017 03:40:06 ※ 編輯: alan23273850 (1.168.86.10), 06/29/2017 03:40:41

06/29 05:08, , 1F
DTFT頻譜是連續的 但是你實際上在處理的資料都碼是離散
06/29 05:08, 1F

06/29 05:09, , 2F
也許有的頻譜有理論公式 但沒有理論公式的呢?還不是要做
06/29 05:09, 2F

06/29 05:10, , 3F
數值積分算出頻譜 這個數值積出來的頻譜其實還是離散的
06/29 05:10, 3F

06/29 05:10, , 4F
既然實際處理上很逃避離散 那就阿莎力一點用DFT 時間頻
06/29 05:10, 4F

06/29 05:11, , 5F
譜都離散的 反正一樣要做數值積分嘛
06/29 05:11, 5F

06/29 05:12, , 6F
至於DTFT的用處太久以前讀了我不是很熟 印象中主要是來
06/29 05:12, 6F

06/29 05:12, , 7F
做一些理論的探討?什麼causality啥鬼的
06/29 05:12, 7F
先感謝 p 大的回應,我懂您的意思, 不過坦白說我的看法跟您的有點不太一樣, 同時也是問題點所在,我現在只覺得大家會喜歡用 DFT 只是因為 matlab 有 fft 這個快速函式可用而已。 假設現在有一個有限長度的訊號 x[n],我們要對他做 moving average filter 也就是 h[n] = 0.33delta[n] + 0.33delta[n-1] + 0.33delta[n-2] 這裡的 delta 是脈衝函數,那如果直接算 x[n] CONV. h[n], 這邊就完全不會出現 DFT 的運算。 如果是要先觀察 x[n] 有哪些頻率成分,再決定 filter 的話, 我們依然可以套原本的公式算出精準的頻譜,sigma(n=-INF~INF) x[n]*exp(-jwn) 只是說我們如果要「觀察」這個頻譜的話一定只能挑有限個點觀察, 這邊跟 DFT 裡面本來就是離散的頻譜概念還是不太一樣, 一個是我們只能挑有限個點去觀察連續的頻譜, 一個是基於假設訊號的週期性得到離散的頻譜。 這樣的話感覺還是不用 DFT 耶? 目前我有點逃避 DFT 是因為不太理解 DFT 自動把訊號週期化的概念, 好像頻譜還會失真,覺得這是不必要的。

06/29 10:45, , 8F
wiki: 傅立葉變換家族中的關係
06/29 10:45, 8F

06/29 10:48, , 9F
FS, DFT: 對周期信號, 這個狀況下只要"有限個"富立業
06/29 10:48, 9F

06/29 10:48, , 10F
基底,就可以去span整個信號.
06/29 10:48, 10F

06/29 10:52, , 11F
CFT, DTFT: 針對非週期信號(假設周期無窮大).
06/29 10:52, 11F

06/29 10:52, , 12F
但不論何時何地,請掌握DSP教科書第二章的那句重點,
06/29 10:52, 12F

06/29 10:53, , 13F
Fourier轉換相當於是把信號作eigen-decomposition.
06/29 10:53, 13F

06/29 10:56, , 14F
另外,真實狀況不可能存在IIR,因為IIR違反causality.
06/29 10:56, 14F

06/29 10:58, , 15F
sinc在 n很大的位置也趨近於0,你能把sinc的尾巴砍掉來
06/29 10:58, 15F

06/29 10:59, , 16F
作為近似嗎? 或許你該從一般電機系大三念的信號與系統
06/29 10:59, 16F

06/29 10:59, , 17F
開始念,念完之後,再去看DSP.
06/29 10:59, 17F

06/29 11:01, , 18F
basis的選擇牽涉到能不能該transform domain能否完整的
06/29 11:01, 18F

06/29 11:02, , 19F
詮釋某個信號,也跟能不能便於從另一個角度來看這個信號
06/29 11:02, 19F

06/29 11:03, , 20F
(ex: redundant bases, sparse representation)
06/29 11:03, 20F

06/29 11:04, , 21F
以你的狀況,先不要想太多,大多數的離散信號都是非週期
06/29 11:04, 21F

06/29 11:05, , 22F
信號,拿discrete-time fourier transform處理就好.
06/29 11:05, 22F
謝謝 Y 大的解答!其實我大學就是電機系的 XD 只是因為對 CS 有興趣所以轉組 其實傅立葉變換家族那邊我看很多遍了,基本上還算熟,只是不知道 DFT 存在的價值 不過您的解說裡面有個地方我真的有想過,如果是想過濾低頻的話, 它在頻域是個方波,那轉回時域就一定會出現 sinc,我還真的想把它的尾巴砍掉, 近似成 FIR,我一直以為可以,因為感覺只是微小誤差,這邊想再問更詳細一些>< ------------------- 還有按照您的說法感覺 DTFT 就很夠了,真的跟我原本想的一樣 DFT 沒啥價值 我比較想知道有什麼時候是「必須」使用 DFT 而不能使用 DTFT 的情況, 因為感覺 DSP 課本是很強調 DFT 而不可忽視的,但我從課本中只知道 (1) 頻譜離散化、(2) 有 fft 快速實作法,這兩大優勢而已 上面我有提過頻譜不需要離散化的理由,再加上不考慮效率問題的話, 其實 DTFT 就已經在離散時域中提供足夠的理論了,不需要 DFT 再參一腳。 拜託了! ※ 編輯: alan23273850 (1.168.84.224), 06/29/2017 12:03:47 ※ 編輯: alan23273850 (1.168.84.224), 06/29/2017 12:20:43

06/29 13:49, , 23F
你先複習一下Gibbs phenomenon.再考慮砍不砍的近似問題
06/29 13:49, 23F

06/29 13:50, , 24F
如果真的能這麼完美,那short-term Fourier早就有機會
06/29 13:50, 24F

06/29 13:50, , 25F
天下無敵,輪不到Gabor和wavelet family的出場了. :p
06/29 13:50, 25F

06/29 20:47, , 26F
說真的 通訊用的例子我不太熟 我直接舉我熟悉的電波領域
06/29 20:47, 26F

06/29 20:47, , 27F
的例子好了 通訊用的比較多是想從時域求頻譜 但我們電波
06/29 20:47, 27F

06/29 20:48, , 28F
領域常常是反過來 我今天量到一個電路的頻譜了 我想要求
06/29 20:48, 28F

06/29 20:48, , 29F
他的時域響應 可想而知 所謂的"量到"的頻譜必然是離散的
06/29 20:48, 29F

06/29 20:49, , 30F
此時要由這離散的頻譜求得他時域的響應就要做數值傅立葉
06/29 20:49, 30F

06/29 20:50, , 31F
這時當然沒有必要去用反過來的DTFT 畢竟再怎麼樣也許你
06/29 20:50, 31F

06/29 20:51, , 32F
反過來的DTFT算出來是連續的時域響應 但我們在看Data還
06/29 20:51, 32F

06/29 20:51, , 33F
是會看離散的就好了 連續的資料你要畫出來給人看一樣要
06/29 20:51, 33F

06/29 20:52, , 34F
取點變成離散的
06/29 20:52, 34F

06/29 20:53, , 35F
再來既然看不看連續最後都要用離散的去觀察時域響應 那
06/29 20:53, 35F

06/29 20:53, , 36F
為啥不用有加速方法FFT的DFT呢?
06/29 20:53, 36F

06/29 20:54, , 37F
事實上 可以說單單有FFT這個加速方法就夠讓人想用DFT了
06/29 20:54, 37F

06/29 20:55, , 38F
再舉一個例子 就是你上面說的convolution 兩個離散的時
06/29 20:55, 38F

06/29 20:56, , 39F
域訊號要conv的話 如果用直接定義慢慢加複雜度是N^2 但
06/29 20:56, 39F

06/29 20:56, , 40F
用FFT就可以加快到N*logN 基於速度上的選擇當然會用FFT
06/29 20:56, 40F

06/29 20:58, , 41F
簡單結論一下:DTFT是在理論上探討用的 但是實際上在處理
06/29 20:58, 41F

06/29 20:58, , 42F
資料 因為FFT快 所以往往用DFT 一個是理論一個是實際
06/29 20:58, 42F
其實我剛剛在看完兩位大大回覆後又上網爬了許多各家投影片, 現在概念有比較清楚些,且讓我慢慢把目前的理解貼在這裡給各位檢驗。 (1) 先說說我現在比較接受 DFT 的主要原因:其實如果想要降低 DFT 自動隱含週期性這個特性的話,可以做 zero padding,padding 的愈多 則週期性愈低,這個 DSP 課本上面有寫。再者其實自動隱含週期性也不是 什麼壞事,反而原本沒有隱含週期性的 DTFT 作法才會讓某些成分變形, 也就是說忠實的反映原先 time-limited signal 的頻譜未必較好。 之前我怕取的點數所造成的隱含週期會跟原本的訊號週期不吻合,不過 這個好像也只要讓點數多一些讓頻譜密集就可以舒緩了,所以也還不算什麼大問題。 (2) 其實要計算整段訊號 x[n] 的總頻譜,仍然只有一個方法,就是把 「整段訊號」套進 DTFT 或 DFT 公式,而 DFT 好像會快一些。 (只是會隱含週期性,不然就做 zero-padding,不過會讓點數更多就是) 不過在實務應用上有些訊號像一首歌 4 分多鐘,取樣點數早就超過記憶體容量, 這種情況我想也只能取一部分作轉換,這樣其實或許也觀察得到男女聲頻率, 或許並不是每個時候都要計算「整段」訊號才能分析。 (3) 要計算跟 h[n] 的 convolution 的話,有兩個方法,一個是老實的 通通把 h[n] 給滑起來,另外一個是利用 DFT 作 overlap-add 或 overlap-save, 另外搭配 zero-padding,這兩個效率好像也是跟 h[n] 的長度有關,各有適用時機。 所以總結來說,大家喜歡 DFT 似乎還是跟效率有關,感謝 p 大的再次強調! (4) 最後那個 sinc 函數 truncate 的部分,那些 Gabor 和 wavelet transform 對我 來說還太高深,目前不打算學。如果是我來近似 ideal LPF,應該會使用 windowing 的技巧把兩邊河蟹掉,其實還是跟 truncate 有 87% 像,只是說 windowing 會確保它的連續性。不過這邊還是感謝 Y 大的補充,只能說人外有人 天外有天,大神無所不在! ============================================================= 上面就是我這篇的結論了,感謝 p 大和 Y 大的耐心回答,為此我打算贈與兩位各 稅前 45 P 作為謝禮,請別嫌小弟寒酸,這加起來已經超過我半數的積蓄了 XD 如果結論還是有小錯的話歡迎再來推文修正! ※ 編輯: alan23273850 (1.168.84.224), 06/30/2017 01:52:02
文章代碼(AID): #1PL0NQl7 (MATLAB)
文章代碼(AID): #1PL0NQl7 (MATLAB)