ドキュメンテーション

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

convmtx

構文

A = convmtx(h,n)

説明

A = convmtx(h,n) では、畳み込み行列 A が返されます。A とベクトル x との積は hx の畳み込みになります。

  • h が長さ m の列ベクトルの場合、A(m+n-1)n 列の行列であり、A と長さ n の列ベクトル x との積は、hx の畳み込みになります。

  • h が長さ m の行ベクトルの場合、An(m+n-1) 列の行列であり、A と長さ n の行ベクトル x との積は、hx の畳み込みになります。

convmtx では、ゼロ パディングによってエッジの部分が処理されます。

すべて折りたたむ

信号がベクトルの場合、一般に、畳み込みの計算に conv を使用するとより効率的です。マルチチャネル信号では、convmtx の方が効率的な場合があります。

convconvmtx の両方を使用して、2 つのランダムなベクトル ab の畳み込みを計算します。信号のサンプルはそれぞれ 1000 個です。この 2 つの関数が費やした時間を比較します。計算を 30 回繰り返して平均化することで不規則な変動を排除します。

Nt = 30;
Na = 1000;
Nb = 1000;

tcnv = 0;
tmtx = 0;

for kj = 1:Nt
    a = randn(Na,1);
    b = randn(Nb,1);

    tic
    n = conv(a,b);
    tcnv = tcnv+toc;

    tic
    c = convmtx(b,Na);
    d = c*a;
    tmtx = tmtx+toc;
end

t1col = [tcnv tmtx]/Nt
t1col = 1×2

    0.0007    0.0265

t1rat = tcnv\tmtx
t1rat = 36.7864

conv の方がほぼ 2 桁効率的です。

a が 1000 チャネルのマルチチャネル信号である場合について、この実行を繰り返します。事前割り当てを行い、conv のパフォーマンスを最適化します。

Nchan = 1000;

tcnv = 0;
tmtx = 0;

n = zeros(Na+Nb-1,Nchan);

for kj = 1:Nt
    a = randn(Na,Nchan);
    b = randn(Nb,1);
    
    tic
    for k = 1:Nchan
        n(:,k) = conv(a(:,k),b);
    end
    tcnv = tcnv+toc;

    tic
    c = convmtx(b,Na);
    d = c*a;
    tmtx = tmtx+toc;
end

tmcol = [tcnv tmtx]/Nt
tmcol = 1×2

    0.3822    0.1881

tmrat = tcnv/tmtx
tmrat = 2.0317

convmtxconv の約 3 倍効率的です。

アルゴリズム

convmtx では、関数 toeplitz を使用して畳み込み行列を生成します。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

参考

| | | |

R2006a より前に導入