#信号处理 #DSP #插值 #卷积 #向量

no-std basic_dsp_vector

基于时间或频率域中的实数或复数向量的数字信号处理

26次发布

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.4.1 2016年11月20日

#234 in 数学


3 个包 中使用

MIT/Apache

655KB
16K SLoC

basic_dsp

CI Crates.io Crates.io Docs.rs minimum rustc 1.67

基于时间或频率域中的实数或复数向量的数字信号处理。向量包含基本算术、卷积、傅里叶变换和插值操作。

文档

示例

变更日志

⚠ 没有活跃的维护 ⚠

这个库过去几年主要由一个人开发和维护。这已经不可持续了,我缺乏时间和精力继续这样做。因此,我将很少回应问题,也不会开发更多的补丁。请随意继续使用这个库,如果您发现问题,请继续提交问题。可能有一天,有人会接管这个项目 ☺️。

用法

将此添加到您的 Cargo.toml

[dependencies]
basic_dsp = "*"

并将此添加到您的crate根目录

extern crate basic_dsp;

另请参阅 高级构建选项

向量类型

此crate带来了不同类型的向量。

  1. 单精度 (f32) 或双精度 (f64) 浮点数。这可以用来在精度和性能之间进行权衡。如果您不确定,那么从双精度浮点数开始可能更好。
  2. 向量通过Rust的类型系统跟踪向量内部关于域(时间/频率)和数值空间(实数/复数)的元数据,从而防止某些错误。还有一个跟踪运行时元数据的向量类型可用,但如果使用它,则需要检查 self.len() 以进行错误处理,因此建议除非绝对必要,否则不要使用此类型。

1.0版本的目标

  1. 等待Rust中的SIMD稳定并整合此解决方案
  2. 收集有关API的反馈

长期目标

本库的长期愿景是允许将GNU Octave/MATLAB脚本中用于大型数组/向量的DSP操作相对容易地重写为Rust。然后,Rust代码应该比原始代码运行得更快。同时,应该提供C接口,以便其他编程语言也能使用这个库。"相对容易地重写"意味着API不会看起来像GNU Octave/MATLAB,并且从切换到这个库会涉及到一定的学习曲线。然而,应该以某种形式提供所有必要的向量操作,定义应接近GNU Octave/MATLAB。由于GNU Octave/MATLAB工具箱较为特定于应用,因此应为其创建单独的Rust库。已经存在用于矩阵操作的库,因此本库的目标可能是支持大型矩阵的矩阵操作,并且与其他库良好集成。因此,并非所有的矩阵计算都会在这个库中实现。

这是一个非常雄心勃勃的目标,这个库可能无法达到。因此,欢迎贡献力量。

设计原则

主要的设计目标是

  1. 利用Rust类型系统防止一些典型错误,例如防止调用未为实数空间中的向量定义的操作。
  2. 提供与其他编程语言的接口,这些语言可能不如Rust性能强大。
  3. 优化执行速度。
  4. 避免内存分配。这意味着用于优化某些操作所使用的内存将不会在向量被丢弃/销毁之前释放。因此,建议一旦创建了向量就重复使用它们,但一旦DSP处理链中的输入数据大小发生变化,就丢弃/销毁它们。

贡献

欢迎!

依赖项

~3–5.5MB
~86K SLoC