Самый простой способ реализовать функцию задержки модуля Z-1 для аудио / DSP? - PullRequest
0 голосов
/ 04 ноября 2018

Я работаю над перестройкой некоторых искажающих единиц из Reaktor на основе Infinite Linear Oversampling, который является техникой для уменьшения алиасинга. Он включает в себя интегралы уравнений искажения с единичными задержками. Вот пример схемы: https://www.native -instruments.com / Форум / Дополнительное оборудование / ILO-TANH-png.54931 /

Мне интересно, какой самый простой способ написать функцию, которая задерживает вывод на одну единицу (Z-1).

Я читаю сообщения Джордана Харриса здесь , но я не уверен, что следую его методике.

Вот что мне интересно, может быть, та же идея:

double output = nullptr;

inline double getUnitDelay(float& input) {
return output;
input = output;
}

Итак, в принципе, он принимает входные данные, но не возвращает их. Он копирует его в другую переменную с именем output, которую, я думаю, нужно инициализировать как nullptr, чтобы в ней было что-то (т.е. nullptr) для первого примера запроса. Не уверен, как это можно сложить в функцию.

Поскольку C ++ чувствителен к порядку (я думаю), эта функция возвращает выходные данные предыдущего образца при каждом запуске.

Тогда, например, его можно использовать в уравнениях, подобных этому:

integral - getUnitDelay(integral) ... ;

Это сработает? Есть ли лучший способ сделать это?

Спасибо как всегда

1 Ответ

0 голосов
/ 04 ноября 2018

В основном проблема заключается в том, что функция задержки единицы измерения не привязана к использованию с данными integral, как только вы ее заработаете.

 int delay1(int input) {
    static int previous=0;
    int outp = previous;
    previous= input;
    return outp;
 }

Вы должны как-то добавить контекст к задержке, которую вы предоставите для функции, которая будет использоваться с этой конкретной переменной.

  int delay_better(int inp, int *context){
     int out=*context;
     *context=inp;
     return out;
 }

Общий подход для задержки в N-единицах обычно использует кольцевой буфер, который часто даже поддерживается на уровне команд на DSP.

...