簡體   English   中英

2D循環卷積Vs卷積FFT [Matlab / Octave / Python]

[英]2D circular convolution Vs convolution FFT [Matlab/Octave/Python]

我試圖理解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    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 ,但是當它們是矩陣時呢? 我怎么能在這里繼續我的榜樣?

您需要使用以下內容對一個變量進行零填充:

  • 與其他變量的列數減1一樣多的零列。
  • 與其他變量的行數減1一樣多的零行。

在此輸入圖像描述

在Matlab中,它將以下列方式查找:

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

為了澄清卷積,請看這張圖:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM