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


10

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

f(x)=x|x|(1ex2/|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|(1ex2/|x|)=sgn(x)(1e|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.