Sigma-Delta a PWM
|
Moderní jednočipy někdy obsahují DA převodník, ale v některých situacích potřebujeme výstup analogového signálu a tento převodník chybí. Nabízí se použít časovač a generovat jím signál s pulsně šířkovou modulací (PWM) a ten pak analově filtrovat dolní propustí. Jenže pro rozumnou frekvenci buzení časovače a rovněž rozumnou maximální frekvenci výstupního signálu bývá rozlišení PWM poměrně malé - např. 256 kroků, tedy 8 bitů. To vadí především tam, kde je potřeba udržovat na výstupu přesné a stabilní napětí.
Můžeme to zkusit vylepšit. Půjčíme si na to techniku Sigma-Delta převodníku. Spíš než dlouhý popis je lépe se podívat na tento kousek kódu:
Jednoduchý prográmek je napsán v Qt.
I z tohoto obrázku je vidět, že odstup signál/šum je na nízkých frekvencích opravdu o dost nižší. Pokud si chcete pohrát, verze pro WebAssembly je zde.
Pozn.:
Rozlišení PWM je volitelné, vzorkovací frekvence PWM 65.536 kHz. Není to moc realistické, pokud uvážíme, že s touto frekvencí se opakuje výpočet hodnoty, ale lze použít třeba DMA a vzorky předpočítat do bufferu a lze změnit parametry tak, aby to vyhovovalo pro dané použití. Graf časového průběhu lze zvětšit a pak je vidět dithering použité metody. Je dobré si uvědomit, že metoda potlačuje především nízké frekvence, vyšší naopak zdůrazňuje, takže je pak nutné to někde dolní propustí uříznout. To je u obyčejné PWM ovšem potřeba také. Ale lze lépe zvolit kompromis mezi rozlišením a dynamikou, je to vidět především na frekvencích o hodně menších než vzorkovací frekvence. Tady je právě jádro použitelnosti metody. Systémy s poměrně malou dynamikou, ale vysokým rozlišením, kde bude použita dolní propust na relativně nízké frekvenci. Nicméně bylo to vyzkoušeno i pro audio aplikaci, kde je šum při rozlišení PWM 256 kroků docela slyšitelný, tato metoda jej umí dost účinně potlačit. Nakonec Sigma-Delta modulace se dost používá právě zde.
Zdrojáky pro Qt5 jsou zde.