为什么两个二维的矩阵的卷积结果却不等于他们傅里叶变换后乘积的傅里叶逆变换呢?理论上是相等的,用一维矩阵验证是相等的啊困惑?望高手赐教!谢谢!
使用“时域卷积与频域相乘等效为傅里叶变换对”的结论需要注意两个条件:
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的结果就是相当的。
使用“时域卷积与频域相乘等效为傅里叶变换对”的结论需要注意两个条件:
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的结果就是相当的。