Parametrický equalizér v Cčku

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
ghost07
Příspěvky: 47
Registrován: 19 úno 2020, 01:00

Parametrický equalizér v Cčku

#1 Příspěvek od ghost07 »

Zdravím, neporadí někdo jak vytvořit filtr v C, který je vlastně jako equalizér na mixážním pultu? Nebo navést co bych si k tomu měl nastudovat?
Zatím vím, že na to budu potřebovat asi IIR nebo FIR filtr. Na wikipedii je sice popis co to je, ale netuším jak to iplementovat do Cčka. Mají se spočítat nějaké koeficienty impulzní odezvy a těmi se pak budou postupně násobit nově příchozí vzorky? Nebo tam budou složitější matematické operace (pro každý vzorek), takže by to mikroprocesor s rychlostí 160 MHz nestíhal pro zvuk se vzorkováním 48 kHz počítat v reálném čase? - A tím pádem to nemusím dál řešit? :D

Uživatelský avatar
bdn
Příspěvky: 436
Registrován: 16 led 2020, 01:00

#2 Příspěvek od bdn »

Asi bys ses měl více rozepsat o finální aplikaci, kde to bude sloužit a proč děláš, to co děláš. Jestli jde o diplomku nebo to má nějak v reálu sloužit...

Uživatelský avatar
HF_Tech
Příspěvky: 331
Registrován: 25 dub 2022, 02:00

#3 Příspěvek od HF_Tech »

Implementace FIR nebo IIR filtru je o násobení a sčítání vzorků. Máš buffer ve kterém jednotlivé vzorky násobíš koefecienty a pak je sečteš a pustíš do výstupu. V každém taktu posuneš vzorky o jedno místo a nejstarší zahodíš.
FIR má výhodu, že je jednodušší na výpočet koeficientů a není citlivý na zaokrouhlovací chyby. Nevýhodu má, že pokud má trochu lépe filtrovat, tak z principu funkce vzniká velké zpoždění mezi vstupem a výstupem.
Pro představu nejjednodušší příklad FIR filtru je klouzavý nebo vážený průměr - koeficienty jsou vlastně jednotlivé váhy.
IIR filtr má zpoždění podstatně menší, ale je kritický na výpočet koeficientů a zaokrouhlovací chyby. Vtip je jenom v tom jak se přičítají vzorky - je tam něco jako zpětná vazba. Může se tedy rozkmitat.
Vlastní výpočet je o tom vzít vzorkovací frekvenci, navrhnou parametry filtrace a hodit to do matlabu. Vlastní přepsání do C při pochopení principu výpočtu už je to úplně nejmenší.

Uživatelský avatar
ghost07
Příspěvky: 47
Registrován: 19 úno 2020, 01:00

#4 Příspěvek od ghost07 »

bdn
Chtěl bych si udělat malý digitální mixáček. Pro začátek klidně jeden vstup a aplikovat na něj základní funkce mixu - předzesílení (to by se asi řešilo pomocí PGA v A/D převodníku), parametrický EQ a výstupní hlasitost.

HF_Tech
Díky za shrnutí jak to přibližně funguje. Takže IIR vypadá že je cesta :D
Akorát bych potřeboval, aby to umělo spočítat koeficienty samo, když zadám frekvenci, zesílení/zeslabení a Q. Řád filtru (počet koeficientů) asi bude záležet na tom Q, že?
A pokud není k dispozici Matlab, tak se ty koeficienty dají získat z inverzní FFT?

Uživatelský avatar
eleferner
Příspěvky: 422
Registrován: 04 čer 2016, 02:00
Bydliště: Brno

#5 Příspěvek od eleferner »

Zacal bych zde:

https://www.un4seen.com/forum/?topic=1004.0

Pokud bys chtel neco jednodussiho, tak tady je implementace tzv. peaking filtru, ktere se k tomu typicky pouzivaji:

https://github.com/dimtass/DSP-Cpp-filters

Z popisu vsak soudim, ze nejdou preladovat za behu.

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#6 Příspěvek od Atlan »

A ma to zmysel robit na beznom uP ked koli tomu sa vyrabaju DSP aby to stihali prepocitavat? S ESAI zbernicou.

Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“