Hledat:

Parfémy Krása Produkty pro zdraví Hodinky Elektro Šperky a klenoty Nábytek Nářadí a zahrada Outdoor Počítače a notebooky
 

Diskrétní vlnková transformace

Diskrétní vlnková transformace (anglicky discrete wavelet transform, zkratkou DWT) je v numerické a funkcionální analýze transformace odvozená z vlnkové transformace pro diskrétní vlnky (wavelety).

První DWT byla objevena maďarským matematikem jménem Alfréd Haar. Pro vstup reprezentovaný seznamem 2n čísel je Haarova vlnková transformace považována za nejjednodušší spárování (tvořit pár) vstupních hodnot - uložením rozdílu a předáním součtu (do dalšího stupně transformace). Tento proces je opakován rekurzivně (na součty). Konečný výsledek transformace je 2n − 1 rozdílů a jeden celkový průměrný součet.

Nejznámější diskrétní vlnkové transformace byly formulovány belgickou matematičkou jménem Ingrid Daubechies v roce 1988. Tyto formulace jsou založeny na použití rekurentních vztahů ke generování postupně se zjemňujících diskrétních vzorků původní mateřské funkce. Každé rozlišení je dvojnásobkem předchozího stupně. V jejích seminárních pracích odvozuje rodinu vlnek, první z nich je Haarův wavelet.

Další formy diskrétní vlnkové transformace zahrnují stacionární vlnkovou transformaci (kde je vynecháno podvzorkování), vlnkové paketové transformace a např. komplexní vlnkovou transformaci.

Diskrétní vlnková transformace má mnoho aplikací ve vědě, strojírenství, matematice a informatice. Nejvýznamnější použití DWT je pro kódování signálu, kde jsou vlastnosti této transformace využívány k reprezentaci diskrétního signálu ve více redundantních formách, často jako předběžná úprava pro kompresi dat.

Obsah

[editovat] Definice

[editovat] Jeden stupeň transformace

DWT signálu x je spočítána jeho průchodem skrze sérii filtrů. Nejprve se vzorky nechají projít skrze dolní propusť (low pass filtr) s impulzní odezvou g vyplývající z konvoluce:

y[n] = (x * g)[n] = \sum\limits_{k =  - \infty }^\infty  {x[k] g[n - k]}

Signál je také současně dekomponován použitím horní propusti (high pass filtru) h. Výstupy dávají podrobné koeficienty (z horní propusti) a přibližné koeficienty (z dolní propusti). Je důležité, že tyto dva filtry jsou vzájemně komplementární a splňují další podmínky – označují se jako kvadraturně zrcadlové filtry (anglicky se označují jako „quadrature mirror filter“).

Polovina frekvencí signálu byla odebrána, tedy polovina vzorků může být zahozena využitím Nyquistova pravidla. Výstupy filtru jsou tedy dále podvzorkovány dvěma (každý druhý vzorek je zahozen):

y_{\mathrm{low}} [n] = \sum\limits_{k =  - \infty }^\infty  {x[k] g[2 n - k]}
y_{\mathrm{high}} [n] = \sum\limits_{k =  - \infty }^\infty  {x[k] h[2 n - k]}
Blokový diagram analýzy filtru
Blokový diagram analýzy filtru


S podvzorkovacím operátorem \downarrow

(y \downarrow k)[n] = y[k n]

může být výše uvedené zapsáno stručněji.

y_{\mathrm{low}} = (x*g)\downarrow 2
y_{\mathrm{high}} = (x*h)\downarrow 2

Počítání celé konvoluce x * g s následným podvzorkováním může mrhat výpočetním časem.

Optimalizace, kde jsou tyto 2 výpočty prokládány, se anglicky označuje jako Lifting scheme.

[editovat] Kaskádování a banky filtrů

Tato dekompozice je opakována k dalšímu zvýšení frekvenčního rozlišení. To je reprezentováno jako binární strom s uzly reprezentujícími podprostor s rozdílným umístěním času/frekvence. Strom je znám jako banka filtrů.

3 stupňová banka filtrů
3 stupňová banka filtrů


Na každém stupni v diagramu výše je signál rozložen do nízkých (low) a vysokých (high) frekvencí. Kvůli procesu dekompozice musí být vstupní signál násobkem 2n, kde n je počet stupňů.

Například signál s 32 vzorky, frekvenčním rozsahem 0 až fn a 3 stupni dekompozice, 4 výstupní stupně:

Úrověň Frekvence Vzorky
3 0fn / 8 4
fn / 8fn / 4 4
2 fn / 4fn / 2 8
1 fn / 2fn 16


Frekvenční doména reprezentace DWT
Frekvenční doména reprezentace DWT


[editovat] Příklad kódu

Haarův wavelet, jazyk C:

[editovat] Dopředná

Dopředná (forward) 1D:

void fwt(const double *const_input, double *output)
{
        static double input[LENGTH];
        memcpy(input,const_input,sizeof(double)*LENGTH);
        for(int length = LENGTH >> 1; ; length >>= 1)
        {
                for(int i = 0; i < length; i++)
                {
                        double sum = (input[i*2]+input[i*2+1])/2;
                        double difference = (input[i*2]-input[i*2+1])/2;
                        output[i] = sum;
                        output[length+i] = difference;
                }
                if(length == 1) 
                        return;
                memcpy(input,output,sizeof(double)*length);
        }
}

[editovat] Zpětná

Zpětná (inverzní) 1D:

void iwt(const double *const_input, double *output)
{
        static double input[LENGTH];
        memcpy(input,const_input,sizeof(double)*LENGTH);
        for(int length = 1; ; length <<= 1)
        {
                for(int i = 0; i < length; i++)
                {
                        double a = (input[i] - input[length+i]);
                        double b = (input[i] + input[length+i]);
                        output[i*2] = b;
                        output[i*2+1] = a;
                }
                if(length == LENGTH >> 1)
                        return;
                memcpy(input,output,sizeof(double)*length*2);
        }
}

Pozn. Rychlá implementace diskrétní biortogonální CDF 9/7 vlnkové transformace v jazyce C (použitá ve standardu JPEG 2000) je k dispozici zde.

[editovat] Reference

[editovat] Související články

 
Diskrétní vlnková transformace v jiných jazycích: Deutsch, English, Français, 日本語, Português, Русский, 中文
Tento článek je převzat z české wikipedie - otevřené encyklopedie, originální článek naleznete na adrese: „http://cs.wikipedia.org/wiki/Diskr%C3%A9tn%C3%AD_vlnkov%C3%A1_transformace
Stránka byla naposledy upravena v Stránka byla naposledy editována 28. 9. 2008 v 21:05.
Veškerý text je dostupný za podmínek GNU Free Documentation License (Autorské právo pro podrobnosti).
Další služby: Portál | Katalog | Hledej | Zprávy | Počasí | Kurzy | Práce | Slovník | TV | Online hry | Java hry | SMS | Loga a melodie | Chat | Fórum | Kontakt