miks 32-bit floating-point

Wszelkie inne pytania związane z tematyką poruszaną w naszym magazynie
Awatar użytkownika
astro
Posty:166
Rejestracja:piątek 09 sie 2002, 00:00
miks 32-bit floating-point

Post autor: astro » poniedziałek 28 sty 2013, 18:25

Spotkałem się ostatnio z dyskusją na temat miksowania w DAW w 32-bitowym trybie zmiennoprzecinkowym. Jeden z rozmówców stwierdził, że zakres dynamiki przy takim zapisie to ok 1000dB i że dzięki korzystaniu z takiego trybu nie musi już ściszać tłumików na poszczególnych kanałach by nie przesterować sumy (tak jak to robił przy 24-bitowych sesjach), bo zapas dynamiki na to pozwala. Marny ze mnie informatyk, mogę się więc mylić, ale coś mi tu nie gra.


Żeby osoby niewtajemniczone mogły śledzić dalszą dyskusję wyjaśnię, że znormalizowany zapis 32-bitowych licz zmiennoprzecinkowych wygląda następująco:


Z * M * 2^B gdzie:


Z – to znak (-1 lub 1) zapisany na jednym bicie,


M – to mantysa – liczba z przedziału [1,2) zapisana na 23 bitach (mantysę oblicza się następująco: 1+ m/2^23 – gdzie m to liczba od 0 do 8388607),


B – wykładnik zapisany na 8 bitach (-127 do 128).


Taka konstrukcja liczb zmiennoprzecinkowych powoduje, że duże liczy dzielimy na przedziały (mantysa). Każdy następny przedział na prawo od 2 jest dwa razy szerszy ([2,4), [4, 8), [8, 16)... ), a precyzja zawartych w nim liczb 2 razy mniejsza. Ostatni przedział na którym da się jeszcze zapisać wszystkie liczby całkowite to 8388608 do 16777215. Jeżeli więc czegoś nie pokręciłem, to (IMO) zapas dynamiki w górę (pogłaśnianie) wynosi tylko 6dB (w stosunku do liczb 24-bitowych stałoprzecinkowych). Oczywiście przy 32-bitach da się zapisać dużo większe liczby niż przy 24-bitach, ale duże liczby zapisywane są z mniejszą precyzją (zaokrąglane do pewnych wartości). Przesterowanie sumy spowoduje (IMO) utratę precyzji zapisu najgłośniejszych fragmentów (najgłośniejszych próbek).


Czy ktoś się orientuje, jak ten problem rozwiązano w programach DAW i czy faktycznie można się nie przejmować przesterowaniem sumy?


 


PS. Zdaję sobie sprawę, że o precyzji zapisu decydują 24 bity – 23 bity mantysy i 1 bit znaku. Po przekroczeniu tego zakresu nastąpi symboliczne przesunięcie przecinka i utracimy najmniej istotne informacje. Odstęp od tak powstałego „cyfrowego szumy” będzie na poziomie -144 dB – niemało ale do 1000dB daleko. 

Arek - Radzyń Podlaski

Zbynia
Posty:7665
Rejestracja:sobota 09 paź 2004, 00:00

Re: miks 32-bit floating-point

Post autor: Zbynia » poniedziałek 28 sty 2013, 19:03

coś pomieszałeś - sumy nie mozesz przesterować bo wychodzi praktycznie na przetwornik więc przesterujesz wejście przetwornika


a co do reszty to po co wzory?weź kilka sladów, podgłośnij jest wszystkie o 20-40dB i ścisz na sumie - usłyszysz - nic liczyć nie trzeba tym bardziej źle liczyć




między 16 bitami a 24 jest 48dB róznicy z zakresie dynamicznym


senjin
Posty:405
Rejestracja:poniedziałek 26 wrz 2005, 00:00
Kontakt:

Re: miks 32-bit floating-point

Post autor: senjin » poniedziałek 28 sty 2013, 23:07

Tak, liczby 32 bitowe zapewniają względną precyzję na poziomie 7 cyfr dziesiętnych. Ta precyzja jest stała w bardzo szerokim zakresie. W żadnej normalnej sytuacji nie dojdzie do obcięcia szczytów sygnału. Trudno mi wyobrazić sobie sytuację, żeby ta precyzja była niewystarczająca. Może w jakimś szalonym (i bardzo źle napisanym) algorytmie przetwarzania dźwięku, ale w zwykłym sumowaniu śladów?!

Awatar użytkownika
MB
Posty:3318
Rejestracja:wtorek 09 kwie 2002, 00:00

Re: miks 32-bit floating-point

Post autor: MB » wtorek 29 sty 2013, 17:49

