Skip to content
ЦОС · Тема 11 · Компресия

Подленти и уейвлети

Разделяме думата „Здравей“ на ниски и високи честоти и слушаме всяка половина отделно. Високата е тиха и почти не се чува – затова получава малко битове. После разделяме папагала на груба картинка и детайли, и изхвърляме почти всички детайли – без квадратчетата на JPEG.

≈ 4 мин четене∿ 5 живи уредаСамопроверка: 4 въпроса

Подленти: ниски и високи честоти ​

Банка от филтри разделя сигнала на ленти: НЧ филтър дава ниската лента L, ВЧ филтър – високата H. Всяка лента е два пъти по-тясна, затова може да се децимира – да се махне всеки втори отчет, без да се губи нищо (Найкуист за половин лента, тема 1). N отчета стават N/2 + N/2.

При думата 99,2 % от енергията е в ниската лента. Високата носи само съскането на „з“ и „в“ – и ухото е по-малко чувствително там.

Думата на две ленти
Входът: звукът, както е записан
020040060080010001200−101t – време, msx
входът x(n)
Изходът: звукът избраната лента
020040060080010001200−101t – време, msy
изходът y(n)
Спектрограма на избраната лента
fs/2 = 4000 Hz
Фигура 1.

Само L: думата е ясна, малко приглушена. Само H: тихо съскане. L + H: точно оригиналът – перфектно възстановяване. При Хаар лентите се застъпват повече (виж спектрограмата около 4 kHz): филтрите му са само два коефициента.

QMF и перфектно възстановяване ​

Истинските филтри не режат като с нож, затова всяка лента след децимацията има малко aliasing (тема 1). Магията е, че при правилно избрани филтри двата aliasing-а са с противоположни знаци и се унищожават при сумирането. QMF (квадратурно-огледални филтри) са такава двойка: ВЧ е огледалото на НЧ около средата, fs/4.

Двойка QMF и как се делят лентите
2 ленти: огледални филтри (QMF)
00,20,40,60,8100,51ω/π – честота|H|²/2
H₀ – НЧ (L) H₁ – ВЧ (H) сума
нива = 3 → 4 ленти
Диадично: все по-тесни НЧ ленти
00,20,40,60,81ω/π – честотаLLLLLHLHH
Фигура 2.

Ляво: НЧ и ВЧ се пресичат по средата, а сумата на квадратите им е права линия. Дясно: диадично разделяне – всяко ниво дели само ниската лента; „пакетно“ дели всяка.

Хаар е точно завъртането на 45° от тема 8: L = (x₁ + x₂)/√2, H = (x₁ − x₂)/√2. Пример (средно и полуразлика): [8, 6, 4, 4] → L = [7, 4], H = [1, 0]; второ ниво: 5,5 и 1,5. Резултат 5,5 · 1,5 · 1 · 0.

Подлентово кодиране (SBC) ​

Щом високата лента е тиха, ѝ даваме по-малко битове. Ниската с 6 бита, високата с 2 бита – средно 4 бита на отчет. SNR = 19,7 dB, а обикновена ИКМ с 4 бита дава 14,1 dB.

6 бита за ниската, 2 за високата
Входът: звукът, както е записан
020040060080010001200−101t – време, msx
входът x(n)
Изходът: звукът след SBC
020040060080010001200−101t – време, msy
изходът y(n)
Фигура 3.

Средно 4 бита на отчет дават ≈ 20 dB – колкото обикновена ИКМ с 5 бита (≈ 19 dB) и много повече от ИКМ с 4 (≈ 14 dB). Сложи 0 бита на високата лента – губи се само малко яснота на „з“. Обърни ги (2 за ниската, 6 за високата) – думата се разпада.

Уейвлети: диадично разлагане ​

Ако делим пак и пак само ниската лента, получаваме уейвлетно (диадично) разлагане: H (половината), LH (четвърт), LLH, LLL… Ниската лента накрая е 0 … fs/2^(L+1). Пакетното разделяне дели всяка лента – полезно, когато и във високите има важно (текстури, музика).

Уейвлетът е къса вълничка, която се мести (b) и разтяга (a). За разлика от DCT, която казва „какви честоти има в блока“, уейвлетът казва „какви честоти и къде“ – затова пази резките скокове.

Уейвлетът чисти шума, но пази скока
нива = 3
праг = 0,2
шум = 0,3
Хаар, 3 нива, праг 0,2 → пазим 568/1024 коеф.
00,20,40,60,81−2−10123t, sA
шумен вход след прага чист
Детайлите: всичко под прага става 0
0200400600800−202номер на коефициента (първо H, после LH…)стойност
детайлни коефициенти (H, LH, LLH…)
Спектър (пунктир – границите на лентите)
0100200300400500−500f, HzdB
вход изход
Фигура 4.

Синус + скок + шум. Детайлите под прага стават 0: шумът изчезва, а скокът остава остър – цялата му информация е в няколко коефициента точно там, където е.

2D уейвлети: JPEG 2000 ​

За снимката делим по редове и после по колони → четири ленти: LL (умалена снимка), LH, HL (хоризонтални и вертикални ръбове), HH (диагонални). После пак делим само LL – на 3 нива. Накрая пазим само 5 % от детайлите (най-големите): PSNR = … dB.

Папагалът в уейвлети
оригиналът
разлагането на 3 нива
5 % от детайлите
Фигура 5.

В средата: горе вляво е умаленият папагал (LL), около него – сиви полета с ръбовете. Почти всичко е сиво = нула. С 5 % от детайлите снимката е размазана по-меко, без квадратчета – сравни с JPEG при 1–2 коефициента в тема 8. (Хаар все пак дава леки „стъпала“; JPEG 2000 ползва по-гладки уейвлети.)

Самопроверка ​

1. fs = 8 kHz, 3 нива уейвлет. Каква е ниската лента накрая?

fs/2^(3+1) = 500 Hz (0…500 Hz).

2. Защо подлентовото кодиране пести битове?

Във високите ленти има малко енергия и ухото е по-малко чувствително там → по-малко битове.

3. Всяка лента има aliasing. Защо изходът е чист?

При QMF двата aliasing-а са с противоположни знаци и се унищожават при сумирането (условието AC).

4. Защо при силна компресия JPEG 2000 няма квадратчета, а JPEG има?

JPEG трансформира отделни блокове 8×8 – губи границите между тях. Уейвлетите обхващат цялата снимка с вълнички с различен размер.