【问题标题】:Easiest Way to Implement a Z-1 Unit Delay Function for Audio/DSP?为音频/DSP 实现 Z-1 单元延迟功能的最简单方法?
【发布时间】:2018-11-04 06:57:24
【问题描述】:

我正在基于无限线性过采样从 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;
}

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

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

那么例如,它可以用在这样的等式中:

integral - getUnitDelay(integral) ... ;

这行得通吗?有没有更好的方法?

一如既往的感谢

【问题讨论】:

    标签: c++ math delay juce audio-aliasing


    【解决方案1】:

    主要存在一个问题,单位延迟功能一旦开始工作,就无法与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 上通常甚至是指令级辅助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      相关资源
      最近更新 更多