Необхідна формула обмеження піку / стиснення звуку


9

Я шукаю формулу для ефективного стиснення звукової форми хвилі для обмеження піків. Це не програма "автоматичного регулювання гучності", де можна було б керувати посиленням підсилювача для підтримки рівня гучності, але я хочу обмежити ("м'який" усікання) окремі піки. (Я знаю, що це вводить гармоніки, але я намагаюся аналізувати дані, а не слухати їх.)

Моя (дуже сира) формула поки що:

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

Там , де рівень є миттєвим рівнем звуку, в середньому це історичний середній рівень звуку, а також фактор є множником , використовуваним для отримання «регулювати» рівня ( фактор рази рівня ).

Крім того, цей множник застосовується лише в тому випадку, якщо він обчислює значення менше 1. В іншому випадку рівень не буде коригуватися.

Наміром є обмеження відрегульованого рівня до деякого кратного (приблизно 15 разів за цією формулою) середнього середнього значення. Ця формула є сортом того, що мені потрібно, але демонструє «занурення» у міру збільшення чисельності. Тобто, скоригований рівень (тобто фактор рази рівень ) зростає до точки зі збільшенням нескоректована рівня , але потім, замість того , асимптотик, починає реально отримати менше. (Насправді перший чинник додавали насамперед, щоб запобігти переходу формули до нуля з надзвичайно високими значеннями.)

(Причина бажати таким чином обмежувати значення полягає в першу чергу тому, що перехідний шум не серйозно порушує середнє значення рівня звуку. Але, коли ви аналізуєте хропіння, "перехідний шум" є досить вагомим, тому я можу його просто вищипнути .)

Отже, чи може хтось запропонувати щось краще? (Схоже, асимптотичну поведінку легко виробляти, коли цього не хочеш, але важко, коли це робиш.)


Відповіді:


9

Тут є дві проблеми: як отримати надійну оцінку рівня та як стиснути дані.

  • Використовуйте надійну статистику щодо вихідних (не обмежених піком) даних, таких як медіана або квантили замість поточного середнього, щоб зробити ваше "типовий рівень" виявлення надійним для людей, що втратили життя.
  • k×tanh(xk) добре працює як Cформула стиснення, і це насправді те, що відбувається в деяких аудіосхемах (за допомогою OTA). Щоб отримати адаптивну компресію, яка зберігає динаміку вихідного сигналу і просто видалити перехідні, зробіть k відслідковувати згладжений "середній" рівень.

приклад

  • Синій: оригінальний сигнал
  • Зелений: 2 х медіана абсолютного значення над розсувним вікном як виявлення "типового рівня"
  • Червоний: стиснення тена (формула, наведена вище, k дорівнює рівню, зображеному зеленим кольором)

Дякую, це виглядає перспективно. Я підключу його і побачу, як це робиться.
Даніель Р Хікс

1
Я спробував це, і, здається, він працює добре (після того, як я очистив пару перевірок пальцями). Єдине моє питання з цим полягає в тому, що, здається, не існує жодного способу регулювання різкості "коліна", не псуючи рівень кліпу чи будь-що інше.
Даніель Р Хікс

Чому "середня ковзання" краща за "ковзну середню"? Я читав у багатьох місцях про те, що він менш чутливий до людей, що втратили життя. Але я не можу бачити цього з реальними даними . Будь-яка ідея з цього питання?
Бась
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.