裸机微控制器上的 Google Lyra

问题描述 投票:0回答:2

Google Lyra 提供 3 kbps 语音编码。我想在裸机微控制器上使用它:没有操作系统(尽管 libc 可用)。我找不到有关此可行性的信息,甚至找不到其依赖项的清晰列表。

源代码显示了许多在这种环境中不可用的依赖项。但是,其中许多(如果不是全部)用于构建和测试,不需要包含在交叉编译器中。记录器也可以省略。

Lyra 使用 Google 的内部构建系统,我不熟悉该系统,这使事情变得更加复杂。

如何理解依赖关系并将其移植到裸机?至少,我如何确定完整的依赖项集,以及它们在运行时是否需要?


更新

我的目标是低带宽语音。只要保持可理解性,越低越好;这是一个资源受限的环境。源是 8 KHz 12 位单声道,但我不想保留它,只是为了保持清晰可懂,无论有没有环境噪音。

dependencies embedded cross-compiling codec
2个回答
1
投票

通过使用更便宜的循环来降低计算复杂性 生成模型,WaveRNN 的变体,工作速率较低,但是 并行生成不同频率范围的多个信号 随后它会在所需的位置组合成单个输出信号 采样率。这个技巧加上 64 位 ARM 优化,使 Lyra 不仅可以在云服务器上运行,还可以在中端设备上运行 手机,例如 Pixel 手机,实时(处理延迟 100 毫秒)。 https://github.com/google/lyra

这种性能超出了微控制器的设计范围。如果您继续阅读该页面,您还会看到该项目依赖于矩阵向量乘法加速器,并且它“在手机上实现了实时性能”。这反过来意味着,如果没有矢量乘法支持,即使是智能手机 CPU 也无法实时运行 lyra(编码)。

唉,作为一个起点,我会首先尝试使用预构建的 Android 应用程序,然后查看它的源代码。这将引导您访问 lyraEncoder 或 lyraDecoder API。由于这些只是一个标头,因此您可以尝试在项目中编译它(如果它支持 C++),只需将相关源文件复制到项目中,注意可以从 bezel 文件中提取的 lyra 特定编译器标志。也许您甚至可以在 CMake 中链接整个内容,但混合 CMake 和 bezel 听起来很头痛。

如何理解依赖关系并将其移植到裸机?在 至少,我如何确定完整的依赖关系集,以及 他们在运行时是否需要?

他们在 github 页面上声明了他们的依赖关系。您只需要拥有 sparse_matmul 库(lyra 将其作为源文件包含在内)和 glog,尽管这可以说是可选的。

所有这些都严重依赖于 stdlib,所以我首先尝试在 Linux 上按原样编译 lyra,使用与目标微控制器上使用的相同的 C++ 版本,然后看看它是否有效。


0
投票

您是否成功将 lyra 嵌入到裸机代码中?

© www.soinside.com 2019 - 2024. All rights reserved.