(upravil dihalt 14. 4. 2017 23:58)

Téma: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

Poprvé, asi v roce 2005, jsem si všiml, že moje oblíbená skupina Roxette hraje z digitální konzervy poněkud divně, nemastně, neslaně, vlastně se to nedalo vůbec poslouchat. Má sluchová paměť mi neustále říkala jak ta originální kazeta ve walkmanu zněla skvěle. Dalších 10 let jsem se nechal obluzovat stejným zvukovým marasmem v PC při hraní her, poslouchání muziky. Nebyl žádný způsob jak to zlepšit. Lepší repráky nepomohly, jen tu tragédii prohloubily. Někdy v roce 2010 jsem si pohrával s nastavením zvukového mixéru, konkrétně s nastavením výstupní vzorkovací frekvence. Vzpomínám si, že 44100Hz znělo skvěle, ale poněkud hrubě, 48000Hz a 96000Hz bylo jemnější, ale nebylo to to pravé vořechové a lezlo mi to dokonce na nervy. Pak v roce 2014 začal výzkum, s jehož výsledky se s vámi chci podělit. Začal jsem jako každý, s nějakými běžně dostupnými prostředky, které se později projevily jako nedostatečné. Každý kdo zvládá linux si bude moci vyzkoušet co to dělá. Nebudu zde popisovat dojmy, zkušenost je to nepřenositelná. Ale můžu jen říci že Roxette se mi vrátili v té nejčistší možné formě.

Pro majitele 192000Hz zvukovek: https://pastebin.com/dcZxsDnY
Pro majitele 96000Hz zvukovek: https://pastebin.com/BCG5yqKP
Pro majitele MP3 přehrávačů a zvukovek co neumí 44100Hz: https://pastebin.com/fBQaLGBy

Vše je to citlivě odladěné a vše další už záleží na přehrávači samotném, tedy jak moc bude do hotového díla zasahovat, čím méně tím lépe. Prostě puresound.
Principielně jde o přesný oversampling, interpolaci, vyhlazení. Cílem je zabránění aliasingu a posunu Fourierových obrazů vůči sobě. Každý skript má trochu odlišné nastavení pro svůj cílový rastr. Pro ladění bylo použito bílého šumu a sweep, posouzeno na různých nahrávkách v lo-res 44100Hz. Podmínkou je že lo-res zdroj nebyl nějakým amatérem poškozen třeba resamplem nebo pitchem, pak to bude přesně ono. A nedivte se že to trvá dlouho, jedním z důvodů proč dnes digitál hraje tak jak hraje je cenově nedostupné dostatečně rychlé řešení posunu Fourierových obrazů. Tato ukázka by měla pomoci nakopnout vývoj přehrávačů, dnes už by neměl být problém sestavit oversamplovací DSP chip s takovouto přesností výpočtu za minimální energetické náročnosti.

(upravil DJ_Rix 15. 4. 2017 8:35)

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

Můžu se zeptat, neuraz se, ale děláš si z nás zde blázny ? uui V čem těch 20 řádků "kódu" funguje lépe než vlastní zapnutí resampleru (třeba tebou použitého SOX) přímo v přehrávači ?

(upravil dihalt 15. 4. 2017 12:20)

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

Nezkresluje. Mohu se pokusit o přesnější vysvětlení, ale ani to nebude uspokojující.

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

Ja by som to skúsil ale používam windows a foobar, vlastne aj sox, ale neviem čo s tým kodom, kam ho dať.

(upravil DJ_Rix 16. 4. 2017 12:41)

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

Těch 18 řádků neudělá nic jiného než že řekne externímu resampleru jak má přepočítat přisunutá data. Pojem "nezkresluje" je dost obecný. Ocenil bych popis funkce, ale pokud to není cílem nic se neděje.

(upravil dihalt 16. 4. 2017 13:26)

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

