2D循环卷积与卷积FFT[Matlab/Octave/Python]
我试图理解FTT和卷积(互相关)理论,因此我创建了以下代码来理解它。代码是Matlab/Octave,但是我也可以用Python实现 在1D中:2D循环卷积与卷积FFT[Matlab/Octave/Python],python,matlab,signal-processing,fft,convolution,Python,Matlab,Signal Processing,Fft,Convolution,我试图理解FTT和卷积(互相关)理论,因此我创建了以下代码来理解它。代码是Matlab/Octave,但是我也可以用Python实现 在1D中: x = [5 6 8 2 5]; y = [6 -1 3 5 1]; x1 = [x zeros(1,4)]; y1 = [y zeros(1,4)]; c1 = ifft(fft(x1).*fft(y1)); c2 = conv(x,y); c1 = 30 31 57 47 87 47 33 27
x = [5 6 8 2 5];
y = [6 -1 3 5 1];
x1 = [x zeros(1,4)];
y1 = [y zeros(1,4)];
c1 = ifft(fft(x1).*fft(y1));
c2 = conv(x,y);
c1 = 30 31 57 47 87 47 33 27 5
c2 = 30 31 57 47 87 47 33 27 5
在2D中:
X=[1 2 3;4 5 6; 7 8 9]
y=[-1 1];
conv1 = conv2(x,y)
conv1 =
24 53 89 29 21
96 140 197 65 42
168 227 305 101 63
这里是我发现问题的地方,填充一个矩阵和一个向量?我该怎么做?我可以用零填充x
?还是只在一边?那么y
呢?我知道当x
和y
是向量时,卷积的长度应该是M+L-1
,但是当它们是矩阵时呢?
我如何在这里继续我的示例?您需要使用以下命令将一个变量归零:
- 零列数等于其他变量的列数减 一个
- 零行数等于另一个变量的行数减去一
% 1D
x = [5 6 8 2 5];
y = [6 -1 3 5 1];
x1 = [x zeros(1,size(x,2))];
y1 = [y zeros(1,size(y,2))];
c1 = ifft(fft(x1).*fft(y1));
c2 = conv(x,y,'full');
% 2D
X = [1 2 3;4 5 6; 7 8 9];
Y = [-1 1];
X1 = [X zeros(size(X,1),size(Y,2)-1);zeros(size(Y,1)-1,size(X,2)+size(Y,2)-1)];
Y1 = zeros(size(X1)); Y1(1:size(Y,1),1:size(Y,2)) = Y;
c1 = ifft2(fft2(X1).*fft2(Y1));
c2 = conv2(X,Y,'full');
为了澄清卷积,请同时查看以下图片:
@\u tashuka这是一个很好的答案!我希望它能帮助很多人理解卷积