【问题标题】:How does one deal with a cyclic dependency when coding DSP Signal Chains?在编码 DSP 信号链时如何处理循环依赖?
【发布时间】:2014-05-23 10:58:52
【问题描述】:

我正在考虑将我自己的 3D 音频渲染系统编码为一个教育项目,因为我已经确定诸如 OpenAL 之类的技术过于面向设备并且缺乏我使用的功能。我希望它尽可能灵活。为此,我已经开始考虑如何对它进行编码,以便我可以从使用它的程序中的较小部分构建信号链。我可以从概念上处理一切都只是非循环路径的情况,但不知道如何处理循环。也就是说,当一个对象直接或间接依赖其当前输出样本来计算其当前输出信号时,如何处理这种情况?我能想到的只有两件事:程序进入无限循环并崩溃,或者当这种依赖关系发生时我人为地增加了延迟。研究发现没有关于这个问题的信息。

【问题讨论】:

  • 我是 DSP 的新手。研究未能提供有关此问题的信息可能是因为词汇量有限。我对编程并不陌生。如果能够将延迟线通过滤波器并将该滤波器连接回延迟线,而不必增加延迟,那就太好了。另一种方法当然是制作系统的多个副本并将它们链接起来,但这并不能完全解决问题。在我弄清楚这个问题之前,我不想编写任何代码,因为当我点击混响时它会出现,现在稍微考虑一下就可以避免以后的头痛。

标签: c graph filtering signal-processing


【解决方案1】:

欢迎来到 Stack Overflow!

您正在寻找的技术称为无限脉冲响应 (IIR) 滤波器

http://en.wikipedia.org/wiki/Infinite_impulse_response


正如您所怀疑的,没有任何延迟的循环循环在脉冲响应函数方面没有多大意义。

在某些领域,没有延迟的循环循环是有意义的。那些将是迭代系统。 Casuality 在这些系统中也不是问题。获取整个值集 A[index],将其传递给函数,然后获取另一组值 B[index]。 “变换”(例如离散傅里叶变换)将适合该描述。这可能远远超出您的项目(或本次讨论)的范围。


单位延迟通常用 表示。 (有关该符号的正确呈现,请参阅 Wikipedia 文章中的图表。)

这个符号来自Z-transform,一个与Fourier transformLaplace transform密切相关的数学工具。


粗略地说,

  • 拉普拉斯变换用于分析连续时间系统的瞬态
  • 傅里叶变换用于分析:
    • 稳态连续时间系统
    • 频域
    • 周期性系统
  • Z 变换用于分析离散时间系统的瞬态,例如您正在研究的系统。

Stack Exchange 网络有一个用于数字信号处理的姊妹站点 http://dsp.stackexchange.com

但是,预计 DSP 网站的新手至少对 DSP 有基本的了解(大致相当于在大学阶段参加第一门“信号与系统”课程,或同等自学。)

希望您能从您的项目中获得很多知识。

【讨论】:

    【解决方案2】:

    据我所知,所有实时音频软件要么会增加延迟,要么会完全禁止反馈路径。

    这远远超出了我的知识领域,但据我了解,电子电路模拟器(Spice 等)会考虑反馈。也许你可以看到他们使用了什么技术。

    【讨论】:

      猜你喜欢
      • 2016-05-02
      • 1970-01-01
      • 2011-07-26
      • 2015-01-04
      • 2014-07-29
      • 2018-10-05
      • 2014-08-02
      • 2015-07-06
      • 2012-06-07
      相关资源
      最近更新 更多