Celý kód je smyčka která najde a zpracuje všechny soubory v aktivní složce. Kód se uloží se do souboru "audiofill", funkce v kódu se pak načte do paměti pomocí "source audiofill". V linuxovém bash nebo zsh stačí uvnitř složky se soubory spustit funkci aflac jako běžný příkaz bez argumentů. A počkat až to bude, teprve pak hotové rastry přehrávat.

Externí/interní resampler sám o sobě funguje skvěle(poslouchatelně) pokud s ním resampluji celočíselně dělitelné samplerates, např. 44100 na 88200 nebo 48000 na 96000. Jiná situace nastává u velmi častého resamplu ze 44100 na 48000(96000,192000) kdy se chyba dělitelnosti pojevuje jako posun Fourierových obrazů známý také jako aliasing. Ostrouhat vysokofrekvenční aliasy dolní propustí je velmi nedomyšlený nápad, aliasing zanechává posunuté i středy a basy kde nelze nic ořezávat. Tento laboratorní pokus v pár řádcích kódu demonstruje ideální oversampling a ještě k tomu je možné si vyzkoušet jak pouhá změna hlasitosti (vol) jemně ovlivní výsledné zabarvení a dojem. Cílem je aby to v rastru 96000/24 hrálo se stejným zabarvením jako originální rastr 44100. Je to pokus o vyladění, trochu jako u piána nebo varhan. V podobě v jaké to nyní prezentuji je to zdařilý pokus který není úplně pro každého, tak jako já si nedokážu zbastlit DPS zesilovače.

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

dihalt napsal:

Jiná situace nastává u velmi častého resamplu ze 44100 na 48000(96000,192000) kdy se chyba dělitelnosti pojevuje jako posun Fourierových obrazů známý také jako aliasing

Takhle snad ale nikdo žádný resampler nepoužívá, aby upsamploval na frekvenci která není celočíselným násobkem yikes

(upravil dihalt 17. 4. 2017 12:02)

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

Napsal jsem to snad špatně? Počítejme 48000/44100 nebo 96000/44100 pak 96000/48000. Resampler je jediným možným řešením jak softwarově smíchat dvě samplerates aby mohly hrát simultáně. V četných případech se ze 44100 na 48000 resampluje i přesto že právě žádný jiný 48000 zdroj nehraje, někdy dokonce proto, že výrobce zvukovky vůbec 44100 neimplementoval. Pochopitelně že nikdo nepoužívá resampler tak jak ukazuji v příkladech, ty hlavně mají ukázat jak to jde udělat dobře a vyhnout se nesmyslům které se tradičně nabalují kvalitu digitálních zdrojů zvuku.
Mnoho zvukovek dnes již neumí přehrát CD tak jak je, puresound, dochází k resamplingu někde uvnitř anebo někde na cestě do zvukovky. Resamplingu rychlému a s pochybnou kvalitou výpočtu. Je to tak rozšířené že už jsou i rádobyaudiofilové hluší a dokonce i slepí k takovýmu nápadu. Snad také a né jen proto se konzumentská obec rozděluje na různé tábory kde každý tvrdí něco jiného. Zahlédnout ten střípek pravdy, proč tomu tak je, není jednoduché. To možná vědí jen tvůrci a plánovači norem pro digitální zvuk a jeho zpracování. Od studia k serveru je vše dobré, od serveru do resampleru ještě taky, až za resamplerem je to celé nějak zkomolené, zase podle standardu a takřka nenápadně.

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

dihalt, možno by bolo lepšie na miesto týchto pokusov si kúpiť poriadny DAC. Ja pri prepínaní vzorkovacej frekvencie v SOX nepočujem vôbec nič, tak isto pri zmene hlasitosti. Na čom to vlastne testuješ?

(upravil dihalt 17. 4. 2017 11:58)

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

