線形畳み込みと循環畳み込み

この例では、線形畳み込みと循環畳み込みの間に等価性を確立する方法を示します。

線形畳み込みと円形畳み込みは根本的に異なる操作です。 しかし、線形畳み込みと円形畳み込みが等価である条件があります。 この等価性を確立することは重要な意味を持っています。 2つのベクトルxyの場合、循環畳み込みは、ベクトルのDftの積の逆離散フーリエ変換(DFT)に等しくなります。 線形畳み込みと循環畳み込みが等価である条件を知ることで、DFTを使用して線形畳み込みを効率的に計算することができます。

N点ベクトルxとL点ベクトルyの線形畳み込みの長さはN+L-1です。

xとyの循環畳み込みを等価にするには、DFTを取得する前に、少なくともn+L-1の長さにゼロでベクトルを埋めなければなりません。 Dftの積を反転した後、最初のN+L-1要素のみを保持します。

2つのベクトルxyを作成し、2つのベクトルの線形畳み込みを計算します。

x = ;y = ;clin = conv(x,y);

出力の長さは4+3-1です。

両方のベクトルを長さ4+3-1にゼロで埋めます。 両方のベクトルのDFTを取得し、Dftを乗算し、積の逆DFTを取得します。

xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));

ゼロパディングベクトルxpadypadの循環畳み込みは、xyの線形畳み込みに相当します。 出力の長さは4+3-1なので、ccircのすべての要素を保持します。

線形畳み込みの出力とDFT積の逆数をプロットして、等価性を示します。

subplot(2,1,1)stem(clin,'filled')ylim()title('Linear Convolution of x and y')subplot(2,1,2)stem(ccirc,'filled')ylim()title('Circular Convolution of xpad and ypad')

図には2軸が含まれています。 Xとyのタイトル線形畳み込みを持つ座標軸1には、stem型のオブジェクトが含まれます。 Xpadとypadのタイトル円形畳み込みを持つ軸2には、stem型のオブジェクトが含まれています。

ベクトルを長さ12にパッドし、Dftの積の逆DFTを使用して円形畳み込みを取得します。 線形畳み込みと同等の結果を生成するには、最初の4+3-1要素のみを保持します。

N = length(x)+length(y)-1;xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));ccirc = ccirc(1:N);

Signal Processing Toolbox™ソフトウェアには、2つのベクトルの循環畳み込みを返す関数cconvがあります。 次のコードで循環畳み込みを使用して、xyの線形畳み込みを取得できます。

ccirc2 = cconv(x,y,6);

cconv 前の例で示したのと同じDFTベースの手順を内部的に使用します。

コメントを残す

メールアドレスが公開されることはありません。