6 个版本
0.3.1 | 2022年5月9日 |
---|---|
0.3.0 | 2022年5月1日 |
0.2.0 | 2022年4月27日 |
0.1.2 | 2022年4月25日 |
#775 in 音频
1MB
1K SLoC
NDSP
Norsk Datateknikk 为 Rust 开发的 No-STD DSP 库。
模块的目的是构建一个 DSP 代码库。目前不专注于计算速度。第一个目标是实现基本功能以简化编写。
目标是编写一个针对嵌入式平台的库。
它使用 mixed-num 库,以允许在固定点和浮点大小及精度方面具有灵活性。
包。
文档。
发布说明位于 RELEASES.md 中。
测试库(开发目的)
cargo test --features "std"
lib.rs
:
这是一个 Rust 中 DSP 的实验性库,包括无-std 环境。
它使用 mixed_num
库中的 trait 实现,以启用固定点和浮点支持。
该库中的大部分功能都是无-std 的,但需要 alloc。
可以使用 STD 功能来解锁绘图功能,例如用于测试目的。
示例
use ndsp::*;
let signalf32 = Vec::lin_range(0f32, 9f32, 10);
let signalf64 = Vec::lin_range(2f64, 11f64, 10);
let result = signalf32.clone()*signalf64;
assert_eq!(result.to_string(), "[ 0, 3, 8, 15, 24, 35, 48, 63, 80, 99 ]" );
let signal1f32 = Vec::lin_range(2f64, 11f64, 10);
let result = signalf32*signal1f32;
assert_eq!(result.to_string(), "[ 0, 3, 8, 15, 24, 35, 48, 63, 80, 99 ]" );
此实现同时支持复数。
示例
use ndsp::*;
use mixed_num::*;
let omega = <f32>::mixed_pi()/f32::mixed_from_num(8i32);
let theta = 0f32;
let mut signal = Vec::osc(omega, theta, 4);
signal = &signal*&signal;
assert_eq!(signal.to_string(), "[ 1+0i, 0.7071067+0.7071068i, 0+0.99999994i, -0.7071067+0.7071068i ]" );
signal /= 2f32;
assert_eq!(signal.to_string(), "[ 0.25-0.25i, 0.35355338+0.000000029802322i, 0.24999999+0.24999999i, 0.000000029802322+0.35355338i ]" )
绘图
该包包含简化数据绘图的实用函数。
绘图示例
use ndsp::*;
let test_vec = Vec::lin_range(0f32, 1f32, 64);
test_vec.simple_plot("./figures/plot_test.png", "Test Plot");
生成的绘图如下所示。
use ndsp::*;
use mixed_num::*;
let x_vec = Vec::lin_range(0f32, f32::mixed_tau(), 64);
let mut y_vec = x_vec.clone();
y_vec.cos();
x_vec.plot(&y_vec, "./figures/lib_plot_x_y.png", "Cosine", "x", "cos(x)");
窗口函数
该包支持所选窗口函数。
use ndsp::*;
use mixed_num::Cartesian;
let mut vec = Vec::<f32>::bartlett(256);
vec.simple_plot("./figures/bartlett_test_lib.png", "Bartlett Window Function");
let c_vec = Vec::<Cartesian<f32>>::new_from_real(vec);
c_vec.plot_psd( 1f32, -110f32, "./figures/bartlett_psd_test_lib.png", "Bartlett Window Function" );
生成的绘图如下所示。
依赖关系
~3–6.5MB
~104K SLoC