[問題] FFT相乘不等於時域conv ??已回收

看板MATLAB作者 (橋南荀令過,十里送衣香)時間15年前 (2010/04/04 01:21), 編輯推噓4(4017)
留言21則, 5人參與, 最新討論串1/3 (看更多)
不是說freq multiplication=time conv? 可是假設信號(s)和filter(f)長度都是N freq multiplication (fft(s)*fft(f))得到N點訊號(M) time conv(conv(s,f))得到2N-1點訊號(c) ifft(M) vs c 連長度都不一樣,是要怎麼相等? 我知道在公式上推導明顯是是相等的,可是實作上要怎麼把它弄相等? fft前zeropad to length=2N-1可以做到fft後長度就變成2N-1, 可是為什麼不zeropading時, freq multiplication就不等於time conv -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 24.107.11.27

04/04 01:26, , 1F
頻率域的相乘等同時域的迴旋積分運算 但沒有說運算完點數相同
04/04 01:26, 1F

04/04 01:32, , 2F
點數不夠會aliasing
04/04 01:32, 2F

04/04 01:34, , 3F
在時間軸上會aliaing,頻譜上取樣數不夠
04/04 01:34, 3F

04/04 10:45, , 4F
信號s轉頻域不補零長度N這時已經有部分訊號被濾掉了因為
04/04 10:45, 4F

04/04 10:46, , 5F
matlab轉頻域運算會依看輸入訊號的長度做限制理論上頻域訊號
04/04 10:46, 5F

04/04 10:47, , 6F
很廣長度不會只有N所以使用matlab轉頻域處理通常會補零以免
04/04 10:47, 6F

04/04 10:48, , 7F
取樣不足失真 這是小弟的認知有錯誤請高手指正
04/04 10:48, 7F

04/04 21:19, , 8F
在 DSP 的 convolution 是 circular convolution。
04/04 21:19, 8F

04/04 21:20, , 9F
MATLAB 裡請用 cconv。
04/04 21:20, 9F

04/05 04:23, , 10F
x length 1024, h length 200, Y=cconv(x,h,m)
04/05 04:23, 10F

04/05 04:23, , 11F
m要取多少才對?1024?
04/05 04:23, 11F

04/05 07:28, , 12F
你的要求是兩序列 DFT 後相乘再 IDFT 的結果與
04/05 07:28, 12F

04/05 07:29, , 13F
兩序列直接做 Convolution 一樣吧?
04/05 07:29, 13F

04/05 07:29, , 14F
同你的問題,如果兩序列一開始長度就不同,
04/05 07:29, 14F

04/05 07:29, , 15F
DFT 出來長度也不會一樣。
04/05 07:29, 15F

04/05 07:29, , 16F
連長度都不一樣,是要怎麼相乘呢?XDDDDD
04/05 07:29, 16F

04/05 08:19, , 17F
把h補到1024點
04/05 08:19, 17F

04/05 19:35, , 18F
剛看了一下 cconv 的實作方式,是採用超過截去,不足則
04/05 19:35, 18F

04/05 19:35, , 19F
補零的方法來處理輸入的兩個序列。所以若你要補的是零
04/05 19:35, 19F

04/05 19:35, , 20F
就不用手動補。可以想成 m = 1024 時,h 會被自動補成
04/05 19:35, 20F

04/05 19:35, , 21F
長度 1024 之後才開始算。
04/05 19:35, 21F
文章代碼(AID): #1Bjta6aP (MATLAB)
文章代碼(AID): #1Bjta6aP (MATLAB)