Twój błąd polega na mylnym interpretowaniu opinii, którą usłyszałeś. To nie chodzi o to, że przy zmiennoprzecinkowej arytmetyce suma nigdy nie przekroczy poziomu przesterowania przetwornika wyjściowego. Chodzi o to, że wewnętrzne sygnały w wirtualnym mikserze mogą mieć praktycznie dowolnie wysoki poziom i nie nastąpi zniekształcenie (o ile nie jest ono na sztywno wpisane do algorytmu jakiejś wtyczki), ponieważ tam w środku jest ogromny zapas dynamiki. Inaczej mówiąc, czerwone kontrolki zapalające się w poszczególnych kanałach miksera nie oznaczają, że sygnał będzie zniekształcony, tak jak było to kiedyś, w systemach z arytmetyką stałoprzecinkową. Oczywiście, ewentualne przekroczenia poziomu 0dBFS na sumie musisz skorygować tłumikiem sumy.

Awatar użytkownika
astro
Posty:166
Rejestracja:piątek 09 sie 2002, 00:00

Re: miks 32-bit floating-point

Post autor: astro » wtorek 29 sty 2013, 18:48

... Oczywiście, ewentualne przekroczenia poziomu 0dBFS na sumie musisz skorygować tłumikiem sumy. ... 


 


Źle się wyraziłem pisząc o przesterowaniu sumy. I chyba nie zostałem zrozumiany.


 


Powiedzmy, że sumujemy liczby całkowite (24-bitowe – przetwornik AC). Ostateczny wynik zapiszemy także na 24-bitach (przetwornik CA). Jeżeli liczb tych będzie dużo lub będą one duże co do wartości to suma nie da się zapisać na 24 bitach. Przewidujemy taką sytuację i przed sumowaniem zamieniamy liczby ze stałoprzecinkowych na 32 bitowe zmiennoprzecinkowe. Mantysa ma 23 bity, znak 1 bit, dodatkowy 1 bit zyskujemy dzięki mnożeniu przez dwa (podstawa wykładnika). Jeżeli teraz suma nie zmieści się na 25 bitach to nastąpi symboliczne przesunięcie przecinka (wykładnik wzrośnie o jeden) i utracimy informację o najmniej znaczącym bicie. A więc stracimy precyzję sumowania. Tu wcześniej nieszczęśliwie użyłem słowa „przesterowanie”.


 


Zapewne to „przesterowanie” jest niesłyszalne (w końcu stracimy najmniej znaczący bit), ale jednak nie można chyba mówić o zapasie dynamiki 1000 dB. Ten zapas dynamiki istnieje tylko w przypadku gdy ściszamy sygnał. Jeśli się nie mylę to możemy go ściszyć dokładnie o 900 dB, zapisać, ponownie pogłośnić o 900 dB i uzyskamy dokładnie ten sam sygnał (na 24 bitach by się to nie udało). Pogłaśniać sygnału który trafił z 24-bitowego przetwornika już tak bezkarnie się nie da, bo utracimy część informacji (tak jak napisałem wyżej najmniej istotną).


 


Pomyślałem trochę i ja rozwiązał bym problem z sumowaniem w ten sposób, że przed zsumowaniem kilkunastu (kilkudziesięciu) kanałów najpierw przemnożył bym sygnał z każdego z nich przez wartość „redukcji” na tłumiku sumy. Ale w ten sposób zamiast kilkunastu (kilkudziesięciu) dodawań i jednego mnożenia mam kilkanaście (kilkadziesiąt) mnożeń i tyle samo dodawań. Czy przy dzisiejszych procesorach jest to problem? Chyba nie. No i jestem ciekaw jak to rozwiązali twórcy oprogramowania DAW.  



Arek - Radzyń Podlaski

senjin
Posty:405
Rejestracja:poniedziałek 26 wrz 2005, 00:00
Kontakt:

Re: miks 32-bit floating-point

Post autor: senjin » środa 30 sty 2013, 00:53

Pomyślałem trochę i ja rozwiązał bym problem...


Zanim się zacznie rozwiązywać problem, warto sprawdzić, czy problem faktycznie występuje




...ale traktując temat czysto teoretycznie:


To co nazywasz "przesuwaniem przecinka" występuje zarówno przy zgłaśnianiu, jak i przy ściszaniu, a więc i dla dużych i dla małych liczb - chyba tu tkwi jakieś niezrozumienie tematu. Może się wówczas pojawić błąd na ostatnim bicie... zauważ, że względny błąd w przypadku liczb naturalnych nigdy nie będzie mniejszy.


 


Wykładnik liczb zmiennoprzecinkowych daje ponad 1500 dB zapasu wolności w ustawieniach tłumików. Nigdy nie zaglądałem do kodu programów, ale najbardziej naturalny wydaje się podział na pół, czyli mamy ±750 dB. Trick ze ściszeniem o 900 dB może się więc nie udać


Zbynia
Posty:7665
Rejestracja:sobota 09 paź 2004, 00:00

Re: miks 32-bit floating-point

Post autor: Zbynia » środa 30 sty 2013, 12:13

No najpierw tzreba by mieć sygnał który będzie miał tak olbrzymią wartośc by móc go aż tak ściszyć...a uzyskać chociażby 200dB przy sumowaniu będzie strasznie trudno


ODPOWIEDZ