Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Matematika mi nikdy nešla tak se ptám, jak opravit vzorec.
Původní vzorec na převod z dB na lineární hodnotu mi byl dán:
1/exp(log10 * (dB/20))
Podle toho jsem sestrojil algoritmus (funkční):
dB := -24;
linearLevel := 1/exp( 2.30258509299 * (abs(dB)/20) ) ; // kde linearLevel je např. double = 0,12589254118
respektive s převodem na hodnotu vzorku je to:
linearLevel := Round( 1/exp( 2.30258509299 * (abs(dB)/20) ) *32767); // kde linearLevel je integer 2067
A tady je zakopaný pes:
A nyní se snažím o převod zpět - prý 20*log10(lv) ale to mi nevychází:
db := exp( 20*2.30258509299*(linearLevel) ); // vrací +INF (???)
db := round( exp( 20*2.30258509299*(linearLevel / 32767) ) );
// 18 dB
Poradí někdo?
Offline
ln10 je to samé jako Log10?
Offline
Karmanova cesta napsal(a):
Matematika mi nikdy nešla tak se ptám, jak opravit vzorec.
Původní vzorec na převod z dB na lineární hodnotu mi byl dán:
1/exp(log10 * (dB/20))
Moc mi to nedává smysl, převod mezi číslem a jeho vyjádřením v decibelech je prostě:
Co je na tom k nepochopení?
1 = 0dB
10 = 20 dB
100 = 40 dB
1000 = 60 dB
0.1 = -20 dB
0.01 = -40 dB
0.001= -60 dB
atd...
Ta dvacítka je tam jen na efekt, klidně bychom to mohli dělat i bez ní (označím to třeba jako bel, tedy jen B)
Pak by to bylo
1 = 0 B
10 = 1 B
100 = 2 B
1000 = 3 B
0.1 = -1 B
0.01 = -2 B
0.001= -3 B
Offline
Dík, mám to vyřešené.
Offline
Stránky: 1