Dost možná by pořádný DAC zahladil stopy po zkreslení, někdo jde cestou peněz a já jdu cestou poznání. Mám jen notebooka s X-Fi Express Card z druhý ruky, sama o sobě hraje férově a umí i základní kmitočet 44100, oproti integrované Intelácké nádherně cinká a basuje, a to umí basovat taky tak ošklivě jako ostatní pokud právě zkreslují, zřejmě lepší analogová část DAC. Takže hezký to je a se zvukovkou co by uměla tikat na 192kHz by to bylo ještě hezčí. Z kapsy do sluchátek mi hraje superlevný mp3 přehrávač (tiká na 48000 pouze). Věž taky umí CD a mp3 i s celým tím nonpure balastem, autorádio taktéž (tikají na 48000 pouze). Ve všem co mám k dispozici jsem to vyzkoušel jak normálně (běžný konzument) tak i různé konverze včetně té skriptované. Odhalil již popsané vady nekvalitního převodu a vytvořil metodu jak z levnýho přehrávače udělat no... téměř hifi... jen tím že mu podstrčím takový rastr aby ho přehrál bez dalšího převádění. Na pořádný DAC se podívám až nějaký někde někdo bude mít, jsem na něj velmi zvědav.

(upravil dihalt 20. 4. 2017 20:46)

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

Zkrátka a dobře - jedná se jen o další resampling, a pokud by nezněl nějak odlišně od ostatních včetně jednoduchého sox's rate, neměl bych takovou touhu se s tím kdekoliv podělit. Je to výsledek třech let ladění a spontánního ABX, a to jsem pěknej lempl co udělal spoustu chyb v domění že už je to právě ono.
...
Smím se domnívat že ta krabička dělá něco podobného tomu skriptíku? http://www.correct.cz/arp_staticka_a.html Podle popisu processingu jistě nikoliv, ale podle těch superlativ a ujištění mám dojem že ano. "Budete mít dojem, že jste si právě vyčistili uši. Budete si myslet, že zvuk slyšíte z audioaparatury vyšší třídy."

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

dihalt: nechcem kritizovat ale zkusil si asio_proxy vo foobar ktory je zadara? ten ti resampluje vse z 44.1khz a na az po DSD512
SOX je ako resampler pouzitelny len na down konverziu inak je k nicomu
ked uz si sa 3 roky trapil tak mam jednu otazocku, dival si sa ako bude ten zvuk po resampleru vypadat v spektralnej analyze? mozno by ta to prekvapilo wink

na uplnom konci si staci polozit jednoduchu otazku, neoplati sa mi investovat do nejakeho cinkesho DACu z ebay za 65USD ktory prechcije vsetky bezne dostupne zvukovky vcetne essence STX II a netrapit sa so softom ktory stejnak zazraky neurobi?
vyzkusal som vsetky bezne dostupne sw resamplery vcetne hw (AK4137) na vsemoznom zeleze a zazraky sa nedeju, pokial hra nieco spatne v nativnom rozliseni nieje to preto ze mas spatny sw ale preto ze je to bud spatne nahrane (uz pri masteringu) alebo to hraje na spatnom HW...
resampler spatnu nahravku alebo hw nespasi, to uz je lepsie pouzit EQ/DSP

neviem ake zkreslenie a zahlazovanie stop popisujes ale dnes bezne dostupne DACy vcetne toho cinskeho zvladaju THD pod 0.001% takze tu problem asi nebude a nemusis zato obetovat ledvinu, zbytok viz vyssie wink
vsetko to samozrejme stale zostava v teoretickej rovine kedze nepozname kvalitu zbytku retazca

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

dihalt, tá vecička "correct" je analogová. Asi to tam má len nejaky operák so špecifickým zvukom ktorého zvuk autor považoval za vylepšujúci big_smile Ja som si tie nahrávky stiahol, asi pred rokom, vtipné je že tie "vylepšené" som hodnotil vždy ako horšie. V každom poriadnom HiFi budú dalšie analogové obvody v ceste signálu len na škodu.

