添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

二维圆形卷积与卷积FFT[Matlab/ctave/Python]

3 人关注

我正在努力理解FTT和卷积(交叉相关)理论,为此我创建了以下代码来理解它。该代码是Matlab/Octave,然而我也可以用Python来做。

In 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    5 
 c2 =   30   31   57   47   87   47   33   27    5

In 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的周围填充零,还是只在一边填充?我知道当xy是向量时,卷积的长度应该是M+L-1,但是当它们是矩阵时呢? 我怎么能在这里继续我的例子呢?

python
matlab
signal-processing
fft
convolution
Manolete
Manolete
发布于 2014-02-13
1 个回答
tashuhka
tashuhka
发布于 2014-02-13
已采纳
0 人赞同

你需要对一个变量进行归零处理。

  • As many zero-columns as the number of columns of other variable minus
  • As many zero-rows as the number of rows of the other variable minus one.
  • 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');