【发布时间】:2014-11-01 18:00:10
【问题描述】:
我必须对整数数组进行浮点数学运算,音频应用程序(多通道)的速度快且延迟低。我的代码有效,但我想知道是否有更有效的处理方式。我得到大约 120 帧的 16 或 24 通道交错 32 位音频整数的缓冲区,然后我必须将其转换为浮点数/双精度数组进行处理(例如双二阶滤波器)。目前我遍历数组并将每个整数转换为浮点数组的一个元素。然后我处理这些并将它们转换回写缓冲区的整数,我将其传递回 lib 函数(我在 linux 上使用 snd_pcm_readi 和 snd_pcm_writei)。抄的多,好像很浪费。
我做的越快,我的延迟就越低,因此在现场声音使用中的整体性能就越好。
我已经阅读了可以使用 gcc 选项编译的 SSE 和其他扩展,并且一些参考文献暗示能够传递数组以进行流线型转换等,我想知道这些是否对上述内容有所帮助。或者也许我不应该费心转换为浮点数 - 将我的处理函数更改为使用整数,跟踪溢出,也许使用 64 位整数,或者为指数创建一个单独的数组 - 对我来说似乎很深奥,但我想它不是这很难实现,只需要编码一次等。我问了一个单独的问题“音频 DSP 数学是否需要 FPM,或者它可以在 32/64 位整数数学中完成,然后再舍入到 24 位输出? '这是同一主题的一部分,但我认为我应该将其拆分为不同的问题。
【问题讨论】:
-
如果你发布你的代码呢?因此开发人员可以尝试突出您的
code可以改进的地方?? -
这个类似的问题可能很有用:stackoverflow.com/questions/429632/…
-
嗯,是的,它确实有用,谢谢。我想正如 mlwn 所说我应该发布代码,但当前代码过于分散,我将不得不编写一个示例 sn-p 来执行此操作。在阅读了另一个问题并考虑了一段时间的复杂性后,我想我会坚持我正在做的事情并回到这个问题(如果有人在此期间发布重要信息,那就更好了)。很明显,转换非常昂贵,如果我可以完全消除浮点并以整数工作,我将受益,但在这种情况下我将不得不自己实现 psuedo fp。谢谢大家。
-
如果您打算使用整数进行这种过滤,您应该考虑使用Fixed Point Arithmetic。 Skype 在其编解码器中有一个示例,该示例可免费使用reference code。只需在页面上搜索 biquad。
-
Degustaf,非常有趣的谢谢。很高兴看到有人这样做,我会看看这个例子。
标签: c arrays performance floating-point data-conversion