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");

生成的绘图如下所示。

Alt version

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)");

Alt version

窗口函数

该包支持所选窗口函数。

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" );

生成的绘图如下所示。

Alt version

Alt version

依赖关系

~3–6.5MB
~104K SLoC