How to proceed from the level 2 and up in a Discrete Wavelet Transform Daubechies kind 4 The Next CEO of Stack OverflowHow to implement the Daubechies wavelet?Need to learn wavelet, suggest steps and resourcesImplementing 1D Discrete Wavelet Transform in MatlabWavelet transform and taking out of frequenciesBiorthogonal (discrete wavelet) noise bases?How can I analyse signal with discrete wavelet transform?Non-uniform convolution with discrete wavelet transformOrthogonal Discrete-Time Filter Banks for Discrete Wavelet TransformWavelets beside the Daubechies- and Meyer-wavelet?Help to understand wavelet basis on an interval proposed by Cohen, Daubechies and Vial.
Why does the UK parliament need a vote on the political declaration?
Complex fractions
Why did we only see the N-1 starfighters in one film?
Why don't programming languages automatically manage the synchronous/asynchronous problem?
If Nick Fury and Coulson already knew about aliens (Kree and Skrull) why did they wait until Thor's appearance to start making weapons?
A "random" question: usage of "random" as adjective in Spanish
Limits on contract work without pre-agreed price/contract (UK)
Example of a Mathematician/Physicist whose Other Publications during their PhD eclipsed their PhD Thesis
SQL Server 2016 - excessive memory grant warning on poor performing query
Is it ever safe to open a suspicious html file (e.g. email attachment)?
Preparing Indesign booklet with .psd graphics for print
What connection does MS Office have to Netscape Navigator?
Why do airplanes bank sharply to the right after air-to-air refueling?
Why do professional authors make "consistency" mistakes? And how to avoid them?
How did the Bene Gesserit know how to make a Kwisatz Haderach?
How do we know the LHC results are robust?
Does it take more energy to get to Venus or to Mars?
Skipping indices in a product
Why does standard notation not preserve intervals (visually)
How fast would a person need to move to trick the eye?
Elegant way to replace substring in a regex with optional groups in Python?
Won the lottery - how do I keep the money?
I believe this to be a fraud - hired, then asked to cash check and send cash as Bitcoin
How to count occurrences of text in a file?
How to proceed from the level 2 and up in a Discrete Wavelet Transform Daubechies kind 4
The Next CEO of Stack OverflowHow to implement the Daubechies wavelet?Need to learn wavelet, suggest steps and resourcesImplementing 1D Discrete Wavelet Transform in MatlabWavelet transform and taking out of frequenciesBiorthogonal (discrete wavelet) noise bases?How can I analyse signal with discrete wavelet transform?Non-uniform convolution with discrete wavelet transformOrthogonal Discrete-Time Filter Banks for Discrete Wavelet TransformWavelets beside the Daubechies- and Meyer-wavelet?Help to understand wavelet basis on an interval proposed by Cohen, Daubechies and Vial.
$begingroup$
The wavelet elements of a Daubechies kind 4 are
$$(0.4830, 0.8365, 0.2241, -0.1294) $$
Let's say I have the following signal array
$$ [1, 2, 0, 4, 5, 6, 8, 10 ]$$
Doing a Daubechies 4 DWT of this array is basically multiplying a $8times 8$ array with a $8times 1$ array (signal).
The $8times1$ array will have the following elements,
beginarraycccc 0.483 & 0.8365 &0.2241 &-0.1294 &0 &0 &0 &0 \
0 &0 &0.483 &0.8365 &0.2241 &-0.1294 &0 &0 \
0 &0 &0 &0 &0.483 &0.8365 &0.2241 &-0.1294 \
0.2241 &-0.1294 &0 &0 &0 &0 &0.483 &0.8365 \
-0.1294 &-0.2241 &0.8365 &-0.483 &0 &0 &0 &0 \
0 &0 &-0.1294 &-0.2241 &0.8365 &-0.483 &0 &0 \
0 &0 &0 &0 &-0.1294 &-0.2241 &0.8365 &-0.483 \
0.8365 &-0.483 &0 &0 &0 &0 &-0.1294 &-0.2241 \
endarray
The result will be
for the scaling function...
- 0 : 1.638357430415108
- 1 : 3.6903274198537357
- 2 : 7.9329681069730205
- 3 : 12.194191165473843
for the wavelet
- 0 : -2.5095489112134235
- 1 : 0.3882285676537802
- 2 : -0.1294095225512608
- 3 : -3.4061243833814774
Sorry but my math is rusty. I don't know the exact terms for these two elements that come from the DWT decomposition. Some call, scaling function and wavelet, others call trend subsignal and fluctuation, others call c and d... etc.
Anyway, now I need to perform another level of DWT DB4, what values do I send to the algorithm that will perform the decomposition? The scaling function c or the wavelet d?
and what about the inverse transformations?
wavelets
$endgroup$
add a comment |
$begingroup$
The wavelet elements of a Daubechies kind 4 are
$$(0.4830, 0.8365, 0.2241, -0.1294) $$
Let's say I have the following signal array
$$ [1, 2, 0, 4, 5, 6, 8, 10 ]$$
Doing a Daubechies 4 DWT of this array is basically multiplying a $8times 8$ array with a $8times 1$ array (signal).
The $8times1$ array will have the following elements,
beginarraycccc 0.483 & 0.8365 &0.2241 &-0.1294 &0 &0 &0 &0 \
0 &0 &0.483 &0.8365 &0.2241 &-0.1294 &0 &0 \
0 &0 &0 &0 &0.483 &0.8365 &0.2241 &-0.1294 \
0.2241 &-0.1294 &0 &0 &0 &0 &0.483 &0.8365 \
-0.1294 &-0.2241 &0.8365 &-0.483 &0 &0 &0 &0 \
0 &0 &-0.1294 &-0.2241 &0.8365 &-0.483 &0 &0 \
0 &0 &0 &0 &-0.1294 &-0.2241 &0.8365 &-0.483 \
0.8365 &-0.483 &0 &0 &0 &0 &-0.1294 &-0.2241 \
endarray
The result will be
for the scaling function...
- 0 : 1.638357430415108
- 1 : 3.6903274198537357
- 2 : 7.9329681069730205
- 3 : 12.194191165473843
for the wavelet
- 0 : -2.5095489112134235
- 1 : 0.3882285676537802
- 2 : -0.1294095225512608
- 3 : -3.4061243833814774
Sorry but my math is rusty. I don't know the exact terms for these two elements that come from the DWT decomposition. Some call, scaling function and wavelet, others call trend subsignal and fluctuation, others call c and d... etc.
Anyway, now I need to perform another level of DWT DB4, what values do I send to the algorithm that will perform the decomposition? The scaling function c or the wavelet d?
and what about the inverse transformations?
wavelets
$endgroup$
add a comment |
$begingroup$
The wavelet elements of a Daubechies kind 4 are
$$(0.4830, 0.8365, 0.2241, -0.1294) $$
Let's say I have the following signal array
$$ [1, 2, 0, 4, 5, 6, 8, 10 ]$$
Doing a Daubechies 4 DWT of this array is basically multiplying a $8times 8$ array with a $8times 1$ array (signal).
The $8times1$ array will have the following elements,
beginarraycccc 0.483 & 0.8365 &0.2241 &-0.1294 &0 &0 &0 &0 \
0 &0 &0.483 &0.8365 &0.2241 &-0.1294 &0 &0 \
0 &0 &0 &0 &0.483 &0.8365 &0.2241 &-0.1294 \
0.2241 &-0.1294 &0 &0 &0 &0 &0.483 &0.8365 \
-0.1294 &-0.2241 &0.8365 &-0.483 &0 &0 &0 &0 \
0 &0 &-0.1294 &-0.2241 &0.8365 &-0.483 &0 &0 \
0 &0 &0 &0 &-0.1294 &-0.2241 &0.8365 &-0.483 \
0.8365 &-0.483 &0 &0 &0 &0 &-0.1294 &-0.2241 \
endarray
The result will be
for the scaling function...
- 0 : 1.638357430415108
- 1 : 3.6903274198537357
- 2 : 7.9329681069730205
- 3 : 12.194191165473843
for the wavelet
- 0 : -2.5095489112134235
- 1 : 0.3882285676537802
- 2 : -0.1294095225512608
- 3 : -3.4061243833814774
Sorry but my math is rusty. I don't know the exact terms for these two elements that come from the DWT decomposition. Some call, scaling function and wavelet, others call trend subsignal and fluctuation, others call c and d... etc.
Anyway, now I need to perform another level of DWT DB4, what values do I send to the algorithm that will perform the decomposition? The scaling function c or the wavelet d?
and what about the inverse transformations?
wavelets
$endgroup$
The wavelet elements of a Daubechies kind 4 are
$$(0.4830, 0.8365, 0.2241, -0.1294) $$
Let's say I have the following signal array
$$ [1, 2, 0, 4, 5, 6, 8, 10 ]$$
Doing a Daubechies 4 DWT of this array is basically multiplying a $8times 8$ array with a $8times 1$ array (signal).
The $8times1$ array will have the following elements,
beginarraycccc 0.483 & 0.8365 &0.2241 &-0.1294 &0 &0 &0 &0 \
0 &0 &0.483 &0.8365 &0.2241 &-0.1294 &0 &0 \
0 &0 &0 &0 &0.483 &0.8365 &0.2241 &-0.1294 \
0.2241 &-0.1294 &0 &0 &0 &0 &0.483 &0.8365 \
-0.1294 &-0.2241 &0.8365 &-0.483 &0 &0 &0 &0 \
0 &0 &-0.1294 &-0.2241 &0.8365 &-0.483 &0 &0 \
0 &0 &0 &0 &-0.1294 &-0.2241 &0.8365 &-0.483 \
0.8365 &-0.483 &0 &0 &0 &0 &-0.1294 &-0.2241 \
endarray
The result will be
for the scaling function...
- 0 : 1.638357430415108
- 1 : 3.6903274198537357
- 2 : 7.9329681069730205
- 3 : 12.194191165473843
for the wavelet
- 0 : -2.5095489112134235
- 1 : 0.3882285676537802
- 2 : -0.1294095225512608
- 3 : -3.4061243833814774
Sorry but my math is rusty. I don't know the exact terms for these two elements that come from the DWT decomposition. Some call, scaling function and wavelet, others call trend subsignal and fluctuation, others call c and d... etc.
Anyway, now I need to perform another level of DWT DB4, what values do I send to the algorithm that will perform the decomposition? The scaling function c or the wavelet d?
and what about the inverse transformations?
wavelets
wavelets
edited Mar 19 at 2:07
Ethan Bolker
45.5k553120
45.5k553120
asked Mar 18 at 19:13
SpaceDogSpaceDog
147119
147119
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
$begingroup$
The inverse of this step of the transform will be the inverse matrix to the matrix you wrote above. Mechanically just build a matrix of the values you wrote, and then invert this matrix. The Db4 should be designed so that this inverse matrix will be the same (up to maybe a scaling / normalization factor / transpose), which is what makes orthogonal wavelets so simple to use. We only need one filter pair two short arrays of numbers.
Makes programming simpler and/or memory overheads slimmer than if we needed separate filters for forward and backward transform.
Usually in discrete wavelet transforms you iterate on the low-pass channel, which is the output from the scaling function or father wavelet. This is called dyadic decomposition, You can read more here. At every level you don't stop you will only have "result" of the mother wavelet. These are the "detail" coefficients at this level of resolution. At the lowest level of resolution (where you stop the transform) you will also have "approximation" coefficients, which come from the father wavelet function belonging this coarsest scale.
There also exist wavelet packet analysis, where you can iterate also on the high-pass band (where mother wavelets live) and not only on the low-pass band (where father wavelets live). But these packet analyses are probably a bit over-course.
What happens at next level is that for the coefficients of the high pass filter you put an identity matrix $I$ and for the coefficients of the low pass filter coefficients you put a subsampled version of original matrix.
We can see by ocular inspection that high pass filter comes last in the 8x8 matrix, so those are the elements which will be affected by the $I_4$ block.
$$beginbmatrixD&0\0&I_4endbmatrix$$
The "$D$" here will be the 4x4 size transform matrix for Db4. If we write it out it will look like this:
$$left[beginarraycccc0.483&0.8365&0.2241&-0.1294&0&0&0&0\0.2241&-0.1294&0.483&0.8365&0&0&0&0\ -0.1294&-0.2241&0.8365&-0.483&0&0&0&0\0.8365&-0.483&-0.1294&-0.2241&0&0&0&0\hline0&0&0&0&1&0&0&0\0&0&0&0&0&1&0&0\0&0&0&0&0&0&1&0\0&0&0&0&0&0&0&1endarrayright]$$
With lines to clarify the block-structure. Now when you have both transform matrices, what remains is to find their inverses, and for ON transform, Inverse is equal to transpose, so this is easily done.
$endgroup$
$begingroup$
Thanks for the answer but this is my problem. Suppose I take an array with 8 elements and decompose it with DWT DB4. I get two arrays with 4 elements. Let's call itaandb. Then I take one of these arrays and decompose again. I get two arrays with 2 elements, let's call itcandd. I cannot continue anymore because I have reached 2 elements. Now it is time to reverse it. I takecanddand inverse transform it, getting an array with 4 elements. How can I inverse transform again now? I only have one array with 4 elements... I need a second array of 4 elements.
$endgroup$
– SpaceDog
Mar 18 at 20:40
$begingroup$
You don't "throw away" the 4 detail coefficients you get from the first level, you keep them in the vector for later, when you get back to inverse transforming at first level. Do you know about block-diagonal matrices?
$endgroup$
– mathreadler
Mar 18 at 20:42
$begingroup$
@SpaceDog second level will be a matrix with the block matrix structure I describe in edited answer.
$endgroup$
– mathreadler
Mar 18 at 20:56
$begingroup$
Sorry, my math is rusty. After the first decomposition I have two 4x4 arrays, shown in my question. The first is scaling factor. Should I inject that into the same algorithm and obtain two a 2x2 matrices? and what happens on the way back? Please explain using the numbers I have provided...
$endgroup$
– SpaceDog
Mar 18 at 20:57
1
$begingroup$
brilliant!!!!!!!!!!! thanks. Fantastic explanation.
$endgroup$
– SpaceDog
Mar 19 at 14:43
|
show 4 more comments
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
);
);
, "mathjax-editing");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "69"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
noCode: true, onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3153191%2fhow-to-proceed-from-the-level-2-and-up-in-a-discrete-wavelet-transform-daubechie%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
The inverse of this step of the transform will be the inverse matrix to the matrix you wrote above. Mechanically just build a matrix of the values you wrote, and then invert this matrix. The Db4 should be designed so that this inverse matrix will be the same (up to maybe a scaling / normalization factor / transpose), which is what makes orthogonal wavelets so simple to use. We only need one filter pair two short arrays of numbers.
Makes programming simpler and/or memory overheads slimmer than if we needed separate filters for forward and backward transform.
Usually in discrete wavelet transforms you iterate on the low-pass channel, which is the output from the scaling function or father wavelet. This is called dyadic decomposition, You can read more here. At every level you don't stop you will only have "result" of the mother wavelet. These are the "detail" coefficients at this level of resolution. At the lowest level of resolution (where you stop the transform) you will also have "approximation" coefficients, which come from the father wavelet function belonging this coarsest scale.
There also exist wavelet packet analysis, where you can iterate also on the high-pass band (where mother wavelets live) and not only on the low-pass band (where father wavelets live). But these packet analyses are probably a bit over-course.
What happens at next level is that for the coefficients of the high pass filter you put an identity matrix $I$ and for the coefficients of the low pass filter coefficients you put a subsampled version of original matrix.
We can see by ocular inspection that high pass filter comes last in the 8x8 matrix, so those are the elements which will be affected by the $I_4$ block.
$$beginbmatrixD&0\0&I_4endbmatrix$$
The "$D$" here will be the 4x4 size transform matrix for Db4. If we write it out it will look like this:
$$left[beginarraycccc0.483&0.8365&0.2241&-0.1294&0&0&0&0\0.2241&-0.1294&0.483&0.8365&0&0&0&0\ -0.1294&-0.2241&0.8365&-0.483&0&0&0&0\0.8365&-0.483&-0.1294&-0.2241&0&0&0&0\hline0&0&0&0&1&0&0&0\0&0&0&0&0&1&0&0\0&0&0&0&0&0&1&0\0&0&0&0&0&0&0&1endarrayright]$$
With lines to clarify the block-structure. Now when you have both transform matrices, what remains is to find their inverses, and for ON transform, Inverse is equal to transpose, so this is easily done.
$endgroup$
$begingroup$
Thanks for the answer but this is my problem. Suppose I take an array with 8 elements and decompose it with DWT DB4. I get two arrays with 4 elements. Let's call itaandb. Then I take one of these arrays and decompose again. I get two arrays with 2 elements, let's call itcandd. I cannot continue anymore because I have reached 2 elements. Now it is time to reverse it. I takecanddand inverse transform it, getting an array with 4 elements. How can I inverse transform again now? I only have one array with 4 elements... I need a second array of 4 elements.
$endgroup$
– SpaceDog
Mar 18 at 20:40
$begingroup$
You don't "throw away" the 4 detail coefficients you get from the first level, you keep them in the vector for later, when you get back to inverse transforming at first level. Do you know about block-diagonal matrices?
$endgroup$
– mathreadler
Mar 18 at 20:42
$begingroup$
@SpaceDog second level will be a matrix with the block matrix structure I describe in edited answer.
$endgroup$
– mathreadler
Mar 18 at 20:56
$begingroup$
Sorry, my math is rusty. After the first decomposition I have two 4x4 arrays, shown in my question. The first is scaling factor. Should I inject that into the same algorithm and obtain two a 2x2 matrices? and what happens on the way back? Please explain using the numbers I have provided...
$endgroup$
– SpaceDog
Mar 18 at 20:57
1
$begingroup$
brilliant!!!!!!!!!!! thanks. Fantastic explanation.
$endgroup$
– SpaceDog
Mar 19 at 14:43
|
show 4 more comments
$begingroup$
The inverse of this step of the transform will be the inverse matrix to the matrix you wrote above. Mechanically just build a matrix of the values you wrote, and then invert this matrix. The Db4 should be designed so that this inverse matrix will be the same (up to maybe a scaling / normalization factor / transpose), which is what makes orthogonal wavelets so simple to use. We only need one filter pair two short arrays of numbers.
Makes programming simpler and/or memory overheads slimmer than if we needed separate filters for forward and backward transform.
Usually in discrete wavelet transforms you iterate on the low-pass channel, which is the output from the scaling function or father wavelet. This is called dyadic decomposition, You can read more here. At every level you don't stop you will only have "result" of the mother wavelet. These are the "detail" coefficients at this level of resolution. At the lowest level of resolution (where you stop the transform) you will also have "approximation" coefficients, which come from the father wavelet function belonging this coarsest scale.
There also exist wavelet packet analysis, where you can iterate also on the high-pass band (where mother wavelets live) and not only on the low-pass band (where father wavelets live). But these packet analyses are probably a bit over-course.
What happens at next level is that for the coefficients of the high pass filter you put an identity matrix $I$ and for the coefficients of the low pass filter coefficients you put a subsampled version of original matrix.
We can see by ocular inspection that high pass filter comes last in the 8x8 matrix, so those are the elements which will be affected by the $I_4$ block.
$$beginbmatrixD&0\0&I_4endbmatrix$$
The "$D$" here will be the 4x4 size transform matrix for Db4. If we write it out it will look like this:
$$left[beginarraycccc0.483&0.8365&0.2241&-0.1294&0&0&0&0\0.2241&-0.1294&0.483&0.8365&0&0&0&0\ -0.1294&-0.2241&0.8365&-0.483&0&0&0&0\0.8365&-0.483&-0.1294&-0.2241&0&0&0&0\hline0&0&0&0&1&0&0&0\0&0&0&0&0&1&0&0\0&0&0&0&0&0&1&0\0&0&0&0&0&0&0&1endarrayright]$$
With lines to clarify the block-structure. Now when you have both transform matrices, what remains is to find their inverses, and for ON transform, Inverse is equal to transpose, so this is easily done.
$endgroup$
$begingroup$
Thanks for the answer but this is my problem. Suppose I take an array with 8 elements and decompose it with DWT DB4. I get two arrays with 4 elements. Let's call itaandb. Then I take one of these arrays and decompose again. I get two arrays with 2 elements, let's call itcandd. I cannot continue anymore because I have reached 2 elements. Now it is time to reverse it. I takecanddand inverse transform it, getting an array with 4 elements. How can I inverse transform again now? I only have one array with 4 elements... I need a second array of 4 elements.
$endgroup$
– SpaceDog
Mar 18 at 20:40
$begingroup$
You don't "throw away" the 4 detail coefficients you get from the first level, you keep them in the vector for later, when you get back to inverse transforming at first level. Do you know about block-diagonal matrices?
$endgroup$
– mathreadler
Mar 18 at 20:42
$begingroup$
@SpaceDog second level will be a matrix with the block matrix structure I describe in edited answer.
$endgroup$
– mathreadler
Mar 18 at 20:56
$begingroup$
Sorry, my math is rusty. After the first decomposition I have two 4x4 arrays, shown in my question. The first is scaling factor. Should I inject that into the same algorithm and obtain two a 2x2 matrices? and what happens on the way back? Please explain using the numbers I have provided...
$endgroup$
– SpaceDog
Mar 18 at 20:57
1
$begingroup$
brilliant!!!!!!!!!!! thanks. Fantastic explanation.
$endgroup$
– SpaceDog
Mar 19 at 14:43
|
show 4 more comments
$begingroup$
The inverse of this step of the transform will be the inverse matrix to the matrix you wrote above. Mechanically just build a matrix of the values you wrote, and then invert this matrix. The Db4 should be designed so that this inverse matrix will be the same (up to maybe a scaling / normalization factor / transpose), which is what makes orthogonal wavelets so simple to use. We only need one filter pair two short arrays of numbers.
Makes programming simpler and/or memory overheads slimmer than if we needed separate filters for forward and backward transform.
Usually in discrete wavelet transforms you iterate on the low-pass channel, which is the output from the scaling function or father wavelet. This is called dyadic decomposition, You can read more here. At every level you don't stop you will only have "result" of the mother wavelet. These are the "detail" coefficients at this level of resolution. At the lowest level of resolution (where you stop the transform) you will also have "approximation" coefficients, which come from the father wavelet function belonging this coarsest scale.
There also exist wavelet packet analysis, where you can iterate also on the high-pass band (where mother wavelets live) and not only on the low-pass band (where father wavelets live). But these packet analyses are probably a bit over-course.
What happens at next level is that for the coefficients of the high pass filter you put an identity matrix $I$ and for the coefficients of the low pass filter coefficients you put a subsampled version of original matrix.
We can see by ocular inspection that high pass filter comes last in the 8x8 matrix, so those are the elements which will be affected by the $I_4$ block.
$$beginbmatrixD&0\0&I_4endbmatrix$$
The "$D$" here will be the 4x4 size transform matrix for Db4. If we write it out it will look like this:
$$left[beginarraycccc0.483&0.8365&0.2241&-0.1294&0&0&0&0\0.2241&-0.1294&0.483&0.8365&0&0&0&0\ -0.1294&-0.2241&0.8365&-0.483&0&0&0&0\0.8365&-0.483&-0.1294&-0.2241&0&0&0&0\hline0&0&0&0&1&0&0&0\0&0&0&0&0&1&0&0\0&0&0&0&0&0&1&0\0&0&0&0&0&0&0&1endarrayright]$$
With lines to clarify the block-structure. Now when you have both transform matrices, what remains is to find their inverses, and for ON transform, Inverse is equal to transpose, so this is easily done.
$endgroup$
The inverse of this step of the transform will be the inverse matrix to the matrix you wrote above. Mechanically just build a matrix of the values you wrote, and then invert this matrix. The Db4 should be designed so that this inverse matrix will be the same (up to maybe a scaling / normalization factor / transpose), which is what makes orthogonal wavelets so simple to use. We only need one filter pair two short arrays of numbers.
Makes programming simpler and/or memory overheads slimmer than if we needed separate filters for forward and backward transform.
Usually in discrete wavelet transforms you iterate on the low-pass channel, which is the output from the scaling function or father wavelet. This is called dyadic decomposition, You can read more here. At every level you don't stop you will only have "result" of the mother wavelet. These are the "detail" coefficients at this level of resolution. At the lowest level of resolution (where you stop the transform) you will also have "approximation" coefficients, which come from the father wavelet function belonging this coarsest scale.
There also exist wavelet packet analysis, where you can iterate also on the high-pass band (where mother wavelets live) and not only on the low-pass band (where father wavelets live). But these packet analyses are probably a bit over-course.
What happens at next level is that for the coefficients of the high pass filter you put an identity matrix $I$ and for the coefficients of the low pass filter coefficients you put a subsampled version of original matrix.
We can see by ocular inspection that high pass filter comes last in the 8x8 matrix, so those are the elements which will be affected by the $I_4$ block.
$$beginbmatrixD&0\0&I_4endbmatrix$$
The "$D$" here will be the 4x4 size transform matrix for Db4. If we write it out it will look like this:
$$left[beginarraycccc0.483&0.8365&0.2241&-0.1294&0&0&0&0\0.2241&-0.1294&0.483&0.8365&0&0&0&0\ -0.1294&-0.2241&0.8365&-0.483&0&0&0&0\0.8365&-0.483&-0.1294&-0.2241&0&0&0&0\hline0&0&0&0&1&0&0&0\0&0&0&0&0&1&0&0\0&0&0&0&0&0&1&0\0&0&0&0&0&0&0&1endarrayright]$$
With lines to clarify the block-structure. Now when you have both transform matrices, what remains is to find their inverses, and for ON transform, Inverse is equal to transpose, so this is easily done.
edited Mar 19 at 2:06
answered Mar 18 at 20:17
mathreadlermathreadler
15.3k72263
15.3k72263
$begingroup$
Thanks for the answer but this is my problem. Suppose I take an array with 8 elements and decompose it with DWT DB4. I get two arrays with 4 elements. Let's call itaandb. Then I take one of these arrays and decompose again. I get two arrays with 2 elements, let's call itcandd. I cannot continue anymore because I have reached 2 elements. Now it is time to reverse it. I takecanddand inverse transform it, getting an array with 4 elements. How can I inverse transform again now? I only have one array with 4 elements... I need a second array of 4 elements.
$endgroup$
– SpaceDog
Mar 18 at 20:40
$begingroup$
You don't "throw away" the 4 detail coefficients you get from the first level, you keep them in the vector for later, when you get back to inverse transforming at first level. Do you know about block-diagonal matrices?
$endgroup$
– mathreadler
Mar 18 at 20:42
$begingroup$
@SpaceDog second level will be a matrix with the block matrix structure I describe in edited answer.
$endgroup$
– mathreadler
Mar 18 at 20:56
$begingroup$
Sorry, my math is rusty. After the first decomposition I have two 4x4 arrays, shown in my question. The first is scaling factor. Should I inject that into the same algorithm and obtain two a 2x2 matrices? and what happens on the way back? Please explain using the numbers I have provided...
$endgroup$
– SpaceDog
Mar 18 at 20:57
1
$begingroup$
brilliant!!!!!!!!!!! thanks. Fantastic explanation.
$endgroup$
– SpaceDog
Mar 19 at 14:43
|
show 4 more comments
$begingroup$
Thanks for the answer but this is my problem. Suppose I take an array with 8 elements and decompose it with DWT DB4. I get two arrays with 4 elements. Let's call itaandb. Then I take one of these arrays and decompose again. I get two arrays with 2 elements, let's call itcandd. I cannot continue anymore because I have reached 2 elements. Now it is time to reverse it. I takecanddand inverse transform it, getting an array with 4 elements. How can I inverse transform again now? I only have one array with 4 elements... I need a second array of 4 elements.
$endgroup$
– SpaceDog
Mar 18 at 20:40
$begingroup$
You don't "throw away" the 4 detail coefficients you get from the first level, you keep them in the vector for later, when you get back to inverse transforming at first level. Do you know about block-diagonal matrices?
$endgroup$
– mathreadler
Mar 18 at 20:42
$begingroup$
@SpaceDog second level will be a matrix with the block matrix structure I describe in edited answer.
$endgroup$
– mathreadler
Mar 18 at 20:56
$begingroup$
Sorry, my math is rusty. After the first decomposition I have two 4x4 arrays, shown in my question. The first is scaling factor. Should I inject that into the same algorithm and obtain two a 2x2 matrices? and what happens on the way back? Please explain using the numbers I have provided...
$endgroup$
– SpaceDog
Mar 18 at 20:57
1
$begingroup$
brilliant!!!!!!!!!!! thanks. Fantastic explanation.
$endgroup$
– SpaceDog
Mar 19 at 14:43
$begingroup$
Thanks for the answer but this is my problem. Suppose I take an array with 8 elements and decompose it with DWT DB4. I get two arrays with 4 elements. Let's call it
a and b. Then I take one of these arrays and decompose again. I get two arrays with 2 elements, let's call it c and d. I cannot continue anymore because I have reached 2 elements. Now it is time to reverse it. I take c and d and inverse transform it, getting an array with 4 elements. How can I inverse transform again now? I only have one array with 4 elements... I need a second array of 4 elements.$endgroup$
– SpaceDog
Mar 18 at 20:40
$begingroup$
Thanks for the answer but this is my problem. Suppose I take an array with 8 elements and decompose it with DWT DB4. I get two arrays with 4 elements. Let's call it
a and b. Then I take one of these arrays and decompose again. I get two arrays with 2 elements, let's call it c and d. I cannot continue anymore because I have reached 2 elements. Now it is time to reverse it. I take c and d and inverse transform it, getting an array with 4 elements. How can I inverse transform again now? I only have one array with 4 elements... I need a second array of 4 elements.$endgroup$
– SpaceDog
Mar 18 at 20:40
$begingroup$
You don't "throw away" the 4 detail coefficients you get from the first level, you keep them in the vector for later, when you get back to inverse transforming at first level. Do you know about block-diagonal matrices?
$endgroup$
– mathreadler
Mar 18 at 20:42
$begingroup$
You don't "throw away" the 4 detail coefficients you get from the first level, you keep them in the vector for later, when you get back to inverse transforming at first level. Do you know about block-diagonal matrices?
$endgroup$
– mathreadler
Mar 18 at 20:42
$begingroup$
@SpaceDog second level will be a matrix with the block matrix structure I describe in edited answer.
$endgroup$
– mathreadler
Mar 18 at 20:56
$begingroup$
@SpaceDog second level will be a matrix with the block matrix structure I describe in edited answer.
$endgroup$
– mathreadler
Mar 18 at 20:56
$begingroup$
Sorry, my math is rusty. After the first decomposition I have two 4x4 arrays, shown in my question. The first is scaling factor. Should I inject that into the same algorithm and obtain two a 2x2 matrices? and what happens on the way back? Please explain using the numbers I have provided...
$endgroup$
– SpaceDog
Mar 18 at 20:57
$begingroup$
Sorry, my math is rusty. After the first decomposition I have two 4x4 arrays, shown in my question. The first is scaling factor. Should I inject that into the same algorithm and obtain two a 2x2 matrices? and what happens on the way back? Please explain using the numbers I have provided...
$endgroup$
– SpaceDog
Mar 18 at 20:57
1
1
$begingroup$
brilliant!!!!!!!!!!! thanks. Fantastic explanation.
$endgroup$
– SpaceDog
Mar 19 at 14:43
$begingroup$
brilliant!!!!!!!!!!! thanks. Fantastic explanation.
$endgroup$
– SpaceDog
Mar 19 at 14:43
|
show 4 more comments
Thanks for contributing an answer to Mathematics Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3153191%2fhow-to-proceed-from-the-level-2-and-up-in-a-discrete-wavelet-transform-daubechie%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown