{
  "aliases": null,
  "backlinks": null,
  "body": "\n## Definition\n\nLet $(h_n)$ and $(g_n)$ be the real low-pass and high-pass filters of an orthonormal wavelet, with $g_n = (-1)^n h_{1-n}$, as in the [[fast wavelet transform|PDVYQAW887]].\nFor a sequence $c = (c_m)_{m \\in \\Z}$ define the sequences $Hc$ and $Gc$ by\n$$(Hc)_k = \\sum_m h_{m-2k} \\, c_m, \\qquad (Gc)_k = \\sum_m g_{m-2k} \\, c_m.$$\nLet $x$ be a sequence and let $J \\ge 1$ be an integer.\nThe *wavelet packet decomposition* of $x$ to depth $J$ is the family of sequences $w_{j,p}$, for $0 \\le j \\le J$ and $0 \\le p \u003c 2^j$, defined by\n\n1. $w_{0,0} = x$;\n2. $w_{j+1,2p} = H w_{j,p}$ and $w_{j+1,2p+1} = G w_{j,p}$ for $0 \\le j \u003c J$.\n\nThe sequences $w_{j,p}$ are the nodes of a full binary tree, in which $w_{j,p}$ has children $w_{j+1,2p}$ and $w_{j+1,2p+1}$.\n\n## Remarks\n\nThe [[discrete wavelet transform|P3H4MMC4ZH]] keeps only the nodes $w_{j,0}$ and $w_{j,1}$, that is, it splits only the low-pass branch again.\n\nEach step $c \\mapsto (Hc, Gc)$ is an orthogonal transform of $\\ell^2(\\Z)$, by the orthonormality of the filters.\nSo for every admissible subtree, in which each node is either a leaf or has both children, the leaves together determine $x$ and preserve its energy.\nFor a finite signal of length $N = 2^J$ with periodic extension, every level contains $N$ coefficients in total.\n\nExample: with the Haar filters and $x = (1, 1, 1, 1)$, level $1$ gives $w_{1,0} = (\\sqrt{2}, \\sqrt{2})$ and $w_{1,1} = (0, 0)$.\nLevel $2$ gives $w_{2,0} = (2)$, $w_{2,1} = (0)$, $w_{2,2} = (0)$ and $w_{2,3} = (0)$.\nThe energy $4$ of $x$ is kept in each level.\n\nNon-example: if only $H$ is applied at a node and $G$ is dropped, the leaves no longer determine the signal.\nWith the Haar filters, $(1, -1)$ and $(0, 0)$ both have $H$-output $(0)$.\n\n## Explanations\n\n### L1 human\n\nAt every node of the tree, the current list of numbers is split into a smooth half and a detail half.\nUnlike the plain wavelet transform, the detail halves are split again too.\n",
  "commit": "ff8a40749dc16545e3d2fc637f6b0196e81d0bfa",
  "front": {
    "defines": "2QKRBPS8B9",
    "kind": "definition",
    "msc": [
      "42C40",
      "65T60",
      "94A12"
    ],
    "name": "Wavelet packet decomposition",
    "sources": [
      {
        "url": "https://en.wikipedia.org/wiki/Wavelet_packet_decomposition"
      }
    ],
    "tag": "2HNN80TMGH",
    "uses": [
      "PDVYQAW887",
      "P3H4MMC4ZH"
    ]
  },
  "kind": "definition",
  "link": "https://tamnd.github.io/math2/node/2HNN80TMGH/",
  "links": [
    {
      "field": "defines",
      "target": "2QKRBPS8B9"
    },
    {
      "field": "uses",
      "target": "PDVYQAW887"
    },
    {
      "field": "uses",
      "target": "P3H4MMC4ZH"
    }
  ],
  "markdown": "https://tamnd.github.io/math2/node/2HNN80TMGH.md",
  "msc": [
    "42C40",
    "65T60",
    "94A12"
  ],
  "name": "Wavelet packet decomposition",
  "prov": null,
  "role": "",
  "source": "https://github.com/tamnd/math2/blob/main/nodes/2HN/2HNN80TMGH.md",
  "status": null,
  "tag": "2HNN80TMGH",
  "uri": "m2://2HNN80TMGH",
  "url": "https://tamnd.github.io/math2/wiki/wavelet-packet-decomposition-definition/",
  "writing": {
    "tag": "2HNN80TMGH",
    "kind": "definition",
    "level": "W0",
    "next": [
      {
        "what": "an inventory row",
        "note": "the row of the inventory that the node accounts for",
        "have": 0,
        "want": 1
      },
      {
        "what": "a source with a locator",
        "have": 0,
        "want": 1
      }
    ]
  }
}
