Я шукаю формулу для ефективного стиснення звукової форми хвилі для обмеження піків. Це не програма "автоматичного регулювання гучності", де можна було б керувати посиленням підсилювача для підтримки рівня гучності, але я хочу обмежити ("м'який" усікання) окремі піки. (Я знаю, що це вводить гармоніки, але я намагаюся аналізувати дані, а не слухати їх.)
Моя (дуже сира) формула поки що:
factor = (10 * average / level) + exp(-sqrt(0.1 * level / average))
Там , де рівень є миттєвим рівнем звуку, в середньому це історичний середній рівень звуку, а також фактор є множником , використовуваним для отримання «регулювати» рівня ( фактор рази рівня ).
Крім того, цей множник застосовується лише в тому випадку, якщо він обчислює значення менше 1. В іншому випадку рівень не буде коригуватися.
Наміром є обмеження відрегульованого рівня до деякого кратного (приблизно 15 разів за цією формулою) середнього середнього значення. Ця формула є сортом того, що мені потрібно, але демонструє «занурення» у міру збільшення чисельності. Тобто, скоригований рівень (тобто фактор рази рівень ) зростає до точки зі збільшенням нескоректована рівня , але потім, замість того , асимптотик, починає реально отримати менше. (Насправді перший чинник додавали насамперед, щоб запобігти переходу формули до нуля з надзвичайно високими значеннями.)
(Причина бажати таким чином обмежувати значення полягає в першу чергу тому, що перехідний шум не серйозно порушує середнє значення рівня звуку. Але, коли ви аналізуєте хропіння, "перехідний шум" є досить вагомим, тому я можу його просто вищипнути .)
Отже, чи може хтось запропонувати щось краще? (Схоже, асимптотичну поведінку легко виробляти, коли цього не хочеш, але важко, коли це робиш.)