Алгоритм ефекту цифрових спотворень


10

Я читав книгу DAFX Удо Зельзера про ефект спотворення на сторінках 124-125, і там сказано, що відповідне моделювання спотворень задається функцією:

f(x)=x|x|(1−ex2/|x|)

Чи може хтось пояснити цю формулу і який сигнал ми отримуємо?

З того, що я розумію, «x» - це вибірковий сигнал, тому це послідовність чисел. Що означає | х | означає? Чи посилається воно на абсолютне значення x для кожного вибіреного значення?

Отже, якщо я хочу здійснити таке моделювання ефекту спотворення,

  1. Мені потрібно знати довжину x (Це задано кількістю зразків)
  2. У циклі мені потрібно обчислити цю формулу для кожного значення вибірки
  3. після закінчення циклу я отримую спотворений сигнал (в цифровій формі)

Після цього мені потрібно перетворити його в аналоговий сигнал, щоб я міг його почути.


2
Зауважте, що у формулі, наведеній у книзі, є помилка (у експоненті має бути негативний знак). Дивіться мою відповідь нижче.
— Метт Л.

Відповіді:


5

| х | позначає абсолютне значення - x / | x | біт формули є для того, щоб переконатися, що знак вводу збережений у висновку. Щодо реалізації, так, вказані вами кроки є правильними.


1
Що ви маєте на увазі під «реальним викривленням»? Абсолютно будь-яка операція, яку ви робите над оригінальним сигналом, все одно буде спотворенням! Що ти намагаєшся зробити?
— пікенети

1
Спотворення - це дуже розпливчастий термін, який описує будь-яку (зазвичай небажану) трансформацію, яка змінює сигнал. Спотворення гітари досягається багатьма різними процесами - відсіканням, випрямленням, перевантаженням - залежно від виду педалі / підсилювача, в якому це відбувається - не існує єдиної "справжньої" формули ... Формула, яку ви маєте, виглядає так, що вона дає сигмоподібна функція, яка б імітувала перевантаження; але я думаю, що десь може виникнути помилка.
— пікенети

1
Це потрібно зробити у часовій області.
— пікенети

1
Тому що так діють ефекти спотворення гітари. Спочатку вони були виготовлені з нелінійних елементів, таких як трубки, діоди та пізні транзистори, поведінка яких описується у часовій області нелінійною функцією. І ви намагаєтесь наслідувати це цифровим шляхом ...
— pichenettes

1
Генератор перемикання пітча, генератор фантазійних гармоній (скажімо, EHX micro pog) або фантазійний спектральний морфінг (не можу згадати назву продукту) потребують обробки частотної області. Деякі симулятори підсилювачів / колонок вимагають тривалих згортків, які ефективно виконуються шляхом множення в частотній області. Але в будь-якому випадку НІКОЛИ "не приймайте весь FFT сигналу" - це реалізовується шляхом перекриття додавання малої довжини FFT (1024 зразки або близько того).
— пікенети

10

Завдяки сюжету у відповіді Оллі Ніємітало я переконався, що формула, подана в книзі, має помилкову ознаку. Нелінійність, яка використовується для нечіткості або спотворення, завжди є деяким типом згладженої функції відсікання, яка стискає вхідний сигнал. Таким чином, малі амплітуди входу зазнають незначних змін, тоді як великі амплітуди входу м'яко обрізані (більш-менш). І цифра, показана у відповіді Оллі, робить зовсім навпаки.

Тож я переконаний, що правильна формула повинна бути

(1)f(x)=x|x|(1−e−x2/|x|)=sgn(x)(1−e−|x|)

Для малих значень маємо , а для великих (величини) отримуємо , тобто відсікання.xf(x)≈sgn(x)|x|=xf(x)≈sgn(x)

Це графік виправленої нелінійності ( WolframAlpha ):f(x)

введіть тут опис зображення

Формулу також слід спростити, як найвищий вираз у , тому що початківець може схильний буквально реалізувати іншу формулу і спробувати оцінити терміниі, що є надмірно складним, а також створює проблеми, коли близький до нуля. Типова реалізація виглядатиме так:х / | х | х 2 / | х | х(1)x/|x|x2/|x|x

якщо (x> 0)
   y = 1 - exp (-x);
ще
   y = -1 + exp (x);
кінець

О так, книга неправильно цитує web.archive.org/web/20070826204128/http://www.notam02.no/…, і вище це правильна формула.
— Оллі Ніемітало

Добре, дякую. Ви вважаєте, що це джерело книги?
— Метт Л.

Так, книга посилалась на цю студентську дисертацію. Була друга норвезька студентська дисертація, яка мала неправильну формулу і цитувала першу студентську дисертацію. Я не намагався перевірити дати, щоб пересвідчитися, чи книга копіювала другу тезу, не перевіряючи першоджерело чи друге тезу скопіювала книга.
— Оллі Ніемітало

1
@OlliNiemitalo: типовий випадок поширення помилок. Я також не впевнений, чому вони використовують дурні вирази, такі як. Як я додав до своєї відповіді, якийсь новачок може закінчитись буквально. x2/|x|
— Метт Л.

2

Ви можете записати тіло функції безпосередньо в Wolfram Alpha, і це побудувати його:

введіть тут опис зображення

Мені це схоже на хвилевідник , і їх можна використовувати, як ви описуєте.


1
Тепер, коли я бачу ваш сюжет, я цілком переконаний, що формула в книзі неправильна. Дивіться мою відповідь. Як ти гадаєш?
— Метт Л.

2
@ MattL.Да це має набагато більше сенсу. Функція книги також зменшується, що може викликати небажану інверсію фаз.
— Оллі Ніємітало
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.