2D圆形卷积Vs卷积FFT [Matlab/Octave/Python] [英] 2D circular convolution Vs convolution FFT [Matlab/Octave/Python]

查看:344
本文介绍了2D圆形卷积Vs卷积FFT [Matlab/Octave/Python]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图理解FTT和卷积(互相关)理论,因此我创建了以下代码来理解它.代码是Matlab/Octave,但是我也可以在Python中做到这一点.

I am trying to understand the FTT and convolution (cross-correlation) theory and for that reason I have created the following code to understand it. The code is Matlab/Octave, however I could also do it in Python.

在一维中:

 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呢?我知道,当xy是向量时,卷积的长度应为M+L-1,但是当它们是矩阵时呢? 我如何在这里继续我的例子?

Here is where I find the problem, padding a matrix and a vector? How should I do it? I could pad x with zeros around? or just on one side? and what about y? I know that the length of the convolution should be M+L-1 when x and y are vectors, but what about when they are matrices? How could I continue my example here?

推荐答案

您需要使用以下方法对一个变量进行零填充:

You need to zero-pad one variable with:

  • 与其他变量减的列数一样多的零列 一个.
  • 零行与其他变量的行数减一一样.
  • As many zero-columns as the number of columns of other variable minus one.
  • As many zero-rows as the number of rows of the other variable minus one.

在Matlab中,它的显示方式如下:

In Matlab, it would look in the following way:

% 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'); 

为了阐明卷积,还请看这张图片:

In order to clarify the convolution, look also at this picture:

这篇关于2D圆形卷积Vs卷积FFT [Matlab/Octave/Python]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