DiscreteWaveletPacketTransform[data]
配列 data の離散ウェーブレットパケット変換(DWPT)を与える.
DiscreteWaveletPacketTransform[data,wave]
ウェーブレット wave を使って離散ウェーブレットパケット変換を与える.
DiscreteWaveletPacketTransform[data,wave,r]
r レベルの細分化を使って離散ウェーブレットパケット変換を与える.
DiscreteWaveletPacketTransform
DiscreteWaveletPacketTransform[data]
配列 data の離散ウェーブレットパケット変換(DWPT)を与える.
DiscreteWaveletPacketTransform[data,wave]
ウェーブレット wave を使って離散ウェーブレットパケット変換を与える.
DiscreteWaveletPacketTransform[data,wave,r]
r レベルの細分化を使って離散ウェーブレットパケット変換を与える.
詳細とオプション
- DiscreteWaveletPacketTransformはDiscreteWaveletDataオブジェクトを与える.
- DiscreteWaveletData dwd の特性は dwd["prop"]で求まる.使用可能な特性のリストは dwd["Properties"]で求まる.
- DiscreteWaveletPacketTransformは,ウェーブレットの完全木が計算されたDiscreteWaveletTransformを一般化したものである.
- 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 を表す. - 前方変換は
,
,
,
で与えられる. - 逆変換は
で与えられる.
はローパスフィルタ係数で,
はハイパスフィルタ係数である.どちらも各ウェーブレット族で定義される.
と
の次元は
で与えられる.ただし,
は入力 data の次元であり,fl は対応する wspec のフィルタ長である.- 使用可能なオプション
-
Method Automatic 使用するメソッド Padding "Periodic" 境界を越えてデータをどのように延長するか WorkingPrecision MachinePrecision 内部計算で使用する精度 - Paddingの設定値はArrayPadで使用できるものと同じである.
- InverseWaveletTransformは逆変換を与える.
- デフォルトで,InverseWaveletTransformは再構築に dwd["BasisIndex"]で表される係数を使う.WaveletBestBasisを使って最適化基底を計算し設定する.
例題
すべて開く すべて閉じる例 (3)
dwd = DiscreteWaveletPacketTransform[{0, 0, 1, 0, 0}]結果のDiscreteWaveletDataはウェーブレット係数の完全木を表す:
dwd["TreeView"]InverseWaveletTransform[dwd]a = Audio["ExampleData/rule30.wav"]dwd = DiscreteWaveletPacketTransform[a, Automatic, 2]dwd[All, "Audio"]InverseWaveletTransform[dwd]Imageオブジェクトを変換する:
dwd = DiscreteWaveletPacketTransform[[image], Automatic, 2]dwd[All, "Image"]InverseWaveletTransform[dwd]スコープ (34)
基本的な用法 (5)
DiscreteWaveletDataオブジェクトから役に立つ特性を抽出することができる:
dwd = DiscreteWaveletPacketTransform[RandomReal[1, {16}], DaubechiesWavelet[4], 2]dwd["Properties"]dwd["DataDimensions"]dwd["Dimensions"]Normalを使ってすべてのウェーブレット係数を明示的に得る:
dwd = DiscreteWaveletPacketTransform[Range[5]];Normal[dwd]また,Allを引数として使ってすべての係数を得る:
dwd[All]Automaticを使って逆変換で使われる係数のみを得る:
dwd[Automatic]"TreeView"または"IndexMap"を使ってどのウェーブレット係数が使えるかを見る:
dwd = DiscreteWaveletPacketTransform[Range[5]];dwd["TreeView"]dwd["IndexMap"]dwd[{0}]dwd[{0, 0}]ウェーブレット指標指定のリストに対応するいくつかのウェーブレット係数を抽出する:
dwd[{{0}, {0, 1}}]ウェーブレット指標がパターンにマッチするすべての係数を抽出する:
dwd[{_}]dwd[{{_, 0}, {_, 1}}]WaveletBestBasisを使ってウェーブレットパケット係数の最適化基底を計算する:
dwd = DiscreteWaveletPacketTransform[Table[Sin[x ^ 2], {x, 0, 10, 0.2}]];dwd = WaveletBestBasis[dwd]dwd["BestBasisBlockView"]dwd["BasisIndex"]計算された最良基底はデフォルトでWaveletListPlotのような関数で使われる:
WaveletListPlot[dwd]data = Table[Sin[x ^ 2] + RandomReal[{-0.2, 0.2}], {x, 0, 10, 0.02}];ListLinePlot[data]細分化レベルが低いと,信号エネルギーの多くの部分が{0,0}に残される:
dwd1 = DiscreteWaveletPacketTransform[data, DaubechiesWavelet[4], 2];WaveletListPlot[dwd1, PlotLayout -> "CommonYAxis"]より高い細分化レベルを使うと,{0,0}はさらに要素に分解される:
dwd2 = DiscreteWaveletPacketTransform[data, DaubechiesWavelet[4], 3];WaveletListPlot[dwd2, PlotLayout -> "CommonYAxis"]ウェーブレット族 (10)
いろいろなウェーブレット族を使ってウェーブレットパケット変換を計算する:
data = Table[Sin[x ^ 2], {x, 0, 10, 0.02}];dwd1 = DiscreteWaveletPacketTransform[data, DaubechiesWavelet[4], 3];
dwd2 = DiscreteWaveletPacketTransform[data, SymletWavelet[4], 3];{WaveletListPlot[dwd1], WaveletListPlot[dwd2]}data = Table[4 Exp[-100 (t - 0.5) ^ 2] + Sin[5Pi t], {t, 0, 1, 0.01}];ListLinePlot[data]HaarWavelet(デフォルト):
dwd = DiscreteWaveletPacketTransform[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 = DiscreteWaveletPacketTransform[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 = DiscreteWaveletPacketTransform[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 = DiscreteWaveletPacketTransform[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 = DiscreteWaveletPacketTransform[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 = DiscreteWaveletPacketTransform[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 = DiscreteWaveletPacketTransform[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 = DiscreteWaveletPacketTransform[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 = DiscreteWaveletPacketTransform[data, SymletWavelet[3], 3];WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis", Filling -> Axis]ベクトルデータ (6)
WaveletListPlotを使って,係数を共通の水平軸上でプロットする:
dwd = DiscreteWaveletPacketTransform[Table[Sin[x ^ 2], {x, 0, 10, 0.02}], Automatic, 3];WaveletListPlot[dwd, FrameTicks -> Full]WaveletListPlot[dwd, PlotLayout -> "CommonYAxis"]WaveletScalogramを使って係数を時間と細分化レベルの関数として可視化する:
dwd = DiscreteWaveletPacketTransform[Table[Sin[20x] + Sin[10x], {x, 1, 10, 0.01}]];マウスポインタが係数上に来ると係数指標がツールチップとして表示される:
WaveletScalogram[dwd, All]データの最高の木としての表現のWaveletScalogram:
WaveletScalogram[WaveletBestBasis[dwd]]data = Table[1, {x, 0, 10, 0.02}];ListLinePlot[data]dwd = DiscreteWaveletPacketTransform[data, DaubechiesWavelet[4], 3];WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis"]分解可能な最高の周波数(ナイキスト(Nyquist)周波数)で振動するデータ:
data = Table[(-1)^n, {n, 80}];ListLinePlot[data]小さくないのは最初の詳細化係数{1}とその粗い子係数{1,0,0,…}のみである:
dwd = DiscreteWaveletPacketTransform[data, Automatic, 3];WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis"]data = Table[Piecewise[{{1, 1 < x < 3.1}}, 0], {x, 0, 4, 0.02}];ListLinePlot[data]粗い係数{0,…}はデータと同じ大きいスケールの構造を持つ:
dwd = DiscreteWaveletPacketTransform[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 = DiscreteWaveletPacketTransform[data, Automatic, 3];WaveletListPlot[dwd, {0..}, FrameTicks -> Full]最初の詳細化係数{1}とその粗い子係数{1,0,…}は振動を表す:
WaveletListPlot[dwd, {1, 0...}, FrameTicks -> Full]WaveletListPlot[dwd, All, PlotLayout -> "CommonYAxis"]行列データ (5)
dwd = DiscreteWaveletPacketTransform[(| | | | | |
| - | - | - | - | - |
| 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//MatrixFormWaveletMatrixPlotを使ってさまざまなウェーブレット係数を可視化する:
dwd = DiscreteWaveletPacketTransform[DiamondMatrix[32], Automatic, 2]WaveletMatrixPlot[dwd, ImageSize -> Small]最高の木表現のWaveletMatrixPlot:
WaveletMatrixPlot[WaveletBestBasis[dwd], ImageSize -> Small]二次元では,各方向のフィルタリング操作のベクトルが計算できる:
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である:
WaveletMatrixPlot[DiscreteWaveletPacketTransform[step[{0, 1, 0, 1}]], ImageSize -> Small]MatrixPlot[step[{0, 0, 1, 1}], FrameTicks -> False]すべての垂直および対角上の詳細化係数,つまりウェーブレット指標 {___,1|3,___}は0である:
WaveletMatrixPlot[DiscreteWaveletPacketTransform[step[{0, 0, 1, 1}]], ImageSize -> Small]MatrixPlot[Reverse@IdentityMatrix[8], FrameTicks -> False]すべての水平および垂直の詳細化係数,つまりウェーブレット指標{___,1|2,___}は0である:
WaveletMatrixPlot[DiscreteWaveletPacketTransform[Reverse@IdentityMatrix[8]], ImageSize -> Small]配列データ (2)
data = RandomReal[1, {16, 16, 16}];dwd = DiscreteWaveletPacketTransform[data, Automatic, 2]dwd["BestBasisBlockView"]Norm[Flatten[data - InverseWaveletTransform[dwd]]]//Chopdata = CrossMatrix[All, {8, 8, 8}];Graphics3D[{StandardRed, Cuboid /@ Position[data, 1]}]dwd = DiscreteWaveletPacketTransform[data, Automatic, 2]Table[i -> Graphics3D[{If[Positive[Extract[dwd[i][[1, 2]], #]], StandardRed, StandardGreen], Cuboid[#]}& /@ Position[dwd[i][[1, 2]], u_ /; Abs[u] > 0], PlotRange -> Automatic], {i, Cases[dwd["IndexMap"], {___, 0}]}]もとのデータのエネルギーは変換された係数内に保存されている:
Total[Flatten[data]^2] == Total[Flatten[dwd[Automatic][[All, 2]]]^2]画像データ (3)
Imageオブジェクトを変換する:
img = Image[DiamondMatrix[All, {64, 64}]]dwd = DiscreteWaveletPacketTransform[img, HaarWavelet[], 3]逆変換するとImageオブジェクトが再構築される:
InverseWaveletTransform[dwd]ウェーブレット係数は通常各画像チャンネルのデータのリストとして与えられる:
dwd = DiscreteWaveletPacketTransform[[image], HaarWavelet[], 2];Dimensions[{1, 1} /. dwd[{1, 1}]]代りにすべての係数をImageオブジェクトとして得る:
dwd[All, {"Image"}]カラーレベルの再スケールを施していない生のImageオブジェクトを得る:
dwd[All, {"Image", "ImageFunction" -> Identity}]{0,1}係数の逆変換をImageオブジェクトとして行う:
dwd[{0, 1}, {"Image", "Inverse"}]dwd = DiscreteWaveletPacketTransform[[image], HaarWavelet[], 4];best = WaveletBestBasis[dwd]WaveletImagePlotを使って階層的な格子で最高の木をプロットする:
WaveletImagePlot[best, ImageSize -> Medium]サウンドデータ (3)
Soundオブジェクトを変換する:
snd = ExampleData[{"Sound", "Apollo11ReturnSafely"}]dwd = DiscreteWaveletPacketTransform[snd]逆変換するとSoundオブジェクトが再構築される:
InverseWaveletTransform[dwd]デフォルトで,係数は各サウンドチャンネルのデータのリストとして与えられる:
dwd = DiscreteWaveletPacketTransform[ExampleData[{"Sound", "PianoScale"}]];Dimensions[{1, 1} /. dwd[{1, 1}]]{0,1}係数をSoundオブジェクトとして得る:
dwd[{1, 1}, "Sound"]Sound オブジェクトとしての{1,1} 係数の逆変換:
dwd[{1, 1}, {"Sound", "Inverse"}]dwd = DiscreteWaveletPacketTransform[ExampleData[{"Sound", "Clarinet"}]];best = WaveletBestBasis[dwd]MenuViewを使って係数の最高の木をブラウズする:
MenuView[best[Automatic, "Sound"]]一般化と拡張 (3)
DiscreteWaveletPacketTransformは記号的な量の配列に使うことができる:
dwd = DiscreteWaveletPacketTransform[{a, b, c, d}, WorkingPrecision -> ∞];Normal[dwd]//SimplifyInverseWaveletTransform[dwd]//Simplifydwd = DiscreteWaveletPacketTransform[{1, 2, 5, 2}, WorkingPrecision -> 20];Normal[dwd]data = Exp[I RandomReal[1, 4]];dwd = DiscreteWaveletPacketTransform[data]dwd[Automatic]オプション (5)
Padding (2)
Paddingの設定値は"Periodic"を含みArrayPadのメソッドのものと同じである:
ArrayPad[{a, b, c}, 4, "Periodic"]ArrayPad[{a, b, c}, 4, "Reversed"]ArrayPad[{a, b, c}, 4, "ReversedNegation"]ArrayPad[{a, b, c}, 4, "Reflected"]ArrayPad[{a, b, c}, 3, "ReflectedDifferences"]ArrayPad[{a, b, c}, 4, "ReversedDifferences"]ArrayPad[{a, b, c}, 3, "Extrapolated"]data = Table[UnitStep[x], {x, -2, 2, 4 / 255}];ListLinePlot[data]dwt1 = DiscreteWaveletPacketTransform[data, DaubechiesWavelet[2], 3];WaveletListPlot[dwt1]"Extrapolated"充填を使うと非周期的なデータでは境界効果が薄くなる:
dwt2 = DiscreteWaveletPacketTransform[data, DaubechiesWavelet[2], 3, Padding -> "Extrapolated"];WaveletListPlot[dwt2]WorkingPrecision (3)
デフォルトで,WorkingPrecision->MachinePrecisionが使われる:
data = RandomInteger[1, {10}];dwd1 = DiscreteWaveletPacketTransform[data]dwd2 = DiscreteWaveletPacketTransform[data, WorkingPrecision -> MachinePrecision]dwd1 == dwd2data = {0, 0, 1, 1};dwd = Normal@DiscreteWaveletPacketTransform[data, Automatic, 2, WorkingPrecision -> 25]{Precision[dwd], Accuracy[dwd]}WorkingPrecision->∞を使って厳密計算を行う:
data = RandomInteger[10, {4}];Normal@DiscreteWaveletPacketTransform[data, WorkingPrecision -> ∞]//Simplifyアプリケーション (3)
最高の木の分析 (2)
デフォルトの再構築木には最高の細分化レベルの係数が含まれる:
dwd = DiscreteWaveletPacketTransform[Table[Piecewise[{{5, n <= 30}, {2 + (-1)^n, Inequality[30, Less, n, LessEqual, 60]}, {5, 60 < n}}], {n, 90}]];dwd["BestBasisBlockView"]best = WaveletBestBasis[dwd]best["BestBasisBlockView"]WaveletListPlot[best, PlotLayout -> "CommonYAxis"]dwd = DiscreteWaveletPacketTransform[[image], Automatic];WaveletImagePlot[dwd, ImageSize -> Small]best = WaveletBestBasis[dwd, "ShannonEntropy"]WaveletImagePlot[best, ImageSize -> Small]圧縮 (1)
data = DiskMatrix[All, {12, 12}];MatrixPlot[data, FrameTicks -> None]最高の木のウェーブレットパケット変換では多くの係数が0である:
dwd = WaveletBestBasis[DiscreteWaveletPacketTransform[data]];WaveletMatrixPlot[dwd, ImageSize -> Small]Count[Last /@ dwd[Automatic], Except[0.], {3}]Count[data, Except[0], {2}]Times@@Dimensions[data]特性と関係 (11)
DiscreteWaveletPacketTransformはウェーブレット係数の完全木を計算する:
dwpt = DiscreteWaveletPacketTransform[{1, 1, 3, 1, 1}];dwpt[{"TreeView", Left}]DiscreteWaveletTransformは係数の完全木のサブセットを計算する:
dwt = DiscreteWaveletTransform[{1, 1, 3, 1, 1}];dwt[{"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}]]多次元離散ウェーブレット変換は一次元パケット変換と関連している:
dwt = DiscreteWaveletTransform[(| | |
| - | - |
| a | b |
| c | d |), WorkingPrecision -> ∞];Simplify[dwt[Automatic]]dwpt = DiscreteWaveletPacketTransform[{a, b, c, d}, WorkingPrecision -> ∞];Simplify[dwpt[Automatic]]Haarウェーブレット(デフォルト)でデータ長
の場合,計算される係数は等しい:
Flatten[Sort[Last /@ dwt[Automatic]]] == Flatten[Sort[Last /@ dwpt[Automatic]]]デフォルトの細分化はMin[Round[Log2[Min[Dimensions[data]]]],4]で与えられる:
data = RandomReal[1, {100}];r = Min[Round[Log2[Min[Dimensions[data]]]], 4]DiscreteWaveletPacketTransform[data] == DiscreteWaveletPacketTransform[data, Automatic, r]data = RandomReal[1, {100, 10, 10}];r = Min[Round[Log2[Min[Dimensions[data]]]], 4]DiscreteWaveletPacketTransform[data] == DiscreteWaveletPacketTransform[data, Automatic, r]data = RandomReal[1, {100}];dwt = DiscreteWaveletPacketTransform[data, Padding -> 0.];Norm[data] == Norm[Flatten[Last /@ dwt[Automatic]]]双直交ウェーブレット族では,エネルギーノルムは近似的に保存される:
data = RandomReal[1, {100}];dwt = DiscreteWaveletPacketTransform[data, BiorthogonalSplineWavelet[2, 4], Padding -> 0.];Norm[data]Norm[Flatten[Last /@ dwt[Automatic]]]data = RandomReal[1, {64}];dwt = DiscreteWaveletPacketTransform[data, HaarWavelet[], Full];r = dwt["Refinement"]dwt[ConstantArray[0, {r}]]%[[1, 2, 1]] / (Sqrt[2])^rMean[data]data = Table[DiscreteDelta[n], {n, -2, 2}]dwd = DiscreteWaveletPacketTransform[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 + data4HaarWaveletは平均すること(ローパスフィルタ)と差分を取ること(ハイパスフィルタ)に相当する:
low[v_] := Partition[v, 2].{(1/Sqrt[2]), (1/Sqrt[2])}
high[v_] := Partition[v, 2].{(1/Sqrt[2]), -(1/Sqrt[2])}HaarWaveletTransform[v_] := {{0} -> low[v], {1} -> high[v]};HaarWaveletTransform[{a, b, c, d}]DiscreteWaveletPacketTransformと比較する:
DiscreteWaveletPacketTransform[{a, b, c, d}, HaarWavelet[], 1, WorkingPrecision -> ∞][All]f2d[fx_, fy_] := Composition[Map[fy, #]&, Map[fx, #]&]Haarウェーブレットのローパスフィルタとハイパスフィルタ:
low[v_] := Partition[v, 2].{(1/Sqrt[2]), (1/Sqrt[2])}
high[v_] := Partition[v, 2].{(1/Sqrt[2]), -(1/Sqrt[2])}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を使ってDiscreteWaveletPacketTransformと比較する:
dwd = DiscreteWaveletPacketTransform[data, HaarWavelet[], 1];Table[MatrixPlot[Last[p], PlotLabel -> First[p], FrameTicks -> None], {p, Normal[dwd]}]dwds = Map[DiscreteWaveletPacketTransform, ColorSeparate[[image]]]w = Image[Table[First[{0} /. Normal[t]], {t, dwds}], Interleaving -> False]もと画像のDiscreteWaveletPacketTransformの{0}係数と比較する:
dwd = DiscreteWaveletPacketTransform[[image]];{0} /. dwd[All, {"Image", "ImageFunction" -> Identity}]ImageSubtract[w, %]考えられる問題 (1)
充填はウェーブレット係数の総エネルギーに影響することがある:
data = RandomReal[1, {10}];dwd1 = DiscreteWaveletPacketTransform[data, DaubechiesWavelet[4], Padding -> "Fixed"];{Norm[data]^2, Norm[Flatten[Last /@ dwd1[Automatic]]]^2}dwd2 = DiscreteWaveletPacketTransform[data, DaubechiesWavelet[4], Padding -> 0];{Norm[data]^2, Norm[Flatten[Last /@ dwd2[Automatic]]]^2}テキスト
Wolfram Research (2010), DiscreteWaveletPacketTransform, Wolfram言語関数, https://reference.wolfram.com/language/ref/DiscreteWaveletPacketTransform.html (2017年に更新).
CMS
Wolfram Language. 2010. "DiscreteWaveletPacketTransform." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2017. https://reference.wolfram.com/language/ref/DiscreteWaveletPacketTransform.html.
APA
Wolfram Language. (2010). DiscreteWaveletPacketTransform. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/DiscreteWaveletPacketTransform.html
BibTeX
@misc{reference.wolfram_2026_discretewaveletpackettransform, author="Wolfram Research", title="{DiscreteWaveletPacketTransform}", year="2017", howpublished="\url{https://reference.wolfram.com/language/ref/DiscreteWaveletPacketTransform.html}", note=[Accessed: 13-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_discretewaveletpackettransform, organization={Wolfram Research}, title={DiscreteWaveletPacketTransform}, year={2017}, url={https://reference.wolfram.com/language/ref/DiscreteWaveletPacketTransform.html}, note=[Accessed: 13-September-2026]}