Google 裸机微控制器上的 Lyra
Google Lyra on bare metal microcontroller
Google Lyra 提供 3 kbps 语音编码。我想在裸机微控制器上使用它:没有 OS(虽然 libc 可用)。我找不到关于此可行性的信息,甚至找不到其依赖项的明确列表。
源代码显示了许多在此类环境中不可用的依赖项。但是,其中许多(如果不是全部)用于构建和测试,不需要包含在交叉编译器中。记录器也可以省略。
Lyra 使用 Google 的内部构建系统,我对此并不熟悉,这让事情变得更加复杂。
如何理解依赖项并将其移植到裸机?至少,我如何确定完整的依赖项集,以及它们是否需要 运行-时间?
更新
我的目标是低带宽语音。越低越好,只要它仍然可以理解;这是一个资源受限的环境。源是 8 KHz 12 位单声道,但我不想保留它,只是为了在有和没有环境噪音的情况下保持清晰可辨。
Computational complexity is reduced by using a cheaper recurrent
generative model, a WaveRNN variation, that works at a lower rate, but
generates in parallel multiple signals in different frequency ranges
that it later combines into a single output signal at the desired
sample rate. This trick, plus 64-bit ARM optimizations, enables Lyra
to not only run on cloud servers, but also on-device on mid-range
phones, such as Pixel phones, in real time (with a processing latency
of 100ms).
https://github.com/google/lyra
这种性能超出了微控制器的设计范围。如果您继续阅读该页面,您还会看到该项目依赖于 Matrix-Vector 乘法加速器,并且它“支持手机的实时性能”。这反过来意味着,如果没有矢量乘法支持,即使是智能手机 CPU 也无法在 real-time.
中实现 运行 lyra(Encode)
唉,作为起点,我会先尝试使用 pre-built Android 应用程序,然后查看它的源代码。这会将您带到 lyraEncoder 或 lyraDecoder API。由于这些只是每个 header,您可以尝试通过简单地将相关源文件复制到您的项目中来在您的项目中编译它(如果它支持 C++),注意您可以从中提取的 lyra 特定编译器标志挡板文件。也许你甚至可以 link 在 CMake 中完成所有事情,但是混合 CMake 和边框听起来很头疼。
How can I understand the dependencies and port it to bare metal? At
the least, how can I determine the full set of dependencies, and
whether they're needing at run-time?
他们在 github 页面上声明了他们的依赖关系。您只需要拥有 sparse_matmul 库(lyra 将其作为源文件包含在内)和 glog,尽管这可以说是可选的。
虽然所有这些都严重依赖于 stdlib,所以我首先尝试在 linux 上编译 lyra as-is,使用目标微控制器上使用的相同 C++ 版本,然后查看如果有效。
Google Lyra 提供 3 kbps 语音编码。我想在裸机微控制器上使用它:没有 OS(虽然 libc 可用)。我找不到关于此可行性的信息,甚至找不到其依赖项的明确列表。
源代码显示了许多在此类环境中不可用的依赖项。但是,其中许多(如果不是全部)用于构建和测试,不需要包含在交叉编译器中。记录器也可以省略。
Lyra 使用 Google 的内部构建系统,我对此并不熟悉,这让事情变得更加复杂。
如何理解依赖项并将其移植到裸机?至少,我如何确定完整的依赖项集,以及它们是否需要 运行-时间?
更新
我的目标是低带宽语音。越低越好,只要它仍然可以理解;这是一个资源受限的环境。源是 8 KHz 12 位单声道,但我不想保留它,只是为了在有和没有环境噪音的情况下保持清晰可辨。
Computational complexity is reduced by using a cheaper recurrent generative model, a WaveRNN variation, that works at a lower rate, but generates in parallel multiple signals in different frequency ranges that it later combines into a single output signal at the desired sample rate. This trick, plus 64-bit ARM optimizations, enables Lyra to not only run on cloud servers, but also on-device on mid-range phones, such as Pixel phones, in real time (with a processing latency of 100ms). https://github.com/google/lyra
这种性能超出了微控制器的设计范围。如果您继续阅读该页面,您还会看到该项目依赖于 Matrix-Vector 乘法加速器,并且它“支持手机的实时性能”。这反过来意味着,如果没有矢量乘法支持,即使是智能手机 CPU 也无法在 real-time.
中实现 运行 lyra(Encode)唉,作为起点,我会先尝试使用 pre-built Android 应用程序,然后查看它的源代码。这会将您带到 lyraEncoder 或 lyraDecoder API。由于这些只是每个 header,您可以尝试通过简单地将相关源文件复制到您的项目中来在您的项目中编译它(如果它支持 C++),注意您可以从中提取的 lyra 特定编译器标志挡板文件。也许你甚至可以 link 在 CMake 中完成所有事情,但是混合 CMake 和边框听起来很头疼。
How can I understand the dependencies and port it to bare metal? At the least, how can I determine the full set of dependencies, and whether they're needing at run-time?
他们在 github 页面上声明了他们的依赖关系。您只需要拥有 sparse_matmul 库(lyra 将其作为源文件包含在内)和 glog,尽管这可以说是可选的。
虽然所有这些都严重依赖于 stdlib,所以我首先尝试在 linux 上编译 lyra as-is,使用目标微控制器上使用的相同 C++ 版本,然后查看如果有效。