(upravil dihalt 21. 4. 2017 16:58)

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

mechanik: Poslechl jsem si soubory uvedené ve stránce a to jsou pouze 44100, rozdíl bych přirovnal ke Crystalizer u X-Fi, tedy něco zcela odlišného od té věcičky co používám. Celkem vzato Correct byla jen odbočka pro zajímavost, do jakých slepých uliček vede chyba mezi dvěma světy (44100 a 48000). Analogově-elektronické části řetězce, až za DACem, jsou v dnešní době dotažené vcelku dobře a pochybuji že způsobují jakékoliv fázové zkreslení, možná jiné typy zkreslení ano...

Kuky: zkusil jsem ASIO u kamaráda co má widle, vyzkoušené po převodu i bez převodu, hrálo to stejně jako u přímého přístup v alsa, tedy bez jakéhokoliv dalšího zpracování na softwarové úrovni. Sox se pro mě stal užitečným až ve chvíli kdy jsem zřetězil upsample a downsample podle jednoduchého matematického receptu - nejmenší společný násobek NSN, anglicky LCM. K mému překvapení widlácká verze soxu měla efekt rate omezený na 384khz a tudíž mi znemožnila NSN použít. U novější verze zřetězení již rate nepoužívám, nahradila ho sekvence upsample sinc  a vol, tuto ve widlích vyzkoušenou nemám, ani se k tomu nechystám. Investovat budu až bude co, do té doby investuji jen čas a píli na vylepšení toho co již mám. Zjištění že trh je plný 44100 obsahu, že výrobci omezují DAC na 48000 a násobky, že tím nutí k resamplu nejrozšířenějšího rozlišení, fázové zkreslení sw/hw se kteými jsem se doposud setkal, mě donutilo k tomu co zde předvádím. Skript mi ukázal, že to co se mnozí snaží vyekvalizovat mě se daří resamplovat, poslouchám zásadně bez ekvalizéru. Spektrální analýza mi vždy spolehlivě odhalila velkou část toho co to dělá, zbytek musely přetrpět uši než jsem si všiml že je něco v nepořádku a hledat nápravu.
Fázové zkreslení, nebo jak to co nejlépe nazvat, je tvrdým výpočetním oříškem, nikoliv elektronickým. Při něm je drobně a staticky posunována fáze (poměr délky impuslu a jeho intenzity vůči sousedním impulsům), tímto skriptem se snažím o co nejlepší přizpůsobení PCM ještě než je předáno DACu, ten pak skutečně manifestuje délku-intenzitu impulsu jako signál, porovnával jsem se všemi možnými metodami resamplingu, všechny trpěly nějakou formou fázového posouvání. Faktem je, že DSD se svojí 1-bit delta-sigma dělá něco velmi podobného, moduluje a interpoluje do velmi vysoké samplerate, a proto nezní zkresleně ve fázi, foobar zatím pro linux není, DSD vidím jako dobrou alternativu s tím že prioritní je integer dělitelnost. Dřív jsem si myslel že to je THD, vlastně je, ale co jsem se dočetl THD se týká elektroniky až za DACem? Ve chvíli troufalosti jsem si řekl že by se to mohlo nazvat DTHD. Trochu to připomíná i jitter, kdy hodiny vysílače a přijímače nejsou přesně synchronní. Uvedené skripty jsou tedy asynchronním převodníkem s NSN a nulovým fázovým zkreslením, takovým lepším offline resamplerem, zároveň je to i syntéza - na aproximované megahertzové křivce jsou nové vzorky které přesně pasují do cílového rastru, sin interpolovaná xMHz křivka je beze zbytku dělitelná jak  zdrojem tak i cílem. Patnáctileté trápení skončilo třemi roky výzkumu, stálo za to a svým způsobem mě i osvítilo, stejně tak i audacity, sox, 432hz, ffmpeg, linux, bash, spek, základka, wiki, holka, Technics a další.

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

