#信号处理 #数字信号处理 #矩阵向量 #矩阵 #矩阵运算 #DSP #插值

无需std basic_dsp_matrix

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

19个版本

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日

算法 中排名第181

Download history 1/week @ 2024-04-22 214/week @ 2024-05-20 1/week @ 2024-05-27 5/week @ 2024-06-03 5/week @ 2024-06-10 54/week @ 2024-07-01 79/week @ 2024-07-29

每月下载79
basic_dsp 中使用

MIT/Apache

765KB
18K 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-5MB
~80K SLoC