我正在基于无限线性过采样技术从Reaktor重建一些失真单位,这是一种减少混叠的技术。它涉及具有单位延迟的失真方程的积分。这是原理图的示例: https://www.native-instruments.com/forum/attachments/ilo-tanh-png.54931/
我想知道编写延迟一个单位(Z-1)输出的函数的最简单方法是什么。
我阅读了约旦·哈里斯(Jordan Harris)的帖子here,但不确定我是否遵循他的技术。
这就是我想知道是否可能是同一主意:
double output = nullptr;
inline double getUnitDelay(float& input) {
return output;
input = output;
}
因此,原则上,它接受输入,但不返回该输入。它将其复制到另一个称为输出的变量,我认为需要将其初始化为nullptr,以便在第一个示例请求中包含某些内容(即nullptr)。不确定如何将其折叠到函数中。
由于C ++是顺序敏感的(我认为),因此该函数每次运行时都会返回先前示例的输出。
然后,例如,它可以用于以下方程式:
integral - getUnitDelay(integral) ... ;
那行得通吗?有更好的方法吗?
一如既往的感谢
答案 0 :(得分:0)
主要存在一个问题,一旦您使用了integral
数据,单位延迟功能就不会被捆绑使用。
int delay1(int input) {
static int previous=0;
int outp = previous;
previous= input;
return outp;
}
您应该以某种方式在延迟中添加一个 context ,该延迟将提供给该特定变量使用的函数。
int delay_better(int inp, int *context){
int out=*context;
*context=inp;
return out;
}
N单元延迟的通用方法通常是使用循环缓冲区,在DSP上通常甚至是指令级辅助。