nebyly by na ukázku nějaký soubory 44.1kHz a resample na 48kHz (96kHz)? nějak si s tím nevím rady, jako začínající uživatel linuxu potřebuju nějakej podrobnější návod.
P.S. vydržím i roxette...

(upravil danhard 22. 4. 2017 10:39)

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

Čím se liší, když udělám postupně 2x upsample 2, nebo 1x upsample 4 ?
Jakou to má impulzní odezvu ?
http://sox.sourceforge.net/rate-44k1-96k.png
http://src.infinitewave.ca/

(upravil dihalt 22. 4. 2017 14:23)

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

Takže linux už máme nainstalovaný. Naistalujeme svým oblíbeným balíčkovacím manažerem balíky ffmpeg a sox. Na disku máme libovolné audioformáty ve 44100, jiná rozlišení udělají jiné výsledky. Terminál je kamarád linuxáka, mocný a nepostradatelný.
V domovském adresáři budeme mít uložený skript:

nano ~/audiofill

Funkci z pastebin stačí copy-pastnout. Ctrl+X ukončí editor nano s otázkou k uložení - tedy ano/y.

source ~/audiofill

Toto načte funkce ve skriptu do paměti, nyní je možné spouštět funkci jako příkaz terminálu.

echo "source ~/audiofill" >> ~/.bashrc

Načtení proběhne automaticky při každém nově spuštěném terminálu s bash (u zsh zase ~/.zshrc). Při každé další změně souboru audiofill je zapotřebí jej znova sourcnout.

cd ~/Music/hudba_z_CD_etc
aflac

Během procesu se objeví výpis, schválně jsem ve skriptu nastavil podrobnější informace pomocí přepínačů -V3 -S

Input #0, flac, from '21 years of goa trance 12.flac':
  Metadata:
    TCO             : 0
    TCD             : 79091535601
  Duration: 02:11:49.15, start: 0.000000, bitrate: 1033 kb/s
    Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
sox:      SoX v14.4.2

Input File     : '-' (sox)
Channels       : 2
Sample Rate    : 44100
Precision      : 32-bit
Sample Encoding: 32-bit Signed Integer PCM
Endian Type    : little
Reverse Nibbles: no
Reverse Bits   : no


Output File    : 'hqwv/21 years of goa trance 12.wav'
Channels       : 2
Sample Rate    : 96000
Precision      : 32-bit
Sample Encoding: 32-bit Signed Integer PCM
Endian Type    : little
Reverse Nibbles: no
Reverse Bits   : no
Comment        : 'Processed by SoX'

sox INFO sinc: num taps = 846 (from 846)
sox INFO sinc: num taps = 318 (from 318)
sox INFO sinc: num taps = 323 (from 323)
sox INFO sinc: num taps = 323 (from 323)
sox INFO sinc: num taps = 323 (from 323)
sox INFO sinc: num taps = 323 (from 323)
sox INFO sinc: num taps = 323 (from 323)
sox INFO sox: effects chain: input        44100Hz  2 channels
sox INFO sox: effects chain: upsample    220500Hz  2 channels
sox INFO sox: effects chain: sinc        220500Hz  2 channels
sox INFO sox: effects chain: vol         220500Hz  2 channels
sox INFO sox: effects chain: upsample    441000Hz  2 channels
sox INFO sox: effects chain: sinc        441000Hz  2 channels
sox INFO sox: effects chain: vol         441000Hz  2 channels
sox INFO sox: effects chain: upsample    882000Hz  2 channels
sox INFO sox: effects chain: sinc        882000Hz  2 channels
sox INFO sox: effects chain: vol         882000Hz  2 channels
sox INFO sox: effects chain: upsample   1.764e+06Hz  2 channels
sox INFO sox: effects chain: sinc       1.764e+06Hz  2 channels
sox INFO sox: effects chain: vol        1.764e+06Hz  2 channels
sox INFO sox: effects chain: upsample   3.528e+06Hz  2 channels
sox INFO sox: effects chain: sinc       3.528e+06Hz  2 channels
sox INFO sox: effects chain: vol        3.528e+06Hz  2 channels
sox INFO sox: effects chain: upsample   7.056e+06Hz  2 channels
sox INFO sox: effects chain: sinc       7.056e+06Hz  2 channels
sox INFO sox: effects chain: vol        7.056e+06Hz  2 channels
sox INFO sox: effects chain: upsample   1.4112e+07Hz  2 channels
sox INFO sox: effects chain: sinc       1.4112e+07Hz  2 channels
sox INFO sox: effects chain: vol        1.4112e+07Hz  2 channels
sox INFO sox: effects chain: downsample   96000Hz  2 channels
sox INFO sox: effects chain: stats        96000Hz  2 channels
sox INFO sox: effects chain: output       96000Hz  2 channels
In:0.00% 00:52:14.23 [00:00:00.00] Out:301M  [ =====|====- ] Hd:2.7 Clip:0

