Windows下可以进行实时信号处理吗?

信息处理 即时的 在线处理
2022-01-11 18:13:10

这个问题与如何决定哪个平台最适合实现实时音频处理有关?,但专注于 Windows。

我希望能够从数据采集板获取输入并进行处理(通过 Matlab 或自定义程序),并使用该程序的结果来驱动通过 USB 连接的外部设备。我知道使用 Windows 获得硬实时响应几乎是不可能的(因为存在 3-15 毫秒的“摆动”(技术术语))。

减少这种摆动时间的最有效方法是什么?这可能吗?我应该立即寻找嵌入式解决方案吗?

4个回答

如果您需要将抖动(假设这就是您所说的“摆动”:) 保持在 <1ms 我会说忘记 Windows。从输入到输出的绝对延迟是否重要,还是仅仅是抖动?

您可能会在某些时候管理它,但保证它是不可能的。没有按时完成的处罚是什么?它会炸毁扬声器吗?用力驱动机械臂靠在终点站上?或者更良性的东西?

您的输出是 USB 的事实也不太可能有助于解决抖动问题,因为那里有很多额外的操作系统交互,并且总线的拓扑结构也会阻碍您的潜在延迟 - 如果您的输出位于一串字符串的末尾例如,一些集线器。

这是否可能取决于您的延迟要求,即输入和输出之间的总延迟。一个好的起点可以是使用 ProTools、Sonar、Ableton、Cubase 等录制软件设置数字音频工作站。这些软件与廉价(某种)I/O 硬件配合使用,并带有低延迟优化驱动程序。其中一些具有“插入式”接口,允许您在自己的信号处理中循环。一种流行的格式是 Steinberg 的 VST,它被许多主机支持。它曾经是开放和免费的,但现在可能需要许可证。

这个http://www.kvraudio.com/wiki/是一个很好的资源。

如果您想在 Matlab 中进行处理,您可能必须编写自己的驱动程序。我已经看到使用 DLL 和本机 JAVA 接口完成了这一点。你也可以用 audioplayer() 和 audiorecorder() 来破解一些东西,但是这些可能需要相当长的延迟来处理 Windows 中断和做其他事情。本质上,您设置了一个带有触发时间的回调的 GUI 控件。在回调中,您读取所有可用的输入,处理它们,将它们推入输出并希望获得最好的结果。

一般来说,它有助于保持 Windows 框尽可能“干净”,即没有网络连接(在处理音频时),没有防病毒软件,并且只运行绝对最低限度的启动项目、软件和服务。

Windows 不是实时操作系统,所以您在 Windows 中没有真正的实时处理能力。

在 Windows Vista 中,微软提供了一个新的 API,其中包括严格的性能,其中Exclusive-Mode Streams承诺接近实时的性能。这是通过一些强大的东西协同工作来实现的,包括从用户模式组件到音频硬件的短而专有的路径、特定的多媒体调度。让我引用维基

对于音频专业人士,我们引入了一个新的 WaveRT 端口驱动程序,该驱动程序通过使用多媒体类调度程序来实现实时性能,并支持减少音频流延迟的音频应用程序。因此,用户模式应用程序可以完全控制音频流,而无需在运行时在内核中执行任何代码。WaveRT 允许用户模式应用程序直接访问内部音频硬件缓冲区和采样位置计数器(内存中映射到音频硬件 DMA 引擎的数据)。它允许应用程序轮询硬件正在访问的 DMA 内存窗口中的当前位置。WaveRT 还支持硬件生成时钟通知事件的概念,类似于 ASIO API,这样应用程序就不需要轮询当前位置,如果他们不想这样做。然而 WaveRT 仅适用于 PCI、PCI Express 或板载音频设备;它不适用于专业音频行业中更为普遍的 USB 或 FireWire 接口。

这种新的操作模式为低延迟音频处理开辟了令人兴奋的机会,例如快乐用户所报告的

与使用 ASIO 的 4ms 缓冲区(+5ms 输出延迟)中的半稳定音频相比,我获得了具有 2ms 缓冲区 + 0.5ms 延迟的完美坚如磐石的稳定音频。

根据这种实时近似是否适合您,Windows 可能仍然是上述任务的良好环境。

我们在 Windows 平台上使用我们的数据采集软件 - Dewesoft X进行此操作。我们的一些客户在 Windows PC 系统上使用输入信号并在大约 10 毫秒内输出。

当其中一条数据总线完全绕过 PC 并实时发送数据时,我们的一些DAQ 设备具有双总线功能...

唯一的缺点是您需要使用我们的信号调节硬件。如果这对您来说不是问题,您可以尝试。