17个版本
0.10.2 | 2024年5月24日 |
---|---|
0.10.0 | 2022年10月7日 |
0.9.3 | 2021年6月16日 |
0.9.2 | 2021年1月11日 |
0.4.1 | 2016年11月20日 |
#576 in 数学
在 basic_dsp 中使用
770KB
18K 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-5MB
~80K SLoC