ffts-sys

Crates.ioffts-sys
lib.rsffts-sys
version0.1.3
sourcesrc
created_at2019-05-19 17:06:19.379508
updated_at2019-05-22 23:47:04.193277
descriptionRust binding for ffts (The Fastest Fourier Transform in the South)
homepage
repositoryhttps://github.com/sevagh/ffts
max_upload_size
id135290
size7,931
Sevag H (sevagh)

documentation

README

FFTS -- The Fastest Fourier Transform in the South

forked from anthonix/ffts

Build with CMake:

$  mkdir build && cd build
$  cmake .. && make && sudo make install

Rust bindings

license Crates.io docs

Rust (nightly only for now) bindings for ffts using bindgen.

Components:

  • ffts-sys - bindgen bindings for lffts
  • ffts-rs - idiomatic Rust API for ffts-sys

Structs:

  • FFTSPlan - wraps ffts_sys::ffts_plan_t
  • FFTSComplex - re: f32, im: f32, 32-bit aligned as per ffts requirements
  • FFTSResult - Result<T, FFTSError>
  • FFTSError - whenever ffts_init_* returns a nullptr

Basic example

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

Compared to 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;
Commit count: 802

cargo fmt