不错的DSP甜点:重采样,FFT卷积。所有这些都有Pythorch,可微的和CUDA支持。
julius的Python项目详细描述
Julius,基于快速Pythorch的音频和1D信号DSP
Julius包含不同的数字信号处理算法 使用Pythorch,因此它们是可微的,并且在CUDA上可用。 注意,这里实现的所有模块都可以与TorchScript一起使用。在
目前,我已经实施了:
- julius.resample:快速sinc重采样。在
- julius.fftconv:基于FFT的卷积。在
- julius.lowpass:FIR低通滤波器组。在
- julius.bands:mel尺度频带上波形信号的分解。在
此外,您还可以在以下位置找到有用的实用程序:
- julius.core:DSP相关函数。在
- julius.utils:通用实用程序。在
安装
julius
需要Python3.6。要安装:
pip3 install -U julius
使用
参见Julius documentation了解朱利叶斯的用法。以后你会发现一些例子 快速入门:
^{pr2}$算法
重采样
这是juliuso.Smith的sinc resample algorithm的实现。 它与resampy中使用的算法相同,但要在GPU-It上高效运行 仅限于采样率的微小变化。如果新老样本率 除以他们的GCD后就变小了。例如从2000到3000的采样率(去除GCD后为2,3) 会非常快,而从20001到30001则不会。 重采样比你的CPU重采样要快得多 (当然除了奇怪的情况,比如从20001到30001的抽样率)。在
FFTConv1d
用非常大的核(>;=128)和1的步长计算卷积可以快得多
使用FFT。这实现了与torch.nn.Conv1d
和torch.nn.functional.conv1d
相同的API
但是有了FFT后端。不支持膨胀和组。
即使对于相对较小的张量(几十个通道,内核大小),FFTConv在CPU上也会更快
共128页)。在CUDA上,由于较高的并行性,正则卷积在许多情况下可以更快,
但是对于大于128的内核大小,对于大量通道或批处理大小,FFTConv1d
最终会更快(基本上当你不再有闲置的核心可以隐藏
操作的真正复杂性)。在
低通
经典有限脉冲响应加窗sinc低通滤波器。它将自动使用FFT卷积 如果过滤器尺寸足够大。在
波段
在波形域的频带上信号的分解。这对 实例来执行参数EQ(参见上面的Usage)。在
基准
您可以在上找到速度测试(以及与参考实现的比较)
benchmark。CPU基准测试运行在MacBookPro2020上,频率为2GHz
四核intel CPU。GPU基准测试运行在Google Colab Pro上(例如V100或P100 NVidia GPU)。
我们还比较了我们的实现与参考实现的有效性,比如resampy
或torch.nn.Conv1d
。在
运行测试
那么,克隆这个存储库
pip3 install .[dev]' python3 tests.py
要运行基准:
pip3 install .[dev]'
python3 -m bench.gen
许可证
julius
是根据麻省理工学院的许可证发布的。在
- 项目
标签: