Это проблема моего хобби "выходного дня".
У меня есть несколько любимых однотактных волновых форм из ПЗУ классического синтезатора.
Это 8-битные выборки (256 возможных значений).
Поскольку они всего 8 бит, минимальный уровень шума довольно высок. Это связано с ошибкой квантования. Ошибка квантования довольно странная. Немного портит все частоты.
Я хотел бы взять эти циклы и сделать их "чистые" 16-битные версии. (Да, я знаю, что людям нравятся грязные версии, поэтому я позволю пользователю интерполировать между грязными и чистыми в той степени, в которой он хочет.)
Звучит невозможно, верно, потому что я навсегда потерял младшие 8 бит, верно? Но это было у меня в голове какое-то время, и я почти уверен, что смогу это сделать.
Помните, что это сигналы с одним циклом, которые просто повторяются снова и снова для воспроизведения, так что это особый случай. (Конечно, синтезатор делает все возможное, чтобы сделать звук интересным, включая огибающие, модуляции, перекрестное затухание фильтров и т. д.)
Я действительно знаю, что для каждой отдельной выборки байтов это одно из 256 значений в 16-битной версии. (Представьте себе обратный процесс, когда 16-битное значение усекается или округляется до 8 бит.)
Моя функция оценки пытается получить минимальный уровень шума. Я должен быть в состоянии судить об этом с помощью одного или нескольких БПФ.
Исчерпывающее тестирование, вероятно, заняло бы целую вечность, поэтому я мог бы выполнить первый проход с более низким разрешением. Или я просто случайным образом подталкиваю случайно выбранные значения (в пределах известных значений, которые сохранят ту же 8-битную версию), выполняю оценку и сохраняю более чистую версию? Или можно что-то быстрее сделать? Есть ли опасность попасть в локальные минимумы, когда где-то в пространстве поиска могут быть лучшие минимумы? У меня было такое в других подобных ситуациях.
Могу ли я сделать какие-либо первоначальные предположения, возможно, посмотрев на соседние значения?
Редактировать: несколько человек указали, что проблема упростится, если я уберу требование о том, что новая форма волны должна сэмплировать оригинал. Это правда. На самом деле, если я просто ищу более чистые звуки, решение тривиально.