potrzebna formuła ograniczenia pików / kompresji dźwięku

9

Szukam formuły, która skutecznie kompresuje kształt fali dźwiękowej w celu ograniczenia pików. Nie jest to aplikacja „automatycznej regulacji głośności”, w której można kontrolować wzmocnienie wzmacniacza, aby utrzymać poziom głośności, ale raczej chcę ograniczyć („miękkie” obcięcie) poszczególnych pików. (Wiem, że to wprowadza harmoniczne, ale staram się analizować dane, a nie ich słuchać).

Moja (bardzo prymitywna) formuła to:

factor = (10 * average / level) + exp(-sqrt(0.1 * level / average))

Tam, gdzie poziom jest chwilowym poziomem dźwięku, średnia jest historycznym średnim poziomem dźwięku, a współczynnik jest mnożnikiem używanym do uzyskania „skorygowanego” poziomu ( współczynnik razy poziom ).

Ponadto, ten mnożnik jest stosowany tylko wtedy, gdy oblicza się do wartości mniejszej niż 1. W przeciwnym razie poziom nie zostanie skorygowany.

Celem jest ograniczenie skorygowanego poziomu do pewnej wielokrotności (około 15x przy tej formule) średniej historycznej. Ta formuła jest trochę potrzebna, ale wykazuje „spadek”, gdy liczby stają się większe. Oznacza to, że regulować poziom (czyli współczynnik razy poziom ) zwiększa się do punktu, wraz ze wzrostem poziomu rozliczony ale wtedy zamiast dzieje asymptotycznej, zaczyna się rzeczywiście coraz mniejsze. (W rzeczywistości pierwszy czynnik został dodany przede wszystkim, aby zapobiec zerowaniu formuły z bardzo wysokimi wartościami).

(Powodem, dla którego warto ograniczyć wartości w ten sposób, jest przede wszystkim to, że hałas przejściowy nie zakłóca poważnie średniej bieżącej poziomu dźwięku. Ale gdy analizujesz chrapania, „hałas przejściowy” jest dość znaczący, więc mogę go po prostu stłumić) .)

Czy ktoś może zasugerować coś lepszego? (Wygląda na to, że zachowanie asymptotyczne jest łatwe do wytworzenia, gdy tego nie chcesz, ale trudne, gdy tego chcesz.)

Daniel R. Hicks
źródło

Odpowiedzi:

9

Dwa problemy tutaj: jak uzyskać wiarygodne oszacowanie poziomu i jak skompresować dane.

  • Użyj solidnych statystyk na oryginalnych danych (nie ograniczonych pików), takich jak mediana lub kwantyle, zamiast średniej bieżącej, aby wykrycie „typowego poziomu” było odporne na wartości odstające.
  • k×tanh(xk) działa dobrze jako formuła kompresji i tak naprawdę dzieje się w niektórych obwodach audio (przy użyciu OTA). Aby uzyskać adaptacyjną kompresję, która zachowuje dynamikę oryginalnego sygnału i po prostu usuwa stany nieustalone, ustaw ścieżkę k na wygładzony „średni” poziom.C

przykład

  • Niebieski: oryginalny sygnał
  • Zielony: 2 x mediana wartości bezwzględnej nad przesuwanym oknem jako wykrycie „typowego poziomu”
  • Czerwony: kompresja tanh (wzór podany powyżej dla k równy poziomowi zaznaczonemu na zielono)
fenenety
źródło
Dzięki, to wygląda obiecująco. Podłączę go i zobaczę, jak to działa.
Daniel R Hicks,
1
Wypróbowałem to i wydaje się, że działa dobrze (po tym, jak wyczyściłem kilka kontroli palców). Moim jedynym problemem jest to, że wydaje się, że nie ma sposobu, aby wyregulować ostrość „kolana” bez obniżenia poziomu klipu lub cokolwiek innego.
Daniel R Hicks,
Dlaczego „ruchoma mediana” jest lepsza niż „średnia ruchoma”? W wielu miejscach czytałem, że jest mniej wrażliwy na wartości odstające. Ale nie widzę tego z prawdziwymi danymi . Masz pomysł na to pytanie?
Basj