Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

convmtx

説明

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

すべて折りたたむ

信号がベクトルの場合、一般に、畳み込みの計算に conv を使用すると convmtx を使用するより効率的です。マルチチャネル信号では、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.0004    0.0076

t1rat = tcnv\tmtx
t1rat = 17.1330

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.1253    0.0606

tmrat = tcnv/tmtx
tmrat = 2.0694

convmtxconv の約 3 倍効率的です。

入力引数

すべて折りたたむ

入力ベクトル。行または列として指定します。

データ型: single | double

畳み込みを行うベクトルの長さ。正の整数として指定します。

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

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

出力引数

すべて折りたたむ

入力 h の畳み込み行列とベクトル x。行列として返されます。

アルゴリズム

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

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

拡張機能

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

バージョン履歴

R2006a より前に導入

参考

| | | |