1. 程式人生 > >Matlab卷積與反傅立葉變換的問題

Matlab卷積與反傅立葉變換的問題

為什麼兩個二維的矩陣的卷積結果卻不等於他們傅立葉變換後乘積的傅立葉逆變換呢?理論上是相等的,用一維矩陣驗證是相等的啊困惑?望高手賜教!謝謝!
使用“時域卷積與頻域相乘等效為傅立葉變換對”的結論需要注意兩個條件:

1)卷積為圓周卷積,而不是線性卷積;
2)頻域相乘為點乘。

matlab中的conv以及conv2函式都是做的線性卷積,所以在使用這一結論時要進行一定的轉換處理。給個例子:

clear all
clc

a = randn(5);
b = randn(3);
[ra,ca] = size(a);
[rb,cb] = size(b);
r = ra+rb-1;
c = ca+cb-1;
result = conv2(a,b,'same')    % 時域卷積

a1 = [a zeros(ra,c-ca);zeros(r-ra,c)];  % 0延拓
b1 = [b zeros(rb,c-cb);zeros(r-rb,c)];
A = fft2(a1);
B = fft2(b1);
result1 = ifft2(A.*B);  % 頻域相乘
r_start = floor(rb/2) +1;
r_end = r_start + ra -1;
c_start = floor(cb/2) +1;
c_end = c_start + ca -1;
result1 = result1(r_start:r_end,c_start:c_end)

這樣得到的result 與result1的結果就是相當的。