31个版本
0.10.2 | 2024年5月24日 |
---|---|
0.10.0 | 2022年10月7日 |
0.9.4 | 2021年6月16日 |
0.9.2 | 2021年1月11日 |
0.3.0 | 2016年7月16日 |
#182 在 算法 中
1,870 每月下载量
750KB
17K SLoC
basic_dsp
基于时间或频率域中的实数或复数向量进行数字信号处理。向量包含基本的算术、卷积、傅里叶变换和插值操作。
⚠ 无维护 ⚠
这个库主要是由一个人在多年的时间里开发和支持的。这已经不再可持续,我也缺乏继续这样做的时间和精力。因此,我将很少回应问题,也不会开发更多的补丁。请随意继续使用这个库,如果发现任何问题,请继续提交问题。可能在未来某个时刻,有人会接管这个项目 ☺️。
用法
将此添加到您的 Cargo.toml
[dependencies]
basic_dsp = "*"
并添加到您的crate根目录
extern crate basic_dsp;
另请参阅 高级构建选项.
向量类型
这个crate带来了不同类型的向量。
- 单精度 (
f32
) 或双精度 (f64
) 浮点数。这可以用来在精度和性能之间进行权衡。如果不确定,那么从双精度浮点数开始可能更好。 - 向量在Rust的类型系统中跟踪向量内部的域(时间/频率)和数空间(实数/复数)的元数据,因此可以防止某些错误。还有一个可以跟踪运行时元数据的向量类型,但如果使用它,则需要检查
self.len()
以进行错误处理,因此建议除非绝对需要,否则不要使用此类型。
1.0版本的目标
- 等待Rust中的SIMD稳定并合并此解决方案
- 收集有关API的反馈
长期目标
本库的长期愿景是允许将GNU Octave/MATLAB脚本中用于大数组/向量上的DSP操作相对容易地重写为Rust。Rust代码应比原始代码运行得更快。同时应提供一个C接口,以便其他编程语言也能使用此库。“相对容易地重写”意味着API不会像GNU Octave/MATLAB那样,从切换到这个库需要一定的学习曲线,但是所有必要的向量操作应以某种形式提供,定义应接近GNU Octave/MATLAB。由于GNU Octave/MATLAB工具箱具有相当具体的应用性,因此它们不包括在这个目标中,因此应该有一个自己的Rust库。已经存在用于矩阵操作的库,因此这个库的目标可能是支持大尺寸矩阵的矩阵操作,并与其他库很好地集成。因此,并非所有矩阵计算都将在这个库中实现。
这是一个非常雄心勃勃的目标,这个库可能无法实现这个目标。因此,非常欢迎贡献。
设计原则
主要设计目标是
- 利用Rust类型系统防止某些典型错误,例如防止调用在实数空间中的向量未定义的操作。
- 提供与其他可能不如Rust高效的编程语言的接口。
- 优化执行速度。
- 避免内存分配。这意味着用于优化某些操作性能的内存将在向量被丢弃/销毁之前不会释放。因此,建议在创建向量后重用它们,但在DSP处理链的输入数据大小改变时立即丢弃/销毁它们。
贡献
欢迎!
依赖项
约3-4.5MB
约77K SLoC