c++ - 为音频/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) ... ;
那行得通吗?有更好的方法吗?
一如既往的感谢
解决方案
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 上通常甚至是指令级辅助。
推荐阅读
- gitlab - Gitlab - 仅在失败的主要管道上获得松弛通知
- javascript - Javascript 输入值返回未定义(待办事项列表程序)
- c++ - 运行 3 秒后 Omnet 内存不足?
- audio - 解码aac原始数据,得到CPE/SCE的长度
- c# - C# .NET Core:转换身份参考 SID 以显示 Active Directory 组和用户的值
- javascript - 如果已经存在,我怎么能记住名字?
- python - 标记化期间熊猫数据框中的“KeyError”
- seo - 确保文本在 webfont 加载期间保持可见 - TypeKit PageSpeed Insights
- javascript - 在 Node JS 中使用 multer 上传文件
- javascript - 从较大的选择中随机选择 2 张图像以叠加在一起?