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