gives the inverse wavelet transform of a DiscreteWaveletData object dwd.
InverseWaveletTransform[dwd,wave]
gives the inverse transform using the wavelet wave.
InverseWaveletTransform[dwd,wave,wind]
gives the inverse transform from the wavelet coefficients specified by wind.
InverseWaveletTransform
gives the inverse wavelet transform of a DiscreteWaveletData object dwd.
InverseWaveletTransform[dwd,wave]
gives the inverse transform using the wavelet wave.
InverseWaveletTransform[dwd,wave,wind]
gives the inverse transform from the wavelet coefficients specified by wind.
Details and Options
- InverseWaveletTransform computes the inverse transform of discrete forward transforms such as DiscreteWaveletTransform etc.
- The possible wavelets wave are the same as for the forward wavelet transforms.
- The default wave is Automatic, which is taken to be dwd["Wavelet"].
- The possible specifications for wind are the same as used by DiscreteWaveletData.
- The default wind is Automatic, which is taken to be dwd["BasisIndex"].
- InverseWaveletTransform[dwd,wave,wind] computes the inverse transform using only the wavelet coefficients specified by wind; other coefficients are set to be zero.
- The inverse transform works recursively by computing coefficients with wavelet index {w1,…,wn-1} from coefficients with wavelet index {w1,…,wn-1,wn}.
- An explicit wind specification needs to be consistent. A wind specification is consistent if for each {w1,…,wn} that is included no {w1,…,wk} for k<n is included.
- InverseWaveletTransform[dwd,wave,r] can be used to inverse transform the r lowest levels of the wavelet tree.
- The default level r is given by the number of refinement levels n in dwd. With r<n a new DiscreteWaveletData object is returned with n-r refinement levels.
Examples
open all close allBasic Examples (3)
Perform a discrete wavelet transform:
dwd = DiscreteWaveletTransform[{1, 1, 3, 1, 1}]Inverse transform recovers the original data:
InverseWaveletTransform[dwd]DiscreteWaveletData representing modified wavelet image coefficients:
dwd = DiscreteWaveletTransform[[image], CDFWavelet[]];WaveletMapIndexed[c Sharpen[c], dwd]Inverse transform gives filtered image:
InverseWaveletTransform[%]DiscreteWaveletData representing an audio signal:
a = Audio["ExampleData/rule30.wav"];dwd = DiscreteWaveletTransform[a, Automatic, 5]Inverse transform using refinement level 5 coefficients only:
InverseWaveletTransform[dwd, Automatic, {{0, 0, 0, 0, 0}, {0, 0, 0, 0, 1}}]Scope (14)
Basic Uses (8)
Inverse wavelet transform DiscreteWaveletData from any discrete forward transform:
transforms = {DiscreteWaveletTransform, DiscreteWaveletPacketTransform, StationaryWaveletTransform, StationaryWaveletPacketTransform, LiftingWaveletTransform};dwds = Table[trans[{2, 3, 4, 1}], {trans, transforms}]The inverse transform is exact for data directly from the forward transform:
Map[InverseWaveletTransform, dwds]Inverse wavelet transform modified DiscreteWaveletData:
dwd = DiscreteWaveletPacketTransform[{1, 1, 3, 1}];dwds = {WaveletMapIndexed[c Rescale[c], dwd], WaveletThreshold[dwd], WaveletBestBasis[dwd]}The inverse is computed from the modified wavelet coefficients:
Map[InverseWaveletTransform, dwds]Inverse wavelet transform using specified wavelet coefficients only:
dwd = DiscreteWaveletTransform[data = Cos[Range[100] ^ 2 / 100]];ListLinePlot[data]Inverse transform only the detail coefficient {0,1}:
InverseWaveletTransform[dwd, Automatic, {0, 1}]//ListLinePlotInverse transform all wavelet coefficients matching {0,_}, setting other coefficients to zero:
InverseWaveletTransform[dwd, Automatic, {0, _}]//ListLinePlotInverse transform an explicitly constructed DiscreteWaveletData object:
dwd = DiscreteWaveletData[{{1} -> {1, -1, 1, -2}, {0, 0} -> {1, 1, 1, 1}}]InverseWaveletTransform[dwd]The type of wavelet transform is inferred from the form of the specified coefficients:
dwd["Transform"]Unspecified coefficients are taken to be zero:
dwd[Except[{1} | {0, 0}]]Specify a different wavelet to use in the inverse transform:
dwd = DiscreteWaveletTransform[Range[6], DaubechiesWavelet[2]];InverseWaveletTransform[dwd, CDFWavelet[]]By default, the wavelet used in the forward transform is chosen:
InverseWaveletTransform[dwd] == InverseWaveletTransform[dwd, DaubechiesWavelet[2]]For array data, the inverse transform is an array with the same dimensions:
dwd = DiscreteWaveletTransform[(| | | | |
| - | - | -- | -- |
| 1 | 2 | 3 | 4 |
| 2 | 4 | 6 | 8 |
| 3 | 6 | 9 | 12 |
| 4 | 8 | 12 | 16 |)];InverseWaveletTransform[dwd, Automatic, {2}]//MatrixFormFor image data, the inverse transform is given as an Image object:
dwd = DiscreteWaveletTransform[data = [image]];img = InverseWaveletTransform[dwd, Automatic, {0, 0, 0, 0}]The image has the same dimensions and number of color channels as the original data:
{ImageDimensions[img], ImageChannels[img]}{ImageDimensions[data], ImageChannels[data]}For sound data, the inverse transform is given as a Sound object:
dwd = DiscreteWaveletTransform[Sound[«1»]];The sound has the same duration, sampling rate, and number of channels as the original data:
InverseWaveletTransform[dwd, Automatic, {0, 0, 1}]Reconstruction Basis (6)
A subset of the available coefficients is used in the inverse transform:
dwd = DiscreteWaveletTransform[{1, 1, 3, 1, 1}];dwd["BasisIndex"] gives the coefficients used by default in the inverse transform:
dwd["BasisIndex"]Use dwd["TreeView"] to get a tree plot of all coefficients with the default basis highlighted:
dwd["TreeView"]Compute the inverse transform using the default basis of coefficients:
dwd = DiscreteWaveletPacketTransform[{1, 1, 3, 1, 1}];InverseWaveletTransform[dwd]Compute the inverse transform using a specific basis:
InverseWaveletTransform[dwd, Automatic, {{0}, {1, 0}, {1, 1}}]Use a specific subset of a basis, with the other coefficients taken to be zero:
InverseWaveletTransform[dwd, Automatic, {{0}, {1, 0}}]Compute the inverse transform of a single coefficient:
InverseWaveletTransform[dwd, Automatic, {0, 1}]A standard basis is chosen as the default for all non-packet DiscreteWaveletData:
dwt = DiscreteWaveletTransform[Range[8]];lwt = LiftingWaveletTransform[Range[8]];swt = StationaryWaveletTransform[Range[8]];The basis includes the detail coefficients {…,1} and the last coarse coefficient {…,0}:
{dwt["TreeView"], lwt["TreeView"], swt["TreeView"]}The default basis for packet transform data uses coefficients at the highest refinement level:
dwpt = DiscreteWaveletPacketTransform[{1, 1, 3, 1, 1}];swpt = StationaryWaveletPacketTransform[{1, 1, 3, 1, 1}];{dwpt["TreeView"], swpt["TreeView"]}For packet transform data, the wavelet basis can be changed using WaveletBestBasis:
dwd = DiscreteWaveletPacketTransform[{1, 1, 3, 1, 1}];Choose the basis that minimizes the information entropy of the coefficients:
best = WaveletBestBasis[dwd, "ShannonEntropy"]custom = WaveletBestBasis[dwd, {{0}, {1, 0}, {1, 1}}]Highlight each basis in a tree plot of all coefficients:
{dwd["TreeView"], best["TreeView"], custom["TreeView"]}For data directly from packet transforms, the inverse transform is independent of the basis:
data = {9, 3, 9, 7, 6, 9, 7, 10, 8, 1};dwd = DiscreteWaveletPacketTransform[data];Compare the inverse transform for several different full wavelet basis specifications:
InverseWaveletTransform[dwd, Automatic, {{0}, {1, 0}, {1, 1}}] == InverseWaveletTransform[dwd, Automatic, {{0}, {1}}] == InverseWaveletTransform[dwd, Automatic, {{0, 1}, {0, 0}, {1}}]For modified wavelet data, the inverse transform can depend on the basis chosen:
th = WaveletThreshold[dwd];InverseWaveletTransform[th, Automatic, {{0}, {1, 0}, {1, 1}}] == InverseWaveletTransform[th, Automatic, {{0}, {1}}] == InverseWaveletTransform[th, Automatic, {{0, 1}, {0, 0}, {1}}]Generalizations & Extensions (2)
Partial inverse wavelet transform:
dwd = DiscreteWaveletTransform[RandomReal[1, 16]]Obtain a DiscreteWaveletData with 1 less level of refinement:
InverseWaveletTransform[dwd, Automatic, 1]Visualize wavelet coefficients remaining after inverting the
lowest levels of refinement:
Table[Labeled[InverseWaveletTransform[dwd, Automatic, r]["TreeView"], r], {r, 1, 3}]InverseWaveletTransform[dwd] is equivalent to inverting all levels of refinement:
InverseWaveletTransform[dwd, Automatic, 4] == InverseWaveletTransform[dwd]Inverse transform of complex wavelet coefficients:
data = RandomComplex[1 + I, 10];dwd = StationaryWaveletTransform[data]InverseWaveletTransform gives the exact inverse transform:
InverseWaveletTransform[dwd] == dataApplications (8)
Wavelet Synthesis (2)
Discrete wavelet data consisting of noise in detail coefficient {0,…,1} at refinement level
:
dwd[r_] := DiscreteWaveletData[{UnitVector[r, r] -> RandomReal[{-1, 1}, 2^6 - r]}, DaubechiesWavelet[], DiscreteWaveletTransform]Use inverse wavelet transform to synthesize noise on a single specific scale:
Table[ListLinePlot[InverseWaveletTransform[dwd[r]], PlotLabel -> r], {r, 3}]Stationary wavelet matrix data consisting of noise in vertical detail coefficient {2,2} only:
dwd = DiscreteWaveletData[{{2, 2} -> RandomReal[{-1, 1}, {40, 40}]}];Use inverse wavelet transform to synthesize noisy data:
MatrixPlot[InverseWaveletTransform[dwd]]Noise in different wavelet coefficients leads to different kinds of synthesized noisy data:
Table[MatrixPlot[InverseWaveletTransform[DiscreteWaveletData[{wind -> RandomReal[{-1, 1}, {20, 20}]}]], PlotLabel -> wind, FrameTicks -> None], {wind, {{0}, {0, 0}, {1, 1, 1, 1}, {3, 2, 2}}}]Inverse Discrete Wavelet Transform (3)
Discrete wavelet transform data with the first coarse coefficient equal to
:
dwd[c_] := DiscreteWaveletData[{{0} -> c}, Automatic, DiscreteWaveletTransform]Visualize the inverse transform for different coarse coefficients:
Table[ListLinePlot[InverseWaveletTransform[dwd[c]], PlotLabel -> c, PlotRange -> {0, Sqrt[2]}], {c, {{1, 1, 1, 1}, {1, 1, 2, 2}, {1, 2, 1, 2}}}]Discrete wavelet transform data with the first detail coefficient equal to
:
dwd[d_] := DiscreteWaveletData[{{1} -> d, {0} -> {1, 1, 1, 1}}, Automatic, DiscreteWaveletTransform]Visualize the inverse transform for different detail coefficients:
Table[ListLinePlot[InverseWaveletTransform[dwd[d]], PlotLabel -> d, PlotRange -> {0, Sqrt[2]}], {d, {{0, 0, 0, 0}, {1, 1, 1, 1}, {0, 0, 1, 1}}}]Discrete wavelet packet transform data with wavelet coefficients
:
dwd[a_] := DiscreteWaveletData[{{0, 0, 0} -> {Subscript[a, [[1]]]}, {0, 0, 1} -> {Subscript[a, [[2]]]}, {0, 1, 0} -> {Subscript[a, [[3]]]}, {0, 1, 1} -> {Subscript[a, [[4]]]}, {1, 0, 0} -> {Subscript[a, [[5]]]}, {1, 0, 1} -> {Subscript[a, [[6]]]}, {1, 1, 0} -> {Subscript[a, [[7]]]}, {1, 1, 1} -> {Subscript[a, [[8]]]}}]Visualize the inverse transform of each coefficient separately:
Table[ListLinePlot[InverseWaveletTransform[dwd[UnitVector[8, i]]]], {i, 8}]The set of inverse transforms forms a basis for the signal space
:
MatrixRank[Table[InverseWaveletTransform[dwd[UnitVector[8, i]]], {i, 8}]]Inverse Stationary Wavelet Transform (3)
Stationary wavelet transform data with the first coarse coefficient equal to
:
dwd[c_] := DiscreteWaveletData[{{0} -> c}, Automatic, StationaryWaveletTransform]Visualize the inverse transform for different coarse coefficients:
Table[ListLinePlot[InverseWaveletTransform[dwd[c]], PlotLabel -> c, PlotRange -> {0, 2}], {c, {{1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 2, 2, 2, 2}, {1, 2, 1, 2, 1, 2, 1, 2}}}]Stationary wavelet transform data with the first detail coefficient equal to
:
dwd[d_] := DiscreteWaveletData[{{1} -> d}, Automatic, StationaryWaveletTransform]Visualize the inverse transform for different detail coefficients:
Table[ListLinePlot[InverseWaveletTransform[dwd[d]], PlotLabel -> d], {d, {{1, 1, 1, 1, 1, 1}, {-1, -1, -1, 1, 1, 1}, {1, -1, 1, -1, 1, -1}}}]Stationary wavelet packet transform data with wavelet coefficients
:
dwd[a_] := DiscreteWaveletData[{{0, 0} -> {Subscript[a, [[1]]], Subscript[a, [[2]]], Subscript[a, [[3]]], Subscript[a, [[4]]]}, {0, 1} -> {Subscript[a, [[5]]], Subscript[a, [[6]]], Subscript[a, [[7]]], Subscript[a, [[8]]]}, {1, 0} -> {Subscript[a, [[9]]], Subscript[a, [[10]]], Subscript[a, [[11]]], Subscript[a, [[12]]]}, {1, 1} -> {Subscript[a, [[13]]], Subscript[a, [[14]]], Subscript[a, [[15]]], Subscript[a, [[16]]]}}]Visualize the inverse transform of each component
of each coefficient separately:
Table[ListLinePlot[InverseWaveletTransform[dwd[UnitVector[16, i]]]], {i, 16}]The set of 16 inverse transforms spans the signal space
:
MatrixRank[Table[InverseWaveletTransform[dwd[UnitVector[16, i]]], {i, 16}]]Properties & Relations (7)
InverseWaveletTransform is the exact inverse of transforms using an orthogonal wavelet:
data = RandomReal[1, 10];Use the orthogonal HaarWavelet:
Table[InverseWaveletTransform[t[data, HaarWavelet[]]] == data, {t, {DiscreteWaveletTransform, DiscreteWaveletPacketTransform, StationaryWaveletTransform, StationaryWaveletPacketTransform, LiftingWaveletTransform}}]The inverse is inexact for nonorthogonal wavelet families such as ShannonWavelet:
InverseWaveletTransform[DiscreteWaveletTransform[data, ShannonWavelet[3]]] == dataBy default, coefficients in dwd["BasisIndex"] are used in the inverse:
dwd = DiscreteWaveletTransform[{1, 1, 3, 1, 1, 1}];dwd["BasisIndex"]Set all other coefficients to zero:
WaveletMapIndexed[c 0c, dwd, Except[Alternatives@@dwd["BasisIndex"]]]The inverse using the default basis is unaffected:
InverseWaveletTransform[%]InverseWaveletTransform[…,…,wind] effectively sets other wavelet coefficients to zero:
dwd = DiscreteWaveletTransform[RandomReal[1, 10]];InverseWaveletTransform[dwd, Automatic, {{1}, {0, 1}}]Explicitly set other wavelet coefficients to zero:
WaveletMapIndexed[c 0c, dwd, Except[{1} | {0, 1}]]InverseWaveletTransform[%]InverseWaveletTransform[…,…,wind] computes the inverse from the coefficients wind:
dwd = DiscreteWaveletTransform[{1, 1, 3, 1, 1}];InverseWaveletTransform[dwd, Automatic, {{1}, {0, 1}}]dwd[wind,"Inverse"] computes the inverse of each coefficient separately:
dwd[{{1}, {0, 1}}, "Inverse"]The total gives the same result as InverseWaveletTransform:
Total[Last /@ %]Use ListLinePlot to plot inverse transforms of individual vector coefficients:
dwd = DiscreteWaveletTransform[Cos[Range[100] ^ 2 / 100]];Table[ListLinePlot[InverseWaveletTransform[dwd, Automatic, wind], PlotLabel -> wind], {wind, {{1}, {0, 1}, {0, 0, 1}}}]dwd[wind,{"Inverse","ListPlot"}] gives a simple list plot of each inverse transform:
dwd[{{1}, {0, 1}, {0, 0, 1}}, {"Inverse", "ListPlot"}]WaveletListPlot[dwd,wind,Method->"Inverse"->True] plots inverses together:
WaveletListPlot[dwd, {{1}, {0, 1}, {0, 0, 1}}, Method -> "Inverse" -> True]Use MatrixPlot to plot inverse transforms of individual matrix coefficients:
dwd = DiscreteWaveletTransform[RandomReal[1, {8, 8}]];Table[MatrixPlot[InverseWaveletTransform[dwd, Automatic, wind], PlotLabel -> wind], {wind, {{1}, {2}, {3}}}]dwd[wind,{"Inverse","MatrixPlot"}] gives a simple matrix plot of each inverse:
dwd[{{1}, {2}, {3}}, {"Inverse", "MatrixPlot"}]Inverse transforms of individual coefficients from image data are given as Image objects:
dwd = DiscreteWaveletTransform[[image]];Table[Labeled[ImageAdjust@ImageApply[Abs, InverseWaveletTransform[dwd, Automatic, wind]], wind], {wind, {{1}, {2}, {3}}}]dwd[{{1}, {2}, {3}}, {"Inverse", {"Image", ImageSize -> 120}}]Possible Issues (1)
A wind specification is inconsistent if it includes both {a1,…,an} and {a1,…,ar} for r<n:
dwd = DiscreteWaveletPacketTransform[RandomReal[1, 4]];InverseWaveletTransform[dwd, Automatic, {{1}, {1, 0}}]The specification is inconsistent because the inverse transform computes {1} from {1,0}:
dwd["TreeView"]Use a consistent wind specification:
InverseWaveletTransform[dwd, Automatic, {{1}}]InverseWaveletTransform[dwd, Automatic, {{1, 0}}]Related Guides
History
Text
Wolfram Research (2010), InverseWaveletTransform, Wolfram Language function, https://reference.wolfram.com/language/ref/InverseWaveletTransform.html.
CMS
Wolfram Language. 2010. "InverseWaveletTransform." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/InverseWaveletTransform.html.
APA
Wolfram Language. (2010). InverseWaveletTransform. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/InverseWaveletTransform.html
BibTeX
@misc{reference.wolfram_2026_inversewavelettransform, author="Wolfram Research", title="{InverseWaveletTransform}", year="2010", howpublished="\url{https://reference.wolfram.com/language/ref/InverseWaveletTransform.html}", note=[Accessed: 13-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_inversewavelettransform, organization={Wolfram Research}, title={InverseWaveletTransform}, year={2010}, url={https://reference.wolfram.com/language/ref/InverseWaveletTransform.html}, note=[Accessed: 13-June-2026]}