StationaryWaveletPacketTransform[data]
data 配列の定常ウェーブレットパケット変換(SWPT)を与える.
StationaryWaveletPacketTransform[data,wave]
ウェーブレット wave を使った定常ウェーブレットパケット変換を与える.
StationaryWaveletPacketTransform[data,wave,r]
r 個の細分化レベルを使う定常ウェーブレットパケット変換を与える.
StationaryWaveletPacketTransform
StationaryWaveletPacketTransform[data]
data 配列の定常ウェーブレットパケット変換(SWPT)を与える.
StationaryWaveletPacketTransform[data,wave]
ウェーブレット wave を使った定常ウェーブレットパケット変換を与える.
StationaryWaveletPacketTransform[data,wave,r]
r 個の細分化レベルを使う定常ウェーブレットパケット変換を与える.
詳細とオプション
- StationaryWaveletPacketTransformは,ウェーブレット係数の完全木が計算されるStationaryWaveletTransformを一般化したものである.
- StationaryWaveletPacketTransformはDiscreteWaveletDataオブジェクトを与える.
- DiscreteWaveletData dwd の特性は dwd["prop"]で得られる.使用可能な特性のリストは dwd["Properties"]で得られる.
- 結果のウェーブレット係数は入力 data と同じ深さ,同じ次元の配列である.
- data は次のいずれでもよい.
-
list 任意階数の数値配列 image 任意のImageオブジェクト audio AudioオブジェクトまたはサンプルされたSoundオブジェクト - 使用可能なウェーブレット wave
-
BattleLemarieWavelet[…] Bスプラインに基づいたBattle–Lemariéウェーブレット BiorthogonalSplineWavelet[…] Bスプラインに基づいたウェーブレット CoifletWavelet[…] Daubechiesウェーブレットの対称性変種 DaubechiesWavelet[…] Daubechiesウェーブレット HaarWavelet[…] 古典的なHaarウェーブレット MeyerWavelet[…] 周波数領域で定義されるウェーブレット ReverseBiorthogonalSplineWavelet[…] Bスプラインに基づいたウェーブレット(逆双対ウェーブレットと主ウェーブレット) ShannonWavelet[…] シンク関数に基づいたウェーブレット SymletWavelet[…] 最小非対称直交ウェーブレット - デフォルト wave はHaarWavelet[]である.
- 細分化レベル r の設定値を高くすると,スケールの大きい特徴が解決される.
- デフォルトの細分化レベル r は
で与えられる.ただし,
は data の最小次元である. - 細分化レベルがFullのとき,r は
で与えられる. - レベル
のウェーブレット係数の木は,粗い係数
と詳細化係数
からなる.
は入力 data を表す. - 前方変換は
,
,
,
で与えられる.ただし,
は対応する wspec のフィルタ長であり,
は入力 data の長さである. - 逆変換は
で与えられる.
はローパスフィルタ係数で,
はハイパスフィルタ係数である.どちらもそれぞれのウェーブレット族で定義される.- 使用可能なオプション
-
Method Automatic 使用するメソッド WorkingPrecision MachinePrecision 内部計算で使用する精度 - StationaryWaveletPacketTransformはデータに対して周期的充填を行う.
- InverseWaveletTransformは逆変換を与える.
- デフォルトで,InverseWaveletTransformは再構成の際に dwd["BasisIndex"]で表される係数を使う.また,WaveletBestBasisを使って計算や最適な底の設定を行う.
例題
すべて開く すべて閉じる例 (3)
dwd = StationaryWaveletPacketTransform[{0, 0, 1, 0, 0}]結果のDiscreteWaveletDataはウェーブレット係数の完全木を表す:
dwd["TreeView"]InverseWaveletTransform[dwd]a = Audio["ExampleData/rule30.wav"]dwd = StationaryWaveletPacketTransform[a, Automatic, 2]dwd[All, "Audio"]AudioLength[#[[2]]]& /@ %InverseWaveletTransform[dwd]Imageオブジェクトを変換する:
dwd = StationaryWaveletPacketTransform[[image], Automatic, 1]dwd[All, "Image"]InverseWaveletTransform[dwd]スコープ (33)
基本的な用法 (4)
DiscreteWaveletDataオブジェクトから有益な特性を抽出することができる:
dwd = StationaryWaveletPacketTransform[RandomReal[1, {16}], DaubechiesWavelet[4], 2]dwd["Properties"]dwd["DataDimensions"]dwd["Dimensions"]Normalを使ってすべてのウェーブレット係数を明示的に得る:
dwd = StationaryWaveletPacketTransform[Range[5]];Normal[dwd]Allを引数として使ってすべての係数を得ることもできる:
dwd[All]Automaticを使って逆変換で使われる係数だけを得る:
dwd[Automatic]"TreeView"または"WaveletIndex"を使ってどのウェーブレット係数が使えるかを調べる:
dwd = StationaryWaveletPacketTransform[Range[5]];dwd["TreeView"]dwd["WaveletIndex"]dwd[{0}]dwd[{0, 0}]ウェーブレット指標指定のリストに対応するいくつかのウェーブレット係数を抽出する:
dwd[{{0}, {0, 1}}]ウェーブレット指標がパターンにマッチするすべての係数を抽出する:
dwd[{_}]dwd[{{_, 0}, {_, 1}}]data = Table[Sin[x ^ 2] + RandomReal[{-0.2, 0.2}], {x, 0, 10, 0.02}];ListLinePlot[data]細分化レベルが低いと,より多くの信号エネルギーが{0,0}に残される:
dwd1 = StationaryWaveletPacketTransform[data, DaubechiesWavelet[4], 2];WaveletListPlot[dwd1, PlotLayout -> "CommonYAxis", Ticks -> Full]さらに細分化を進めると,{0,0}はより一層要素に分解される:
dwd2 = StationaryWaveletPacketTransform[data, DaubechiesWavelet[4], 3];WaveletListPlot[dwd2, PlotLayout -> "CommonYAxis", Ticks -> Full]ウェーブレット族 (10)
異なるウェーブレット族を使ってウェーブレットパケット変換を計算する:
data = Table[Sin[x ^ 2], {x, 0, 10, 0.02}];dwd1 = StationaryWaveletPacketTransform[data, DaubechiesWavelet[4], 3];
dwd2 = StationaryWaveletPacketTransform[data, SymletWavelet[4], 3];{WaveletListPlot[dwd1, PlotLayout -> "CommonXAxis"], WaveletListPlot[dwd2, PlotLayout -> "CommonXAxis"]}data = Table[4 Exp[-100 (t - 0.5) ^ 2] + Sin[5Pi t], {t, 0, 1, 0.01}];ListLinePlot[data]HaarWavelet(デフォルト):
dwd = StationaryWaveletPacketTransform[data, HaarWavelet[], 3];WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis", Filling -> Axis]data = Table[4 Exp[-100 (t - 0.5) ^ 2] + Sin[5Pi t], {t, 0, 1, 0.01}];dwd = StationaryWaveletPacketTransform[data, DaubechiesWavelet[2], 3];WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis", Filling -> Axis]data = Table[4 Exp[-100 (t - 0.5) ^ 2] + Sin[5Pi t], {t, 0, 1, 0.01}];dwd = StationaryWaveletPacketTransform[data, BattleLemarieWavelet[3], 3];WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis", Filling -> Axis]data = Table[4 Exp[-100 (t - 0.5) ^ 2] + Sin[5Pi t], {t, 0, 1, 0.01}];dwd = StationaryWaveletPacketTransform[data, BiorthogonalSplineWavelet[4, 2], 3];WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis", Filling -> Axis]data = Table[4 Exp[-100 (t - 0.5) ^ 2] + Sin[5Pi t], {t, 0, 1, 0.01}];dwd = StationaryWaveletPacketTransform[data, CoifletWavelet[2], 3];WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis", Filling -> Axis]data = Table[4 Exp[-100 (t - 0.5) ^ 2] + Sin[5Pi t], {t, 0, 1, 0.01}];dwd = StationaryWaveletPacketTransform[data, MeyerWavelet[3], 3];WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis", Filling -> Axis]ReverseBiorthogonalSplineWavelet:
data = Table[4 Exp[-100 (t - 0.5) ^ 2] + Sin[5Pi t], {t, 0, 1, 0.01}];dwd = StationaryWaveletPacketTransform[data, ReverseBiorthogonalSplineWavelet[4, 2], 3];WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis", Filling -> Axis]data = Table[4 Exp[-100 (t - 0.5) ^ 2] + Sin[5Pi t], {t, 0, 1, 0.01}];dwd = StationaryWaveletPacketTransform[data, ShannonWavelet[8], 3];WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis", Filling -> Axis]data = Table[4 Exp[-100 (t - 0.5) ^ 2] + Sin[5Pi t], {t, 0, 1, 0.01}];dwd = StationaryWaveletPacketTransform[data, SymletWavelet[3], 3];WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis", Filling -> Axis]一次元データ (6)
WaveletListPlotを使って係数を共通水平軸上にプロットする:
dwd = StationaryWaveletPacketTransform[Table[Sin[x ^ 2], {x, 0, 10, 0.02}], Automatic, 3];WaveletListPlot[dwd]WaveletListPlot[dwd, PlotLayout -> "CommonYAxis"]WaveletScalogramを使い,係数を時間と細分化レベルの関数として可視化する:
dwd = StationaryWaveletPacketTransform[Table[Sin[20x] + Sin[10x], {x, 1, 10, 0.01}]];マウスポインタが係数上に置かれると係数指標がツールチップとして現れる:
WaveletScalogram[dwd, All]data = Table[1, {x, 0, 10, 0.02}];ListLinePlot[data]dwd = StationaryWaveletPacketTransform[data, DaubechiesWavelet[4], 3];WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis", ImageSize -> Medium, Filling -> Axis, Ticks -> Full]分解可能な最高の周波数(ナイキスト(Nyquist)周波数)で振動するデータ:
data = Table[(-1)^n, {n, 80}];ListLinePlot[data]小さくないのは第1詳細化係数{1}とその粗い子係数{1,0,0,…}のみである:
dwd = StationaryWaveletPacketTransform[data, Automatic, 3];WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis", Ticks -> Full]data = Table[Piecewise[{{1, 1 < x < 3.1}}, 0], {x, 0, 4, 0.02}];ListLinePlot[data]粗い係数{0,…}はデータと同じ大きいスケールの構造を持つ:
dwd = StationaryWaveletPacketTransform[data, Automatic, 3];WaveletListPlot[dwd, {0..}, FrameTicks -> Full]WaveletListPlot[dwd, Except[{0..}]]data = Table[Piecewise[{{5, n <= 30}, {2 + (-1)^n, Inequality[30, Less, n, LessEqual, 60]}, {5, 60 < n}}], {n, 90}];ListLinePlot[data, PlotRange -> {0, 5}]dwd = StationaryWaveletPacketTransform[data, Automatic, 3];WaveletListPlot[dwd, {0..}, Ticks -> Full]第1詳細化係数{1}とその粗い子係数{1,0,…}は振動を表す:
WaveletListPlot[dwd, {1, 0...}, Ticks -> Full]WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis", Ticks -> Full]二次元データ (5)
dwd = StationaryWaveletPacketTransform[(| | | | | |
| - | - | - | - | - |
| 0 | 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 0 | 0 | 1 | 0 | 0 |)]dwd[{"TreeView", Center}]InverseWaveletTransform[dwd]//Chop//MatrixFormdwd[…,"MatrixPlot"]を使い,各係数をMatrixPlotで可視化する:
dwd = StationaryWaveletPacketTransform[DiamondMatrix[32], Automatic, 1]dwd[Automatic, "MatrixPlot"]dwd2 = StationaryWaveletPacketTransform[DiamondMatrix[32], Automatic, 2];dwd2[{{3}, {3, __}}, "MatrixPlot"]二次元では,各方向のフィルタリング操作のベクトルが計算できる:
Tuples[{0, 1}, 2] /. {0 -> "lowpass", 1 -> "highpass"}これらのベクトルを二進数展開として解釈するとウェーブレット指標の数が得られる:
FromDigits[#, 2]& /@ Tuples[{0, 1}, 2]Haarウェーブレットのローパスフィルタとハイパスフィルタを得る:
{lp, hp} = Map[Last, WaveletFilterCoefficients[HaarWavelet[], {"PrimalLowpass", "PrimalHighpass"}], {2}]Apply[KroneckerProduct, Tuples[{lp, hp}, 2], {1}]Map[MatrixPlot, %]step[{a_, b_, c_, d_}] :=
ArrayFlatten[{{ConstantArray[a, {3, 3}], ConstantArray[b, {3, 5}]}, {ConstantArray[c, {5, 3}], ConstantArray[d, {5, 5}]}}];MatrixPlot[step[{0, 1, 0, 1}], FrameTicks -> False]すべての水平および対角詳細化係数,つまりウェーブレット指標{___,2|3,___}は0である:
StationaryWaveletPacketTransform[step[{0, 1, 0, 1}], Automatic, 2][Automatic, {"MatrixPlot", ImageSize -> 40}]MatrixPlot[step[{0, 0, 1, 1}], FrameTicks -> False]すべての垂直および対角詳細化係数,つまりウェーブレット指標{___,1|3,___}は0である:
StationaryWaveletPacketTransform[step[{0, 0, 1, 1}], Automatic, 2][Automatic, {"MatrixPlot", ImageSize -> 40}]より高次元のデータ (2)
data = RandomReal[1, {16, 16, 16}];dwd = StationaryWaveletPacketTransform[data, Automatic, 2]dwd["WaveletIndex"]Norm[Flatten[data - InverseWaveletTransform[dwd]]]data = CrossMatrix[All, {8, 8, 8}];Graphics3D[{Red, Cuboid /@ Position[data, 1]}]dwd = StationaryWaveletPacketTransform[data, Automatic, 2]Table[i -> Graphics3D[{If[Positive[Extract[dwd[i][[1, 2]], #]], Red, Green], Cuboid[#]}& /@ Position[dwd[i][[1, 2]], u_ /; Abs[u] > 0], PlotRange -> {{1, 9}, {1, 9}, {1, 9}}], {i, Cases[dwd["WaveletIndex"], {___, 0}]}]もとのデータのエネルギーは変換された係数内に保存されている:
Total[Flatten[data]^2] == Total[Flatten[dwd[Automatic][[All, 2]]]^2]音声データ (2)
Audioオブジェクトを変換する:
a = ExampleData[{"Audio", "Apollo11ReturnSafely"}];dwd = StationaryWaveletPacketTransform[a]InverseWaveletTransform[dwd]デフォルトで,係数は各サウンドチャンネル用のデータのリストとして与えられる:
dwd = StationaryWaveletPacketTransform[ExampleData[{"Audio", "PianoScale"}]];Dimensions[{1, 1} /. dwd[{1, 1}]]{1,1}係数をAudioオブジェクトとして取得する:
dwd[{1, 1}, "Audio"]{1,1}係数のAudioオブジェクトとしての逆変換:
dwd[{1, 1}, {"Audio", "Inverse"}]サウンドデータ (2)
Soundオブジェクトを変換する:
snd = ExampleData[{"Sound", "Apollo11ReturnSafely"}]dwd = StationaryWaveletPacketTransform[snd]InverseWaveletTransform[dwd]MenuViewを使ってすべての係数をブラウズする:
dwd = StationaryWaveletPacketTransform[ExampleData[{"Sound", "Clarinet"}]];MenuView[dwd[All, "Sound"]]画像データ (2)
Imageオブジェクトを変換する:
img = Image[DiamondMatrix[All, {64, 64}]]dwd = StationaryWaveletPacketTransform[img, HaarWavelet[], 3]逆変換するとImageオブジェクトが再構築される:
InverseWaveletTransform[dwd]ウェーブレット係数は通常各画像チャンネルのデータのリストとして与えられる:
dwd = StationaryWaveletPacketTransform[[image], HaarWavelet[], 2];Dimensions[{1, 1} /. dwd[{1, 1}]]代りに,すべての係数をImageオブジェクトとして得る:
dwd[All, "Image"]//Shortカラーレベルの再スケールを施していない生のImageオブジェクトを得る:
dwd[All, {"Image", "ImageFunction" -> Identity}]//Short{0,1}係数の逆変換をImageオブジェクトとして得る:
dwd[{0, 1}, {"Image", "Inverse"}]一般化と拡張 (3)
StationaryWaveletPacketTransformは記号による量の配列に使うことができる:
dwd = StationaryWaveletPacketTransform[{a, b, c, d}, WorkingPrecision -> ∞];dwd[Automatic]//SimplifyInverseWaveletTransform[dwd]//Simplifydwd = StationaryWaveletPacketTransform[{1, 2, 5, 2}, WorkingPrecision -> 20];dwd[Automatic]data = Exp[I RandomReal[1, 4]];dwd = StationaryWaveletPacketTransform[data]dwd[Automatic]オプション (3)
WorkingPrecision (3)
デフォルトで,WorkingPrecision->MachinePrecisionが使われる:
data = RandomInteger[1, {10}];dwd1 = StationaryWaveletPacketTransform[data]dwd2 = StationaryWaveletPacketTransform[data, WorkingPrecision -> MachinePrecision]dwd1 == dwd2data = {0, 0, 1, 1};dwd = Normal@StationaryWaveletPacketTransform[data, Automatic, 1, WorkingPrecision -> 20]{Precision[dwd], Accuracy[dwd]}WorkingPrecision->∞を使って厳密計算を行う:
data = RandomInteger[10, {4}];Normal@StationaryWaveletPacketTransform[data, WorkingPrecision -> ∞]//Simplify特性と関係 (10)
StationaryWaveletPacketTransformはウェーブレット係数の完全木を計算する:
swpt = StationaryWaveletPacketTransform[{1, 1, 3, 1, 1}];swpt[{"TreeView", Left}]StationaryWaveletTransformは係数の完全木の部分木を計算する:
swt = StationaryWaveletTransform[{1, 1, 3, 1, 1}];swt[{"TreeView", Left}]DiscreteWaveletPacketTransform係数は細分化の各レベルで長さが半分になる:
Normal[DiscreteWaveletPacketTransform[{1, 2, 3, 4}]]Normal[DiscreteWaveletPacketTransform[{2, 3, 4, 1}]]StationaryWaveletPacketTransform係数はデータと同じ長さである:
Normal[StationaryWaveletPacketTransform[{1, 2, 3, 4}]]Normal[StationaryWaveletPacketTransform[{2, 3, 4, 1}]]デフォルトの細分化はMin[Round[Log2[Min[Dimensions[data]]]],4]で与えられる:
data = RandomReal[1, {100}];r = Min[Round[Log2[Min[Dimensions[data]]]], 4]StationaryWaveletPacketTransform[data] == StationaryWaveletPacketTransform[data, Automatic, r]data = RandomReal[1, {100, 10, 10}];r = Min[Round[Log2[Min[Dimensions[data]]]], 4]StationaryWaveletPacketTransform[data] == StationaryWaveletPacketTransform[data, Automatic, r]data = RandomReal[1, {100}];swt = StationaryWaveletPacketTransform[data];Norm[data] == Norm[Flatten[Last /@ swt[Automatic]]]双直交ウェーブレット族用のエネルギーのノルムはほぼ保存される:
data = RandomReal[1, {100}];swt = StationaryWaveletPacketTransform[data, BiorthogonalSplineWavelet[2, 4]];Norm[data]Norm[Flatten[Last /@ swt[Automatic]]]data = RandomReal[1, 16];swt = StationaryWaveletPacketTransform[data, HaarWavelet[]];r = swt["Refinement"]swt[ConstantArray[0, {r}]]Mean[data]data = Table[DiscreteDelta[n], {n, -2, 2}]dwd = StationaryWaveletPacketTransform[data];dwd["TreeView"]data1 = InverseWaveletTransform[dwd, Automatic, {0, 0}]data2 = InverseWaveletTransform[dwd, Automatic, {0, 1}]data3 = InverseWaveletTransform[dwd, Automatic, {1, 0}]data4 = InverseWaveletTransform[dwd, Automatic, {1, 1}]data1 + data2 + data3 + data4low[v_] := ListCorrelate[{1 / 2, 1 / 2}, v, -1]
high[v_] := ListCorrelate[{-1 / 2, 1 / 2}, v, -1]HaarWaveletTransform[v_] := {{0} -> low[v], {1} -> high[v]};HaarWaveletTransform[{a, b, c, d}]StationaryWaveletPacketTransformで計算する:
StationaryWaveletPacketTransform[{a, b, c, d}, HaarWavelet[], 1, WorkingPrecision -> ∞][All]f2d[fx_, fy_] := Composition[Map[fy, #]&, Map[fx, #]&]low[v_] := ListCorrelate[{1 / 2, 1 / 2}, v, -1]
high[v_] := ListCorrelate[{-1 / 2, 1 / 2}, v, -1]data = Table[Sin[x y], {x, -2, 2, 4 / 63}, {y, -2, 2, 4 / 63}];Table[MatrixPlot[f2d[fx, fy][data], PlotLabel -> {fx, fy}, FrameTicks -> None], {fx, {low, high}}, {fy, {low, high}}]//FlattenHaarWaveletを使ってStationaryWaveletPacketTransformと比較する:
dwd = StationaryWaveletPacketTransform[data, HaarWavelet[], 1];Table[MatrixPlot[Last[p], PlotLabel -> First[p], FrameTicks -> None], {p, Normal[dwd]}]dwds = Map[StationaryWaveletPacketTransform, ColorSeparate[[image]]]w = Image[Table[First[{0} /. Normal[t]], {t, dwds}], Interleaving -> False]もと画像のStationaryWaveletPacketTransformの{0}係数と比較する:
dwd = StationaryWaveletPacketTransform[[image]];{0} /. dwd[All, {"Image", "ImageFunction" -> Identity}]ImageSubtract[w, %]関連するガイド
-
▪
- ウェーブレット
テキスト
Wolfram Research (2010), StationaryWaveletPacketTransform, Wolfram言語関数, https://reference.wolfram.com/language/ref/StationaryWaveletPacketTransform.html (2017年に更新).
CMS
Wolfram Language. 2010. "StationaryWaveletPacketTransform." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2017. https://reference.wolfram.com/language/ref/StationaryWaveletPacketTransform.html.
APA
Wolfram Language. (2010). StationaryWaveletPacketTransform. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/StationaryWaveletPacketTransform.html
BibTeX
@misc{reference.wolfram_2026_stationarywaveletpackettransform, author="Wolfram Research", title="{StationaryWaveletPacketTransform}", year="2017", howpublished="\url{https://reference.wolfram.com/language/ref/StationaryWaveletPacketTransform.html}", note=[Accessed: 03-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_stationarywaveletpackettransform, organization={Wolfram Research}, title={StationaryWaveletPacketTransform}, year={2017}, url={https://reference.wolfram.com/language/ref/StationaryWaveletPacketTransform.html}, note=[Accessed: 03-November-2026]}