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 の整数の最小値は 0 で最大値は 255 です。それらの限界値を含む uint8 の整数のベクトルを作成します。
dataVector = uint8([0 1 2 253 254 255])
dataVector = 1×6 uint8 row vector
0 1 2 253 254 255
ベクトルの全点および半分の点の対称拡張を求めます。ベクトルの値を左右に 2 つずつ拡張します。対称的に拡張した場合、値が uint8 の範囲を超えることはありません。
wholePointSym = wextend("1","symw",dataVector,2)
wholePointSym = 1×10 uint8 row vector
2 1 0 1 2 253 254 255 254 253
halfPointSym = wextend("1","symh",dataVector,2)
halfPointSym = 1×10 uint8 row vector
1 0 0 1 2 253 254 255 255 254
反対称拡張
ベクトルの 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 = 1×10 uint8 row vector
0 0 0 1 2 253 254 255 255 255
次に、double のコピーと元の uint8 のベクトルの半分の点の反対称拡張を求めます。全点の反対称拡張の場合と同様に、拡張された uint8 のデータに含まれる負の値は 0 にマッピングされます。
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 = 1×10 uint8 row vector
0 0 0 1 2 253 254 255 0 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 = 1×10 uint8 row vector
0 0 0 1 2 253 254 255 255 255
各ベクトルの次数 1 の平滑化拡張を求めます。double の結果の uint8 の範囲を超える値は、uint8 の拡張では最も近い uint8 の値にマッピングされます。
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 = 1×10 uint8 row vector
0 0 0 1 2 253 254 255 255 255
値がデータ型の範囲の限界値に達しているか限界値に近い状態で、int8 のデータに対して対称拡張、反対称拡張、および平滑化拡張を実行して影響を観察します。
対称拡張
int8 の整数の最小値は –128 で最大値は 127 です。それらの限界値を含む int8 の整数のベクトルを作成します。
dataVector = int8([-128 -127 -126 125 126 127])
dataVector = 1×6 int8 row vector
-128 -127 -126 125 126 127
データの全点および半分の点の対称拡張を求めます。ベクトルの値を左右に 2 つずつ拡張します。対称的に拡張した場合、値が int8 の範囲を超えることはありません。
wholePointSym = wextend("1","symw",dataVector,2)
wholePointSym = 1×10 int8 row vector
-126 -127 -128 -127 -126 125 126 127 126 125
halfPointSym = wextend("1","symh",dataVector,2)
halfPointSym = 1×10 int8 row vector
-127 -128 -128 -127 -126 125 126 127 127 126
反対称拡張
ベクトルの double 型のコピーを作成し、そのコピーの全点の反対称拡張を求めます。この拡張には、-128 よりも小さい負の値と 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 の整数にマッピングされます。-128 よりも小さい値については -128、127 よりも大きい値については 127 です。
wholePointAsym = wextend("1","asymw",dataVector,2)
wholePointAsym = 1×10 int8 row vector
-128 -128 -128 -127 -126 125 126 127 127 127
次に、double のコピーと元の int8 のベクトルの半分の点の反対称拡張を求めます。double の結果の最初の値は 127 であり、これは int8 の整数として表現できます。2 番目の値は 128 であり、これは int8 の整数として表現できません。したがって、int8 の結果では 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 = 1×10 int8 row vector
127 127 -128 -127 -126 125 126 127 -127 -126
平滑化拡張
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 = 1×10 int8 row vector
-128 -128 -128 -127 -126 125 126 127 127 127
各ベクトルの次数 1 の平滑化拡張を求めます。double の結果の int8 の範囲を超える値は、int8 の拡張では最も近い int8 の値にマッピングされます。
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 = 1×10 int8 row vector
-128 -128 -128 -127 -126 125 126 127 127 127
入力引数
入力で使用される拡張方法。次に示す値のいずれかとして指定します。
type | 説明 |
|---|---|
1、"1"、"1d"、または "1D" | 1 次元拡張 |
2、"2"、"2d"、または "2D" | 2 次元拡張 |
"ar" または "addrow" | 行を追加 |
"ac" または "addcol" | 列を追加 |
データ型: double | char
入力の拡張に使用する固有の拡張方法。次に示す値のいずれかとして指定します。詳細については、dwtmode を参照してください。
mode | 説明 |
|---|---|
"zpd" | ゼロ パディング |
"sp0" | 次数 0 の平滑化拡張 |
"spd" (または "sp1") | 次数 1 の平滑化拡張 |
"sym" または "symh" | 対称パディング (半分の点): 境界値の対称的な複製 |
"symw" | 対称パディング (全点): 境界値の対称的な複製 |
"asym" または "asymh" | 反対称パディング (半分の点): 境界値の反対称の複製 |
"asymw" | 反対称パディング (全点): 境界値の反対称の複製 |
"ppd", "per" | 周期化拡張 信号長が奇数の場合、 |
対称拡張モードの詳細については、[1]を参照してください。
メモ
拡張モード "sp0" および "spd" (または "sp1") では、データを内部的に倍精度にキャストしてから拡張を実行します。整数データ型の場合、次のいずれかの状況になると wextend で警告が出力されます。
倍精度への変換により、精度が低下する場合。
要求された拡張により、結果の整数が倍精度の数値で連続した整数を正確に表現できる範囲を超える場合。
データ型: char
入力データ。実数値のベクトルまたは行列として指定します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
拡張の長さ。非負の整数または非負の整数の 2 要素ベクトルとして指定します。行列を拡張する場合は LEN を [LROW,LCOL] として表現します。LROW は追加する行の数、LCOL は追加する列の数です。行列の 2 次元拡張を実行する場合は、LEN を単一の整数として指定すると両方の方向に同じ量だけ拡張できます。
長さ 0 の拡張は null 拡張と等価です。
例: wextend("2D","sym",[1 2 3 4;5 6 7 8],[2 0]) は、上下に 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.
拡張機能
使用上の注意および制限:
次のすべての条件に当てはまる場合、MATLAB® が行ベクトルを返す状況で生成コードは列ベクトルを返すことがあります。
typeで 1 次元拡張を指定している。入力
xが可変サイズのベクトルである。入力
xが可変長の行ベクトル (1 行 : 列) でない。
コード生成では、形状の不一致に関する警告メッセージやエラー メッセージは出力されません。生成コードから返される出力ベクトルの値は MATLAB から返される出力ベクトルの値と一致します。
この場合、行ベクトルを返すコードを生成するには、
xの代わりにx(:).'を渡します。入力
xはdouble型でなければなりません。
wextend 関数は GPU 配列入力をサポートしますが、次の使用上の注意および制限があります。
wextendは、"sym"および"per"拡張モードのみをサポートします。サポートされている構文は
yext = wextend(type,mode,x,len)のみです。loc入力引数はサポートされていません。1 次元拡張では既定の場所
"b"が使用されます。2 次元拡張では既定の場所"bb"が使用されます。
1 つの次元の拡張のみサポートしています。
len入力引数の長さは 1 と等しくなければなりません。1 次元拡張では、拡張方法として、
1、"1"、"1d"、および"1D"のみをサポートしています。2 次元拡張では、拡張方法として、
"addrow"および"addcol"のみをサポートしています。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入
参考
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)