ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

cconv

N を法とする巡回たたみ込み

構文

c = cconv(a,b,n)
c = cconv(gpuArrayA,gpuArrayB,n)

説明

巡回たたみ込みは、2 つの離散型フーリエ変換 (DFT) 列のたたみ込みに使用します。非常に長いデータ列では、巡回たたみ込みの方が線形たたみ込みよりも速く計算できることがあります。

c = cconv(a,b,n) では、ベクトル a および b が巡回的にたたみ込まれます。ここで n は、結果として返されるベクトルの長さです。n を指定しないと、既定値の length(a)+length(b)-1 が使用されます。n = length(a)+length(b)-1 の場合、巡回たたみ込みは、conv を使用して計算した線形たたみ込みと等価になります。また cconv を使用して 2 つのデータ列の循環相互相関を計算できます (以下の例を参照)。

c = cconv(gpuArrayA,gpuArrayB,n) は、gpuArray クラスの入力ベクトルの循環たたみ込みを返します。gpuArray オブジェクトの詳細については、「GPU での配列の確立」を参照してください。cconvgpuArray と共に使用するには、Parallel Computing Toolbox™ ソフトウェアおよび CUDA 対応の NVIDIA GPU (Compute Capability 1.3 以上) が必要です。詳細は、http://www.mathworks.com/products/parallel-computing/requirements.html を参照してください。出力ベクトル c は、gpuArray オブジェクトです。GPU を使用して巡回たたみ込みを計算する例については、GPUを使用した巡回たたみ込みを参照してください。

以下の例では、4 を法とする巡回たたみ込みを計算します。

a = [2 1 2 1];
b = [1 2 3 4];
c = cconv(a,b,4)
c =
    14    16    14    16

以下の例では、n に既定値を使用して、巡回相関と線形相関を比較します。結果のノルムは実質にゼロで、これら 2 つのたたみ込みで得られる結果はほぼ同じであると言えます。

a = [1 2 -1 1];
b = [1 1 2 1 2 2 1 1];
c = cconv(a,b);            % Circular convolution
cref = conv(a,b);          % Linear convolution
dif = norm(c-cref)
dif =
   9.7422e-16

以下の例では、cconv を使用して 2 つの列の巡回相互相関を計算します。この結果を、xcorr を使用して計算した相互相関と比較します。

a = [1 2 2 1]+1i;
b = [1 3 4 1]-2*1i;
c = cconv(a,conj(fliplr(b)),7);   % Compute using cconv
cref = xcorr(a,b);                % Compute using xcorr
dif = norm(c-cref)
dif =
   3.3565e-15

GPUを使用した巡回たたみ込み

以下の例では、Parallel Computing Toolbox ソフトウェアおよび CUDA 対応 NVIDIA GPU (Compute Capability 1.3 以上) が必要です。詳細は、http://www.mathworks.com/products/parallel-computing/requirements.html を参照してください。

加法性ホワイト ガウス ノイズの 1 kHz の正弦波から構成される 2 つの信号を作成します。サンプルレートは 10 kHz です。

Fs = 1e4;
t = 0:1/Fs:10-(1/Fs);
x = cos(2*pi*1e3*t)+randn(size(t));
y = sin(2*pi*1e3*t)+randn(size(t));

gpuArray を使用して xy を GPU に入力します。GPU を使用して巡回たたみ込みを取得します。

x = gpuArray(x);
y = gpuArray(y);
cirC = cconv(x,y,length(x)+length(y)-1);

結果を xy の線形たたみ込みと比較します。

linC = conv(x,y);
norm(linC-cirC,2)

gather を使用して、巡回たたみ込み cirC を MATLAB® ワークスペースに返します。

cirC = gather(cirC);

参考文献

[1] Orfanidis, S. J. Introduction to Signal Processing. Englewood Cliffs, NJ: Prentice-Hall, 1996, pp. 524–529.

参考

|

この情報は役に立ちましたか?