首页 > 解决方案 > 为音频/DSP 实现 Z-1 单元延迟功能的最简单方法?

问题描述

我正在基于无限线性过采样从 Reaktor 重建一些失真单元,这是一种减少混叠的技术。它涉及具有单位延迟的失真方程的积分。这是示意图的示例: https ://www.native-instruments.com/forum/attachments/ilo-tanh-png.54931/

我想知道编写一个将输出延迟一个单位(Z-1)的函数的最简单方法是什么。

我在这里阅读了 Jordan Harris 的帖子,但我不确定我是否遵循他的技术。

这就是我想知道是否可能是相同的想法:

double output = nullptr;

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

所以原则上,它接受一个输入,但它不返回那个输入。它将它复制到另一个名为 output 的变量,我认为需要将其初始化为 nullptr,以便第一个示例请求在其中包含某些内容(即 nullptr)。不确定如何将其折叠到函数中。

由于 C++ 对顺序敏感(我认为),因此该函数每次运行时都会返回先前样本的输出。

然后,例如,它可以用在这样的方程中:

integral - getUnitDelay(integral) ... ;

那行得通吗?有更好的方法吗?

一如既往的感谢

标签: c++mathdelayjuceaudio-aliasing

解决方案


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 上通常甚至是指令级辅助。


推荐阅读