Výsledky přehrávejte v něčem co spolehlivě iniciuje zvukovku do požadovaného režimu rozlišení, samozřejmě lze je přehrát i ve windozech. V linuxu může být pulseuadio tak trochu na překážku stejně jako ve windos WASAPI pokud právě blokují zařízení třeba na 44100 nebo povětšinou na 48000, prostě vše se musí umlčet a posílat přehrávačem data do například hw:0 (alsa) nebo ve woknech mít nastaveno ve vlastnostech přehrávání "24bit, 96000Hz Studiová kvalita". Další zpracování hotového díla, například v mixxx a jiných přináší nanejvýš zajímavé zážitky smile pak už to zase není pure smile

(upravil dihalt 22. 4. 2017 16:44)

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

danhard napsal:

Čím se liší, když udělám postupně 2x upsample 2, nebo 1x upsample 4 ?
Jakou to má impulzní odezvu ?
http://sox.sourceforge.net/rate-44k1-96k.png
http://src.infinitewave.ca/

Díky zajímavý obrázek, s rate jsem si dosti vyhrál. Existují však věci které lze slyšet, ale nelze je takto zobrazit. Ten rozklad jsem udělal proto aby každý nejmenší možný krok byl spočítán v co nejjemnější bitové hloubce 32bit, lze postřehnout rozdíly pokud to spočítám jedním šmahem 8x,16x apodobně. Cílem všech upsamplů je dosáhnout tak vysoké hustoty vzorků aby bylo možné jediným downsamplem vybrat přesně každý 147mý vzorek, dělitelnost musí být z obou stran bezezbytku, bez této zásady vznikají právě taková zkreslení ve fázi. Analogicky ke magnetofonové pásce, nejprve vytvořím co nejdokonalejší analogovou podobu, zde oscilace sinc algoritmu, a tuto pak znova nasampluji, díky přesnému propočtu budou mít impulsy v novém rozlišení vždy tu správnou energii, sinus obálku přesně sedící jak na originál tak i na výsledek. Zcela odlišné intenzity impulsů originálu i cíle v čase by mohly na první pohled zmást, dohromady však dají zase tu správnou vlnu a DAC to pak rozkmitá velmi přirozeně. Podobně i CML - centrální mozek lidstva taky potřeboval klíneček ,tak digitál potřebuje most mezi rozlišeními.

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

Nechceš si ten tvůj zázračný vynález nechat patentovat?

(upravil danhard 22. 4. 2017 16:40)

Re: Softwarové laboratorní DSP pro rekonstrukci PCM signálu

Ježiši to jsou pindy, je jasný, že to potřebuješ dostat do poměru 160 / 147, ale proč to upsampluješ 2x, když první krok upsample jsi zvolil 5x ?