3个版本
| 0.1.3 | 2019年5月22日 | 
|---|---|
| 0.1.1 | 2019年5月19日 | 
| 0.1.0 | 2019年5月19日 | 
#1513 in 数学
15KB
312 行
FFTS -- 南最快傅里叶变换
由 anthonix/ffts 分支
使用CMake构建
$  mkdir build && cd build
$  cmake .. && make && sudo make install
Rust绑定
Rust(目前仅限nightly版本)绑定ffts,使用bindgen。
组件
结构体
- FFTSPlan - 包装 ffts_sys::ffts_plan_t
- FFTSComplex - re: f32, im: f32,32位对齐,符合ffts要求
- FFTSResult - Result<T, FFTSError>
- FFTSError - 当 ffts_init_*返回null指针时
基本示例
use ffts::*;
let mut random_cmplex: Vec<FFTSComplex> = vec![
    FFTSComplex { re: -15.0, im: 3.0 },
    FFTSComplex { re: 32.0, im: 2.0 },
    FFTSComplex {
        re: -1337.0,
        im: 1.0,
    },
    FFTSComplex {
        re: 62.75,
        im: -1.0,
    },
];
let mut p_f = FFTSPlan::new_1d(4, FFTSDirection::Forward).unwrap();
let mut forward_vec = p_f.execute(&mut random_cmplex);
let mut p_b = FFTSPlan::new_1d(random_cmplex.len(), FFTSDirection::Backward).unwrap();
let backward_vec = p_b.execute(&mut forward_vec);
与C语言的比较
#include <ffts/ffts.h>
const float _Complex nums[4] = {-15.0 + 0.0I, 32.0 + 0.0I, -1337.0 + 0.0I, 62.75 + 0.0I};
float _Complex out1[4] = {0.0 + 0.0I, 0.0 + 0.0I, 0.0 + 0.0I, 0.0 + 0.0I};
float _Complex out2[4] = {0.0 + 0.0I, 0.0 + 0.0I, 0.0 + 0.0I, 0.0 + 0.0I};
ffts_plan_t *p = ffts_init_1d(4, FFTS_FORWARD);
ffts_execute(p, nums, out1);
ffts_plan_t *p2 = ffts_init_1d(4, FFTS_BACKWARD);
ffts_execute(p2, out1, out2);
ffts_free(p);
ffts_free(p2);
return 0;
依赖
~0–2.3MB
~45K SLoC