Signál a vzorkování: proč platí Nyquistův teorém
Co je signál, vzorkování a vzorkovací frekvence, aliasing a falešné frekvence, Nyquistův–Shannonův teorém a rekonstrukce funkcí sinc, antialiasingový filtr a kvantizace na bity.
Série Základy AI Díl 56 z 83
- Mapa umělé inteligence: co je co a jak to do sebe zapadá
- Stručná historie umělé inteligence: od Turinga po jazykové modely
- Data, model, trénink, inference: základní pojmy na jednom příkladu
- Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
- Množiny a relace: stavebnice, ze které se skládají definice v AI
- Funkce a zobrazení: proč je každý model v AI funkce
- Logika a důkazy: pravidla, podle kterých se v AI uvažuje
- Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
- Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
- Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
- Gradientní sestup: jak se model učí
- Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
- Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
- Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
- Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
- Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
- Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
- Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
- Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
- Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
- Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
- Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
- Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
- Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
- Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
- Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
- Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
- Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
- Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
- Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
- Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
- Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
- Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
- Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
- Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
- Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
- Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
- Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
- Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
- Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
- Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
- Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
- Přeučení a regularizace: proč model, který zná data nazpaměť, selže
- Vyhodnocení modelu: křížová validace, F1 a křivka ROC
- Shlukování a snížení dimenze: k-means, PCA a t-SNE
- Klasifikace a regrese: dvě úlohy učení s učitelem
- Lineární regrese: nejmenší čtverce geometricky i maticově
- Polynomiální a nelineární regrese: jak přímku ohnout
- Logistická regrese: sigmoida, šance a křížová entropie
- Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
- Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
- Ztrátové funkce: co přesně model minimalizuje
- Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
- Ansámbly: náhodný les a gradient boosting
- SVM a jádrový trik: nejširší hranice a jak ji ohnout
- Signál a vzorkování: proč platí Nyquistův teorém
- Fourierova transformace: rozklad signálu na frekvence
- Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
- Zvuk a řeč: spektrogram, melová škála a MFCC
- Obraz jako signál: pixely, barvy, konvoluce a hrany
- Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
- Neuronová síť od nuly: zpětné šíření chyby krok za krokem
- Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
- Konvoluční sítě: jak síť poznává obrázky
- Rekurentní sítě: paměť pro posloupnosti a mizející gradient
- LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
- Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
- Embeddingy a word2vec: jak se slovo stane vektorem
- Mechanismus pozornosti: jak se model naučí, kam se dívat
- Transformery a velké jazykové modely: architektura krok za krokem
- Tokenizace: jak se text rozseká na kousky pro model
- Předtrénování a škálování: proč větší model a víc dat funguje
- Doladění a RLHF: jak se z doplňovače textu stane asistent
- Prompty, kontext a RAG: jak modelu dát správné informace
- Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
- Generativní adversariální sítě (GAN): padělatel proti detektivovi
- Difúzní modely: jak se z čistého šumu stane obrázek
- Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
- Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
- Policy gradient a PPO: učení přímo strategie
- Jak funguje AI agent: jazykový model ve smyčce s nástroji
- Programování s AI agenty: zadání, testy a kontrola
- Vyhodnocení a bezpečnost AI systémů: jak měřit a jak hlídat
Celá osnova série 83 z 83 témat hotovo
- Jak se ze spojitého signálu stane řada čísel a co je vzorkovací frekvence.
- Proč příliš řídké vzorkování vyrobí falešnou frekvenci a jak se tomu brání.
- Co přesně říká Nyquistův–Shannonův teorém a co přidává kvantizace.
Co se hodí znát předem: Funkce a zobrazení: proč je každý model v AI funkce
Mikrofon v telefonu zachytí tlak vzduchu, který se mění plynule, v každém okamžiku. Počítač ale umí uložit jen konečně mnoho čísel. Jak z plynulé vlny udělat řadu čísel — a nepřijít přitom o nic důležitého? Odpověď dal v roce 1949 Claude Shannon a je překvapivě přesná: když měříte dost často, neztratíte vůbec nic. Když málo často, dostanete něco horšího než ztrátu — falešný signál, který tam nikdy nebyl. Tímhle dílem začíná řada o zpracování signálů: zvuku, obrazu a dat ze senzorů, ze kterých se učí rozpoznávání řeči i počítačové vidění.
Navazuje na díl Funkce a zobrazení.
1. Co je signál
Definice — signál, sinusovka, frekvence
Nechť I ⊆ ℝ je interval časů (v sekundách; může to být i celé ℝ). Spojitý signál je funkce x : I → ℝ; hodnota x(t) je velikost sledované veličiny (tlak vzduchu, napětí, jas) v okamžiku t ∈ I. Diskrétní signál je posloupnost x : ℤ → ℝ (nebo jen x : {0, 1, …, N − 1} → ℝ), n ↦ x[n] — hodnoty má jen v oddělených okamžicích očíslovaných celým indexem n. Místo času může být nezávislou proměnnou i poloha v prostoru.
Nechť A > 0, f ≥ 0 a φ ∈ ℝ. Sinusovka s amplitudou A, frekvencí f a fází φ je spojitý signál x : ℝ → ℝ,
x(t) = A sin(2πft + φ),
kde t je v sekundách, f v hertzích (1 Hz = 1 kmit za sekundu) a φ v radiánech. Pro f > 0 je perioda T = 1/f nejmenší kladné číslo, pro které x(t + T) = x(t) pro všechna t ∈ ℝ. Sinusovka tedy kmitá mezi −A a A a za každou sekundu vykoná právě f celých kmitů.
Stejný předpis dává smysl i pro záporné f: protože sin(−u) = −sin u, je A sin(2πft + φ) = −A sin(2π|f|t − φ), tedy obrácená sinusovka s frekvencí |f|.
Komorní a, podle kterého se ladí nástroje, je sinusovka s frekvencí 440 Hz: vzduch se 440krát za sekundu zhustí a zředí. Amplituda je hlasitost, frekvence výška tónu. Skutečné zvuky jsou směsi mnoha sinusovek naráz — o tom, jak je rozplést, bude další díl o Fourierově transformaci. Signálem je ale i teplota během dne, tep srdce na EKG nebo jas pixelů podél řádku fotky.
x(t) = A sin(2πft + φ)
- A
- sinus sám kmitá jen mezi −1 a 1; amplituda ho natáhne na skutečný rozkmit veličiny (hlasitost, výchylku membrány)
- 2π
- sinus se opakuje po 2π radiánech. Násobek 2π zařídí, že za jednu sekundu proběhne právě f celých kmitů — bez něj by f nebyla frekvence v hertzích, ale v radiánech za sekundu
- f
- frekvence: kolik kmitů za sekundu. Délka jednoho kmitu (perioda) je T = 1/f
- φ
- fáze posune vlnu v čase. Dvě sinusovky se stejnou frekvencí, které začaly v jiný okamžik, se liší jen v φ
2. Vzorkování
Definice — vzorkování a vzorkovací frekvence
Nechť x : ℝ → ℝ je spojitý signál a fs > 0 je vzorkovací frekvence (počet vzorků za sekundu, v Hz). Její převrácená hodnota Ts = 1/fs je vzorkovací perioda. Vzorkování je přiřazení diskrétního signálu — posloupnosti vzorků
x[n] = x(nTs) = x(n/fs), n ∈ ℤ
(skutečný záznam je konečný: n = 0, 1, …, N − 1). Vzorek x[n] je tedy hodnota signálu v okamžiku nTs a mezi těmito okamžiky signál neměříme.
Je to jako fotit tanečníka stroboskopem: místo plynulého pohybu máme sérii snímků. Otázka je, kolik snímků za sekundu stačí, abychom z nich pohyb poznali správně.
Mezi dvěma vzorky uplyne vzorkovací perioda Ts = 1/fs: u CD (44,1 kHz) je to 22,7 µs, u modelů řeči (16 kHz) 62,5 µs. Když dosadíme sinusovku, vyjde vzorec, na kterém stojí celý zbytek dílu:
x[n] = A sin(2πf · n/fs + φ) = A sin(2π · f/fs · n + φ)
- x[n]
- n-tý vzorek (v obrázcích modré body); hranaté závorky říkají, že index je celé číslo — mezi vzorky nic není
- n/fs
- okamžik n-tého měření v sekundách, n · Ts. Vzorkování neudělá nic jiného, než že do spojité funkce dosadí jen tyhle časy
- f/fs
- kolik kmitů připadne na jeden vzorek. Po vzorkování zbude jen tenhle podíl — samotné f ani fs ze vzorků vyčíst nejde. Proto může 9 Hz při 10 Hz vypadat stejně jako −1 Hz
Příklad — sinusovka 2 Hz vzorkovaná 8krát za sekundu
f/fs = 2/8 = 1/4 kmitu na vzorek, takže x[n] = sin(2π · 1/4 · n) = sin(π/2 · n) (barvy podle vzorce výše):
n = 0, 1, 2, 3, 4: t = n/8 = 0; 0,125; 0,25; 0,375; 0,5 s → x[n] = 0, 1, 0, −1, 0
Na kmit připadají čtyři vzorky: nula, vrchol, nula, důl. Při fs = 3 Hz je podíl 2/3 kmitu na vzorek a vzorky vyjdou 0; −0,866; 0,866; 0 — přesně jako u sinusovky −1 Hz (podíl −1/3), protože 2/3 a −1/3 se liší o celý kmit.
Dvacet vzorků za sekundu sinusovku jasně vykreslí. Osm vzorků stačí taky: nejsou hezké, ale jiná sinusovka do 4 Hz jimi neprochází. Při třech vzorcích za sekundu se ale děje něco zvláštního: vzorky leží přesně na sinusovce s frekvencí 1 Hz. Z vzorků samotných nejde poznat, že signál měl 2 Hz.
3. Aliasing: falešná frekvence
Definice — aliasing
Nechť fs > 0 je vzorkovací frekvence. Podle věty níže mají sinusovky se stejnou amplitudou a fází a s frekvencemi f a f + kfs, kde k ∈ ℤ, stejné vzorky. Pro frekvenci f ∈ ℝ definujeme
k = round(f/fs) ∈ ℤ (nejbližší celé číslo) a fa = |f − kfs| ∈ [0, fs/2].
Číslo fa je zdánlivá frekvence: nejmenší nezáporná frekvence, jejíž sinusovka (případně obrácená) má stejné vzorky jako sinusovka s frekvencí f. Aliasing nastane, právě když fa ≠ |f|, tj. právě když |f| > fs/2: sinusovka se po vzorkování jeví jako sinusovka s jinou, nižší frekvencí fa.
Ve westernech se kola dostavníku občas točí pozpátku. Kamera točí 24 snímků za sekundu, a když se kolo mezi dvěma snímky otočí skoro o celou paprskovou mezeru, vypadá to, jako by se o kousek vrátilo. Rychlé otáčení se v záznamu převlékne za pomalé — a dokonce opačné.
Vzorky devítihertzové sinusovky se od vzorků (obrácené) jednohertzové liší jen v zaokrouhlovací chybě počítače, na patnáctém desetinném místě. Obecně: 7 Hz vzorkovaných dvanáctkrát za sekundu vypadá jako 5 Hz; ultrazvuk 25 kHz zaznamenaný frekvencí CD (44,1 kHz) se objeví jako slyšitelný tón 19,1 kHz. Aliasing nejde dodatečně opravit — ze vzorků se nedá poznat, která z možných frekvencí to byla.
Věta — frekvence lišící se o násobek fs mají stejné vzorky
Nechť f ∈ ℝ, φ ∈ ℝ a fs > 0. Pak pro každé k ∈ ℤ a každé n ∈ ℤ platí
sin(2π(f + kfs) · n/fs + φ) = sin(2πf · n/fs + φ),
tj. sinusovky s frekvencemi f a f + kfs mají při vzorkování frekvencí fs stejné vzorky.
Důkaz. Roznásobíme: 2π(f + kfs) · n/fs = 2πf · n/fs + 2π · kn. Číslo kn je celé a sinus má periodu 2π, takže přičtení 2πkn hodnotu nezmění. ∎
Navíc sin(−u) = −sin(u): záporná frekvence je táž sinusovka obrácená (s fází posunutou o π). Proto se 9 Hz při 10 Hz převlékne za −1 Hz, tedy za obrácenou jednohertzovou.
fa = | f − kfs |, k = round(f/fs)
- fa
- zdánlivá frekvence — ta, kterou ze vzorků „uvidíme“ (v obrázcích jantarová čárkovaná křivka). Vždy leží mezi 0 a fs/2
- f
- skutečná frekvence signálu
- kfs
- nejbližší celý násobek vzorkovací frekvence. Podle věty výše smíme od f odečíst libovolný násobek fs, vzorky se nezmění; nejbližší násobek dá nejpomalejší sinusovku, která vzorky vysvětlí — a tu oko (i rekonstrukce) zvolí
Příklad — zdánlivé frekvence z textu
| f | fs | f/fs | k | f − kfs | fa |
|---|---|---|---|---|---|
| 2 Hz | 8 Hz | 0,25 | 0 | 2 Hz | 2 Hz |
| 2 Hz | 3 Hz | 0,67 | 1 | −1 Hz | 1 Hz |
| 9 Hz | 10 Hz | 0,9 | 1 | −1 Hz | 1 Hz |
| 7 Hz | 12 Hz | 0,58 | 1 | −5 Hz | 5 Hz |
| 25 kHz | 44,1 kHz | 0,57 | 1 | −19,1 kHz | 19,1 kHz |
Barvy odpovídají členům vzorce výše. Dokud je f/fs pod 0,5, vyjde k = 0 a frekvence se nezmění. Jakmile podíl překročí polovinu, zaokrouhlí se na 1 a frekvence se „zrcadlí“ kolem fs/2: čím výš nad ní skutečná frekvence je, tím níž se objeví.
4. Nyquistův–Shannonův teorém
Věta — vzorkovací teorém
Nechť B > 0. Spojitý signál x : ℝ → ℝ s konečnou energií (∫ x(t)2 dt < ∞) je frekvenčně omezený s mezí B, právě když jeho Fourierova transformace X(f) (viz díl Fourierova transformace) splňuje X(f) = 0 pro všechna |f| > B — signál neobsahuje žádné frekvence vyšší než B. Pro vzorkovací frekvenci fs > 0 se číslo fs/2 nazývá Nyquistova frekvence.
Věta (Nyquist, Shannon, Kotělnikov). Nechť x je frekvenčně omezený s mezí B, fs > 2B a x[n] = x(n/fs) pro n ∈ ℤ. Pak pro každé t ∈ ℝ platí
x(t) = ∑n=−∞∞ x[n] · sinc(fst − n)
(Whittakerova–Shannonova interpolace; funkce sinc je definovaná níže). Signál je tedy vzorky určený jednoznačně a přesně. Pro sinusovky a jejich konečné součty, které konečnou energii nemají, platí závěr také, pokud jsou všechny jejich frekvence ostře menší než fs/2.
Na každý kmit nejvyšší frekvence potřebujete víc než dva vzorky — jeden „nahoře“ a jeden „dole“. Pak mezi vzorky nemůže být nic, co by vám uteklo: jediná hladká křivka bez vyšších frekvencí, která vzorky prochází, je ta skutečná. Rekonstrukce funkcí sinc ji najde: každý vzorek přispěje malou vlnkou, která je v jeho okamžiku 1 a ve všech ostatních vzorcích 0.
x(t) = ∑n x[n] · sinc(fst − n)
- x(t)
- zrekonstruovaný spojitý signál v libovolném okamžiku t, i mezi vzorky (v obrázku níže zelená křivka)
- x[n]
- naměřené vzorky — jediné, co máme. Každý slouží jako výška „vlnky“, kterou do součtu přispěje
- fst − n
- jak daleko je okamžik t od n-tého vzorku, měřeno v počtu vzorkovacích period. Díky tomu má každá vlnka střed ve svém vzorku a stejný tvar pro každé fs
- sinc(…)
- tvar vlnky: v čase vlastního vzorku 1, v časech všech ostatních vzorků 0 — takže součet prochází přesně všemi vzorky. Přitom neobsahuje žádnou frekvenci nad fs/2, takže součet také ne
Definice — funkce sinc a proč prochází vzorky
Normovaná funkce sinc je funkce sinc : ℝ → ℝ,
sinc(u) = sin(πu)/πu pro u ≠ 0, sinc(0) = 1.
Hodnota v nule je limita zlomku pro u → 0, takže sinc je spojitá.
Věta. Pro každé m ∈ ℤ, m ≠ 0, je sinc(m) = 0. Důkaz: sin(πm) = 0 pro celé m a jmenovatel πm nulový není. ∎
Důsledek. Nechť fs > 0, (x[n])n ∈ ℤ jsou vzorky a x̂(t) = ∑n x[n] · sinc(fst − n), pokud řada konverguje. Pak x̂(m/fs) = x[m] pro každé m ∈ ℤ. Důkaz: v okamžiku t = m/fs je fst − n = m − n celé číslo, takže ze součtu zbude jediný nenulový člen n = m s váhou sinc(0) = 1. ∎
Mezi vzorky přispívají všechny: v polovině mezi dvěma vzorky má každý z nich váhu sinc(±0,5) = 2/π ≈ 0,637, další dva sinc(±1,5) ≈ −0,212 a tak dál se střídavým znaménkem a klesající velikostí (barvy podle vzorce výše).
def rekonstrukce(vzorky, fs, t):
# vzorky[n] = x(n / fs) pro n = 0, 1, …, N−1
soucet = 0
for n, xn in enumerate(vzorky):
u = fs * t - n # vzdálenost od n-tého vzorku ve vzorcích
soucet += xn * (1 if u == 0 else sin(pi * u) / (pi * u))
return soucet
Ve vzorci je součet přes všechna celá n, od minus do plus nekonečna. Skutečný záznam je konečný, a protože sinc klesá jen jako 1/u, chybějící vzdálené vzorky trochu chybí všude. Proto i nad Nyquistovou mezí vyjde malá nenulová chyba.
Signál je součet tónů 3 Hz a 7 Hz; jeho efektivní hodnota je 0,79. Při vzorkování 20 Hz (nad dvojnásobkem 7 Hz) se rekonstrukce od originálu liší v průměru o 0,0007 — a i tahle drobnost jde jen na vrub toho, že jsme sčítali konečně mnoho vzorků. Při 16 Hz je chyba 0,002. Při 12 Hz je 7 Hz nad Nyquistovou frekvencí (6 Hz), převlékne se za 5 Hz a chyba rekonstrukce vyskočí na 0,50. Přesně na hranici, při 14 Hz, je 0,29 — teorém vyžaduje ostře víc než dvojnásobek.
Definice — efektivní hodnota a chyba rekonstrukce
Nechť x : ℝ → ℝ je signál, N ≥ 1 a t1 < … < tN jsou okamžiky husté rovnoměrné mřížky zkoumaného intervalu. Efektivní hodnota (RMS, root mean square) signálu x na této mřížce je odmocnina z průměru čtverců
RMS(x) = √1/N ∑i=1N x(ti)2.
Nechť x̂ : ℝ → ℝ je rekonstrukce signálu x. Chyba rekonstrukce je efektivní hodnota rozdílu
RMS(x̂ − x) = √1/N ∑i=1N (x̂(ti) − x(ti))2;
v textu ji počítáme na N = 801 rovnoměrně rozložených bodech intervalu [0, 2] s.
Sinusovka s amplitudou A má efektivní hodnotu A/√2 (průměr sin2 přes celé kmity je 1/2), a efektivní hodnoty dvou sinusovek s různými frekvencemi se sčítají „v kvadrátu“.
signál sin(2π · 3t) + 0,5 sin(2π · 7t + 0,6): RMS = √12/2 + 0,52/2 = √0,5 + 0,125 = √0,625 = 0,79
chyba při 12 Hz vůči velikosti signálu: 0,50/0,79 = 63 % · při 20 Hz: 0,0007/0,79 = 0,09 %
Příklad — proč přesně dvojnásobek nestačí
Sinusovka sin(2π · 7t) vzorkovaná přesně 14krát za sekundu: f/fs = 7/14 = 1/2 a (barvy podle vzorce vzorkování výše)
x[n] = sin(2π · 1/2 · n) = sin(πn) = 0 pro každé n
Všechny vzorky padnou do průchodů nulou a signál ze záznamu úplně zmizí — nejde ho odlišit od ticha. S jinou fází by vzorky nulové nebyly, ale ze vzorků by nešlo poznat amplitudu: sin(πn + φ) = (−1)n sin φ, takže amplituda A a fáze φ dávají tytéž vzorky jako jakákoli dvojice se stejným A sin φ. Proto teorém chce fs > 2B, ne ≥.
Teorém nese jména Harryho Nyquista, který v roce 1928 odvodil, kolik impulzů za sekundu přenese telegrafní linka, a Clauda Shannona, který ho v roce 1949 dokázal v dnešní podobě. Nezávisle na nich ho v roce 1933 publikoval Vladimir Kotělnikov.
5. Než začnete vzorkovat: antialiasingový filtr
Teorém má předpoklad: signál nesmí obsahovat frekvence nad fs/2. Skutečný svět ho nedodrží — v místnosti je vždycky nějaký vysokofrekvenční šum. Proto každý převodník před vzorkováním pustí signál přes antialiasingový filtr, který vysoké frekvence potlačí. Vzorkovací frekvence se pak volí s rezervou:
Definice — dolní propust a přechodové pásmo
Nechť fc > 0. Ideální dolní propust s mezní frekvencí fc je lineární systém (součet signálů zpracuje po složkách), který
- každou sinusovku A sin(2πft + φ) s |f| < fc propustí beze změny,
- každou sinusovku s |f| > fc převede na nulový signál.
Nechť fs > 0 je vzorkovací frekvence. Antialiasingový filtr je dolní propust zařazená před vzorkování, s mezní frekvencí fc ≤ fs/2. Skutečný filtr neumí utnout ostře; jeho přechodové pásmo je interval [fp, fz], kde fp je nejvyšší frekvence, kterou ještě propouští (téměř) beze změny, a fz nejnižší frekvence, od které výš ji už dostatečně potlačí. Aby nevznikl aliasing, musí platit fz ≤ fs/2.
CD: slyšitelné pásmo do B = 20 kHz, 2B = 40 kHz < 44,1 kHz ✓
přechodové pásmo: od 20 kHz do fs/2 = 44,1/2 kHz = 22,05 kHz, tedy 2,05 kHz
Čím užší přechodové pásmo, tím strmější (a dražší, delší) filtr. Proto se vzorkuje o kus rychleji, než by teorém vyžadoval.
| Použití | vzorkovací frekvence | proč |
|---|---|---|
| CD | 44,1 kHz | člověk slyší nejvýš asi 20 kHz; 2,05 kHz rezerva pro filtr |
| klasický telefon | 8 kHz | řeč se přenáší jen do 3,4 kHz |
| modely rozpoznávání řeči | obvykle 16 kHz | hlavní informace řeči leží pod 8 kHz |
| film | 24 snímků/s | plynulý pohyb pro oko; rychlé otáčení se přesto „aliasuje“ |
6. Kvantizace: kolik bitů na vzorek
Vzorkováním se diskrétní stal čas. Hodnoty jsou ale pořád reálná čísla s nekonečně mnoha desetinnými místy. Druhý krok převodu je zaokrouhlit je.
Definice — kvantizace a odstup signálu od šumu
Nechť b ≥ 1 je počet bitů a hodnoty signálu leží v rozsahu [−1, 1]. Nechť q0 < q1 < … < q2b−1 jsou povolené úrovně (konkrétní volba v další definici). Kvantizace s b bity je zobrazení
Qb : [−1, 1] → {q0, …, q2b−1}, x ↦ ta úroveň qi, pro kterou je |qi − x| nejmenší.
Kvantizační šum (chyba) vzorku x je e = Qb(x) − x. Pro signál se vzorky x[n] je výkon signálu Ps průměr čtverců x[n]2 a výkon šumu Pš průměr čtverců chyb. Odstup signálu od šumu je
SNR = 10 log10 Ps/Pš dB
(decibel viz další definice). Pro sinusovku přes celý rozsah vychází SNR ≈ 6,02 · b + 1,76 dB (odvození níže): každý bit navíc přidá asi 6 dB.
Je to jako měřit pravítkem s dílky: hodnota mezi dílky se zaokrouhlí. Se třemi bity jsou dílky jen osm a zvuk je zrnitý. Šestnáct bitů (CD) znamená 65 536 dílků. Decibely jsou logaritmická míra: 6 dB je dvojnásobek amplitudy, takže každý bit zmenší šum na polovinu.
Definice — kvantizační krok a decibel
Nechť b ≥ 1. Rozsah [−1, 1] rozdělíme na 2b stejných intervalů o šířce kvantizačního kroku
Δ = 2/2b.
Pro vzorek x ∈ [−1, 1] je číslo jeho intervalu (kód)
i = min(⌊x + 1/Δ⌋, 2b − 1) ∈ {0, 1, …, 2b − 1}
(minimum ošetří jen krajní bod x = 1) a kvantovaná hodnota je střed tohoto intervalu, q = −1 + (i + ½) Δ. Úrovně jsou tedy středy intervalů a pro každé x ∈ [−1, 1] platí |q − x| ≤ Δ/2.
Nechť P1, P2 > 0 jsou výkony (průměry čtverců). Jejich poměr v decibelech je
10 log10 P1/P2 dB.
Výkon roste se čtvercem amplitudy, takže dvojnásobná amplituda je 10 log10 4 = 20 log10 2 ≈ 6,02 dB.
b = 3: Δ = 2/8 = 0,25; vzorek x = 0,3: i = ⌊1,3/0,25⌋ = ⌊5,2⌋ = 5
q = −1 + 5,5 · 0,25 = 0,375, chyba 0,375 − 0,3 = 0,075 (nejvýš může být 0,125)
Odkud se vezme vzorec 6,02 · b + 1,76? Je to podíl výkonu sinusovky a výkonu kvantizačního šumu v decibelech:
SNR = 10 log10 A2/2/Δ2/12 = 6,02 · b + 1,76 dB
- A2/2
- výkon signálu: průměr čtverce sinusovky. Pro sinusovku přes celý rozsah je A = 1 a výkon 1/2
- Δ2/12
- výkon kvantizačního šumu (v obrázku červená chyba). Když chyba „náhodně“ vyplňuje interval od −Δ/2 do Δ/2 rovnoměrně, je průměr jejího čtverce 1/Δ ∫−Δ/2Δ/2 e2 de = Δ2/12. Tenhle předpoklad u tří bitů platí jen zhruba
- 10 log10
- převod poměru výkonů na decibely; logaritmus udělá z násobení sčítání, takže každý bit přičte stejný kus
- 6,02 · b
- Δ = 2/2b, takže šum je úměrný 1/4b a 10 log10 4b = b · 6,02. Každý bit navíc rozpůlí krok a šum klesne na čtvrtinu výkonu
- 1,76
- to, co zbude, když se dosadí A = 1 a Δ = 2/2b: 1/2/1/3 · 4b = 1,5 · 4b a 10 log10 1,5 ≈ 1,76. V čísle 1,5 = 1/2 · 3 je 1/2 výkon sinusovky a 3 pochází ze šumu: rozsah 2 dělený na kroky dá 22/12 = 1/3. Signál jiného tvaru (třeba obdélníkový s výkonem 1) by měl jinou konstantu
| Bitů na vzorek | úrovní | SNR změřené | SNR podle 6,02 b + 1,76 |
|---|---|---|---|
| 3 | 8 | 19,1 dB | 19,8 dB |
| 8 | 256 | 49,7 dB | 49,9 dB |
| 16 | 65 536 | 98,1 dB | 98,1 dB |
U tří bitů se změřené číslo od vzorce trochu liší, protože vzorec předpokládá, že chyba je rovnoměrně rozložený šum, a při osmi úrovních je chyba ještě viditelně „schodovitá“. Od osmi bitů výš vzorec sedí. Vzorkování a kvantizace dohromady určují datový tok: CD má 44 100 vzorků × 16 bitů × 2 kanály = 1 411 200 bitů za sekundu, klasický telefon 8 000 × 8 = 64 000 bitů za sekundu.
7. Signály v umělé inteligenci
- Řeč. Model pro rozpoznávání řeči dostane zvuk jako 16 000 čísel za sekundu. Většinou je ale nejdřív převede na spektrogram — o tom díl Zvuk a řeč.
- Obraz. Fotka je dvourozměrný vzorkovaný signál: pixel je vzorek jasu. Aliasing tu vzniká taky — moaré na fotce košile s jemným proužkem.
- Senzory. Akcelerometr v hodinkách, které poznají běh od chůze, vzorkuje typicky desítkykrát za sekundu; frekvence se volí podle toho, jak rychlé pohyby chceme zachytit.
- Zmenšování. Když se obrázek pro neuronovou síť zmenší vynecháním pixelů, je to převzorkování — a bez rozmazání předem vznikne aliasing. Proto se před zmenšením obraz filtruje, stejně jako zvuk před vzorkováním.
8. Shrnutí
- Signál je funkce času; vzorkování z něj bere hodnoty v pravidelných okamžicích n/fs.
- Frekvence nad fs/2 se převléknou za nižší (aliasing): 9 Hz při 10 Hz vypadá jako 1 Hz, 7 Hz při 12 Hz jako 5 Hz.
- Když je fs víc než dvojnásobek nejvyšší frekvence, dá se signál ze vzorků zrekonstruovat přesně: chyba 0,0007 při 20 Hz, 0,50 při 12 Hz.
- Před vzorkováním se vysoké frekvence odfiltrují; CD vzorkuje 44,1 kHz, protože slyšíme do 20 kHz.
- Kvantizace zaokrouhlí hodnoty; každý bit přidá asi 6 dB odstupu od šumu (16 bitů: 98,1 dB).
Chcete si to osahat? Nechte AI agenta vygenerovat zvukový soubor s tónem 15 kHz vzorkovaný frekvencí 44,1 kHz a pak stejný tón vzorkovaný 22,05 kHz — a poslechněte si, jaký tón uslyšíte místo něj.
Máte na to jiný názor? Napište na support@coden-app.com.