conv
fi
オブジェクトの畳み込みおよび多項式乗算
説明
例
16 タップ FIR フィルターによる 22 サンプル列の畳み込み
16 タップ FIR フィルターによる 22 サンプル列の畳み込みを求めます。
x
は、語長 16 ビット、小数部の長さ 15 ビットの符号付きの値の 22 サンプル列です。h
は、16 タップ FIR フィルターです。
u = (pi/4)*[1 1 1 -1 -1 -1 1 -1 -1 1 -1]; x = fi(kron(u,[1 1])); h = firls(15, [0 .1 .2 .5]*2, [1 1 0 0]);
x
は fi
オブジェクトであるため、畳み込み演算を実行する前に h
を fi
オブジェクトにキャストする必要はありません。関数 conv
が最高精度のスケーリングを使用して自動的にキャストします。
関数 conv
を使用し、2 つのベクトルを畳み込みます。
y = conv(x,h);
演算により、語長 36 ビット、小数部の長さ 31 ビットの符号付き fi
オブジェクト y
が取得されます。入力に関連付けられている既定の fimath
プロパティによって、出力の numerictype
プロパティが決まります。出力にはローカル fimath
がありません。
2 つの fi
ベクトルの畳み込みの中央部分
2 つの fi
ベクトルを作成します。a
と b
の畳み込みについて、a
と同じサイズの中央部分を求めます。
a = fi([-1 2 3 -2 0 1 2]);
b = fi([2 4 -1 1]);
c = conv(a,b,'same')
c = 15 5 -9 7 6 7 -1 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 34 FractionLength: 25
c
の長さは 7 です。完全な畳み込みの場合、長さは length(a)+length(b)-1
となり、この例では 10 になります。
入力引数
a,b
— 入力ベクトル
ベクトル
入力ベクトル。行ベクトルまたは列ベクトルのいずれかとして指定します。
どちらかの入力が組み込みデータ型である場合、conv
は、畳み込み演算を実行する前に、最高精度規則を使用してそれを fi
オブジェクトにキャストします。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fi
複素数のサポート: あり
shape
— 畳み込みのサブセット
'full'
(既定値) | 'same'
| 'valid'
畳み込みのサブセット。次の値のいずれかとして指定します。
'full'
— 完全な畳み込みを返します。このオプションは既定の形状です。'same'
— 畳み込みの中央部分を入力ベクトルa
と同じサイズで返します。'valid'
— 畳み込みのうち、0 が加えられたエッジを含まずに計算された部分のみを返します。このオプションを使用すると、出力ベクトルc
の長さは、max(length(a)-max(0,length(b)-1),0)
となります。
データ型: char
詳細
畳み込み
2 つのベクトル u
と v
の畳み込みとは、v
を u
の上に移動したときの点が重なる領域を表します。代数的には、畳み込みは係数が u
と v
の要素である多項式の乗算と同じ演算になります。
m = length(u)
および n = length(v)
とします。このとき、w
は長さが m+n-1
のベクトルで、その k
番目の要素は次のとおりです。
これは、u(j)
および v(k-j+1)
に関して適正な添字となる j
のすべての値にわたる総和で、具体的には j
=
max(1,k+1-n):1:min(k,m)
です。m
=
n
の場合、これは以下のようになります。
w(1) = u(1)*v(1) w(2) = u(1)*v(2)+u(2)*v(1) w(3) = u(1)*v(3)+u(2)*v(2)+u(3)*v(1) ... w(n) = u(1)*v(n)+u(2)*v(n-1)+ ... +u(n)*v(1) ... w(2*n-1) = u(n)*v(n)
アルゴリズム
入力に関連付けられている fimath
プロパティによって、出力 fi
オブジェクト c
の numerictype
プロパティが決まります。
a
またはb
のどちらかがローカルfimath
オブジェクトをもつ場合、conv
は、そのfimath
オブジェクトを使用して中間量を計算し、これによってc
のnumerictype
プロパティが決まります。a
またはb
のいずれにもfimath
が付加されていない場合、conv
は既定のfimath
を使用して中間量を計算し、これによってc
のnumerictype
プロパティが決まります。
どちらかの入力が組み込みデータ型である場合、conv
は、畳み込み演算を実行する前に、最高精度規則を使用してそれを fi
オブジェクトにキャストします。
出力 fi
オブジェクト c
は、常に既定の fimath
を使用します。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用に関するメモと制限:
制御側
fimath
のSumMode
プロパティがSpecifyPrecision
またはKeepLSB
に設定されている場合のみ、可変サイズ入力がサポートされています。可変サイズ信号では、生成されるコードと MATLAB® で結果が異なる場合があります。
生成コードでは、可変サイズ信号に対する出力は、制御側
fimath
のSumMode
プロパティを使用して計算されます。MATLAB では、可変サイズ信号に対する出力は、両方の入力が非スカラーの場合、制御側
fimath
のSumMode
プロパティを使用して計算されます。しかしどちらかの入力がスカラーの場合、MATLAB は制御側fimath
のProductMode
を使用して出力を計算します。
バージョン履歴
R2009b で導入
参考
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)