[問題] DFT 的適用時機 (DSP問題)
各位版上的先進大家好,小弟剛大學畢業,趁研究所開學前的空閒正在複習訊號處理(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
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
06/29 05:10, 4F
→
06/29 05:11, , 5F
06/29 05:11, 5F
→
06/29 05:12, , 6F
06/29 05:12, 6F
→
06/29 05:12, , 7F
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
06/29 10:45, 8F
→
06/29 10:48, , 9F
06/29 10:48, 9F
→
06/29 10:48, , 10F
06/29 10:48, 10F
→
06/29 10:52, , 11F
06/29 10:52, 11F
→
06/29 10:52, , 12F
06/29 10:52, 12F
→
06/29 10:53, , 13F
06/29 10:53, 13F
→
06/29 10:56, , 14F
06/29 10:56, 14F
→
06/29 10:58, , 15F
06/29 10:58, 15F
→
06/29 10:59, , 16F
06/29 10:59, 16F
→
06/29 10:59, , 17F
06/29 10:59, 17F
→
06/29 11:01, , 18F
06/29 11:01, 18F
→
06/29 11:02, , 19F
06/29 11:02, 19F
→
06/29 11:03, , 20F
06/29 11:03, 20F
→
06/29 11:04, , 21F
06/29 11:04, 21F
→
06/29 11:05, , 22F
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
06/29 13:49, 23F
→
06/29 13:50, , 24F
06/29 13:50, 24F
→
06/29 13:50, , 25F
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
06/29 20:50, 31F
→
06/29 20:51, , 32F
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
06/29 20:53, 36F
→
06/29 20:54, , 37F
06/29 20:54, 37F
→
06/29 20:55, , 38F
06/29 20:55, 38F
→
06/29 20:56, , 39F
06/29 20:56, 39F
→
06/29 20:56, , 40F
06/29 20:56, 40F
→
06/29 20:58, , 41F
06/29 20:58, 41F
→
06/29 20:58, , 42F
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
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章