wextend
ベクトルまたは行列の拡張
説明
例
ベクトルおよび行列の拡張
ベクトルの拡張
さまざまな方法を使用してベクトルを拡張します。
ベクトルを作成し、拡張の長さを 2 に設定します。
len = 2; x = [1 2 3]
x = 1×3
1 2 3
ゼロ パディング拡張を実行します。異なる形式の入力引数にも対応できることを確認するために、この拡張を 2 回実行します。どちらの場合も結果は同じになります。
xextzpd1 = wextend('1','zpd',x,len)
xextzpd1 = 1×7
0 0 1 2 3 0 0
xextzpd2 = wextend('1D','zpd',x,len,'b')
xextzpd2 = 1×7
0 0 1 2 3 0 0
半分の点の対称拡張を実行します。
xextsym = wextend('1D','sym',x,len)
xextsym = 1×7
2 1 1 2 3 3 2
周期的拡張を実行します。入力ベクトルの長さが奇数であるため、wextend は追加サンプルを末尾に追加してから 'ppd' モードを使用して拡張を行います。このサンプルは右側の最後の値と等しくなります。
xextper = wextend('1D','per',x,len)
xextper = 1×8
3 3 1 2 3 3 1 2
行列の拡張
さまざまな方法を使用して小さな行列を拡張します。
行列を作成し、拡張の長さを 2 に設定します。
len = 2; X = [1 2 3; 4 5 6]
X = 2×3
1 2 3
4 5 6
配列のゼロ パディング拡張を実行します。
Xextzpd = wextend(2,'zpd',X,len)
Xextzpd = 6×7
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 1 2 3 0 0
0 0 4 5 6 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
配列の半分の点の対称拡張を実行します。
Xextsym = wextend('2D','sym',X,len)
Xextsym = 6×7
5 4 4 5 6 6 5
2 1 1 2 3 3 2
2 1 1 2 3 3 2
5 4 4 5 6 6 5
5 4 4 5 6 6 5
2 1 1 2 3 3 2
uint8
データの範囲限界値を超える拡張
値がデータ型の範囲の限界値に達しているか限界値に近い状態で、uint8
のベクトルに対して対称拡張、反対称拡張、および平滑化拡張を実行して影響を観察します。
対称拡張
uint8
の整数の最小値は 0 で最大値は 255 です。それらの限界値を含む uint8
の整数のベクトルを作成します。
dataVector = uint8([0 1 2 253 254 255])
dataVector = 1x6 uint8 row vector
0 1 2 253 254 255
ベクトルの全点および半分の点の対称拡張を求めます。ベクトルの値を左右に 2 つずつ拡張します。
wholePointSym = wextend('1','symw',dataVector,2)
wholePointSym = 1x10 uint8 row vector
2 1 0 1 2 253 254 255 254 253
halfPointSym = wextend('1','symh',dataVector,2)
halfPointSym = 1x10 uint8 row vector
1 0 0 1 2 253 254 255 255 254
対称的に拡張した場合、値が uint8
の範囲を超えることはありません。
反対称拡張
ベクトルの double
型のコピーを作成し、そのコピーの全点の反対称拡張を求めます。この拡張には、負の値と 255 よりも大きい値が含まれます。
dataVectorDouble = double(dataVector); wholePointAsymDouble = wextend('1','asymw',dataVectorDouble,2)
wholePointAsymDouble = 1×10
-2 -1 0 1 2 253 254 255 256 257
元の uint8
のベクトルの全点の反対称拡張を求めます。uint8
の範囲を超える値は最も近い uint8
の整数にマッピングされます。負の値については 0、255 よりも大きい値については 255 です。
wholePointAsym = wextend('1','asymw',dataVector,2)
wholePointAsym = 1x10 uint8 row vector
0 0 0 1 2 253 254 255 255 255
次に、double
のコピーと元の uint8
のベクトルの半分の点の反対称拡張を求めます。
halfPointAsymDouble = wextend('1','asymh',dataVectorDouble,2)
halfPointAsymDouble = 1×10
-1 0 0 1 2 253 254 255 -255 -254
halfPointAsym = wextend('1','asymh',dataVector,2)
halfPointAsym = 1x10 uint8 row vector
0 0 0 1 2 253 254 255 0 0
全点の反対称拡張の場合と同様に、拡張された uint8
のデータに含まれる負の値は 0 にマッピングされます。
平滑化拡張
double
のコピーと元の uint8
のベクトルの次数 0 の平滑化拡張を求めます。
smooth0Double = wextend('1','sp0',dataVectorDouble,2)
smooth0Double = 1×10
0 0 0 1 2 253 254 255 255 255
smooth0 = wextend('1','sp0',dataVector,2)
smooth0 = 1x10 uint8 row vector
0 0 0 1 2 253 254 255 255 255
結果は同一になります。次に、各ベクトルの次数 1 の平滑化拡張を求めます。
smooth1Double = wextend('1','sp1',dataVectorDouble,2)
smooth1Double = 1×10
-2 -1 0 1 2 253 254 255 256 257
smooth1 = wextend('1','sp1',dataVector,2)
smooth1 = 1x10 uint8 row vector
0 0 0 1 2 253 254 255 255 255
double
の結果の uint8
の範囲を超える値は、uint8
の拡張では最も近い uint8
の値にマッピングされます。
int8
データの範囲限界値を超える拡張
値がデータ型の範囲の限界値に達しているか限界値に近い状態で、int8
のデータに対して対称拡張、反対称拡張、および平滑化拡張を実行して影響を観察します。
対称拡張
int8
の整数の最小値は で最大値は 127 です。それらの限界値を含む int8
の整数のベクトルを作成します。
dataVector = int8([-128 -127 -126 125 126 127])
dataVector = 1x6 int8 row vector
-128 -127 -126 125 126 127
データの全点および半分の点の対称拡張を求めます。ベクトルの値を左右に 2 つずつ拡張します。
wholePointSym = wextend('1','symw',dataVector,2)
wholePointSym = 1x10 int8 row vector
-126 -127 -128 -127 -126 125 126 127 126 125
halfPointSym = wextend('1','symh',dataVector,2)
halfPointSym = 1x10 int8 row vector
-127 -128 -128 -127 -126 125 126 127 127 126
対称的に拡張した場合、値が int8
の範囲を超えることはありません。
反対称拡張
ベクトルの double
型のコピーを作成し、そのコピーの全点の反対称拡張を求めます。この拡張には、 よりも小さい負の値と 127 よりも大きい値が含まれます。
dataVectorDouble = double(dataVector); wholePointsAsymDouble = wextend('1','asymw',dataVectorDouble,2)
wholePointsAsymDouble = 1×10
-130 -129 -128 -127 -126 125 126 127 128 129
元の int8
のベクトルの全点の反対称拡張を求めます。int8
の範囲を超える値は最も近い int8
の整数にマッピングされます。 よりも小さい値については 、127 よりも大きい値については 127 です。
wholePointAsym = wextend('1','asymw',dataVector,2)
wholePointAsym = 1x10 int8 row vector
-128 -128 -128 -127 -126 125 126 127 127 127
次に、double
のコピーと元の int8
のベクトルの半分の点の反対称拡張を求めます。
halfPointAsymDouble = wextend('1','asymh',dataVectorDouble,2)
halfPointAsymDouble = 1×10
127 128 -128 -127 -126 125 126 127 -127 -126
halfPointAsym = wextend('1','asymh',dataVector,2)
halfPointAsym = 1x10 int8 row vector
127 127 -128 -127 -126 125 126 127 -127 -126
double
の結果の最初の値は 127 であり、これは int8
の整数として表現できます。2 番目の値は 128 であり、これは int8
の整数として表現できません。したがって、int8
の結果では 127 にマッピングされます。double
型の結果の残りの値は、いずれも int8
の整数として表現できます。
平滑化拡張
double
のコピーと元の int8
のベクトルの次数 0 の平滑化拡張を求めます。
smooth0Double = wextend('1','sp0',dataVectorDouble,2)
smooth0Double = 1×10
-128 -128 -128 -127 -126 125 126 127 127 127
smooth0 = wextend('1','sp0',dataVector,2)
smooth0 = 1x10 int8 row vector
-128 -128 -128 -127 -126 125 126 127 127 127
結果は同一になります。次に、各ベクトルの次数 1 の平滑化拡張を求めます。
smooth1Double = wextend('1','sp1',dataVectorDouble,2)
smooth1Double = 1×10
-130 -129 -128 -127 -126 125 126 127 128 129
smooth1 = wextend('1','sp1',dataVector,2)
smooth1 = 1x10 int8 row vector
-128 -128 -128 -127 -126 125 126 127 127 127
double
の結果の int8
の範囲を超える値は、int8
の拡張では最も近い int8
の値にマッピングされます。
入力引数
TYPE
— 拡張方法
1 | '1'
| '1d'
| '1D'
| 2 | '2'
| '2d'
| '2D'
| 'ar'
| 'addrow'
| 'ac'
| 'addcol'
入力で使用される拡張方法。次に示す値のいずれかとして指定します。
TYPE | 説明 |
---|---|
1 、'1' 、'1d' 、または '1D' | 1 次元拡張 |
2 、'2' 、'2d' 、または '2D' | 2 次元拡張 |
'ar' または 'addrow' | 行を追加 |
'ac' または 'addcol' | 列を追加 |
データ型: double
| char
MODE
— 固有の拡張
'zpd'
| 'sp0'
| 'spd'
| 'sp1'
| 'sym'
| 'symh'
| 'symw'
| 'asym'
| 'asymh'
| 'asymw'
| 'ppd'
| 'per'
入力の拡張に使用する固有の拡張方法。次に示す値のいずれかとして指定します。詳細については、dwtmode
を参照してください。
MODE | 説明 |
---|---|
'zpd' | ゼロ拡張 |
'sp0' | 次数 0 の平滑化拡張 |
'spd' (または 'sp1' ) | 次数 1 の平滑化拡張 |
'sym' または 'symh' | 対称パディング (半分の点): 境界値の対称的な複製 |
'symw' | 対称パディング (全点): 境界値の対称的な複製 |
'asym' または 'asymh' | 反対称パディング (半分の点): 境界値の反対称の複製 |
'asymw' | 反対称パディング (全点): 境界値の反対称の複製 |
'ppd' | 周期化拡張 (1) |
'per' | 周期化拡張 (2) 信号長が奇数の場合、 |
対称拡張モードの詳細については、[1]を参照してください。
メモ
拡張モード 'sp0'
および 'spd'
(または 'sp1'
) では、データを内部的に倍精度にキャストしてから拡張を実行します。整数データ型の場合、次のいずれかの状況になると wextend
で警告が出力されます。
倍精度への変換により、精度が低下する場合。
要求された拡張により、結果の整数が倍精度の数値で連続した整数を正確に表現できる範囲を超える場合。
データ型: char
X
— 入力データ
実数値のベクトルまたは行列
入力データ。実数値のベクトルまたは行列として指定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
LEN
— 拡張の長さ
非負の整数 | 非負の整数の 2 要素ベクトル
拡張の長さ。非負の整数または非負の整数の 2 要素ベクトルとして指定します。行列を拡張する場合は LEN
を [LROW,LCOL]
として表現します。LROW
は追加する行の数、LCOL
は追加する列の数です。行列の 2 次元拡張を実行する場合は、LEN
を単一の整数として指定すると両方の方向に同じ量だけ拡張できます。
長さ 0 の拡張は null 拡張と等価です。
例: wextend('2D','sym',[1 2 3 4;5 6 7 8],[2 0])
は、上下に 2 行ずつだけ拡張します。
LOC
— 拡張の位置
'l'
| 'u'
| 'r'
| 'd'
| 'b'
| 'n'
| 2 文字の配列
拡張の位置。次のいずれかまたはペアとして指定します。
'l'
— 左に拡張'u'
— 上に拡張'r'
— 右に拡張'd'
— 下に拡張'b'
— 両側を拡張'n'
— Null 拡張
LOC
の有効な値と既定値および LEN
の動作は、指定した TYPE
によって異なります。
TYPE | LOC |
---|---|
1, '1', 1d' または '1D' | 'l' 、'u' 、'r' 、'd' 、'b' 、または 'n' 例: wextend('1D','zpd',X,3,'r') は、入力ベクトル X を右に 3 要素拡張します。既定値: 'b' LEN は拡張の長さです。 |
2, '2', '2d' または '2D' | [LOCROW,LOCCOL] 。LOCROW および LOCCOL は 1 次元拡張の位置または 'n' (なし) です。例: wextend('2D','zpd',X,[2 3],'ub') は、入力ベクトルまたは入力行列 X を上に 2 行、両側に 3 列拡張します。既定値: 'bb' LEN は追加する行と列の数です。[LROW,LCOL] として指定します。 |
'ar' または 'addrow' | 'l' 、'u' 、'r' 、'd' 、'b' 、または 'n' 例: wextend('addrow','zpd',X,4,'d') は、入力ベクトルまたは入力行列 X を下に 4 行拡張します。既定値: 'b' LEN は追加する行の数です。 |
'ac' または 'addcol' | 'l' 、'u' 、'r' 、'd' 、'b' 、または 'n' 例: wextend('addcol','zpd',X,1,'l') は、入力ベクトルまたは入力行列 X を左に 1 列拡張します。既定値: 'b' LEN は追加する列の数です。 |
ヒント
ほとんどのウェーブレットの用途では、周期的拡張または対称拡張が効果的です。
アルゴリズム
値が入力のデータ型の範囲を超える場合、wextend
はその値を入力のデータ型の最も近い値にマッピングします。データ型の範囲を超えるデータの拡張の例については、uint8 データの範囲限界値を超える拡張およびint8 データの範囲限界値を超える拡張を参照してください。
参照
[1] Strang, G., and T. Nguyen. Wavelets and Filter Banks. Wellesley, MA: Wellesley-Cambridge Press, 1996.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
次のすべての条件に当てはまる場合、MATLAB® が行ベクトルを返す状況で生成コードは列ベクトルを返すことがあります。
TYPE
で 1 次元拡張を指定している。入力
X
が可変サイズのベクトルである。入力
X
が可変長の行ベクトル (1 行 : 列) でない。
コード生成では、形状の不一致に関する警告メッセージやエラー メッセージは出力されません。生成コードから返される出力ベクトルの値は MATLAB から返される出力ベクトルの値と一致します。
この場合、行ベクトルを返すコードを生成するには、
X
の代わりにX(:).'
を渡します。入力
X
はdouble
型でなければなりません。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意および制限:
'sym'
および'per'
拡張モードのみサポートしています。サポートされている構文は
YEXT = wextend(TYPE,MODE,X,LEN)
のみです。LOC
入力引数はサポートされていません。1 次元拡張では既定の場所
'b'
が使用されます。2 次元拡張では既定の場所'bb'
が使用されます。
1 つの次元の拡張のみサポートしています。
LEN
入力引数の長さは 1 と等しくなければなりません。1 次元拡張では次の拡張方法のみサポートしています。1、
'1'
、'1d'
、および'1D'
。2 次元拡張では次の拡張方法のみサポートしています。
'addrow'
および'addcol'
。
バージョン履歴
R2006a より前に導入
参考
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)