Stránka 1 z 1

Parametrický equalizér v Cčku

Napsal: 02 pro 2022, 19:14
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

Napsal: 02 pro 2022, 21:49
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...

Napsal: 03 pro 2022, 08:26
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ší.

Napsal: 06 pro 2022, 19:05
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?

Napsal: 06 pro 2022, 19:41
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.

Napsal: 06 pro 2022, 21:21
od Atlan
A ma to zmysel robit na beznom uP ked koli tomu sa vyrabaju DSP aby to stihali prepocitavat? S ESAI zbernicou.