oxifft 0.1.3

Pure Rust implementation of FFTW - the Fastest Fourier Transform in the West
Documentation

oxifft (Main Library Crate)

The core OxiFFT library providing pure Rust FFT implementations.

Overview

This is the main library crate of the OxiFFT project. It provides:

  • Complex DFT (Discrete Fourier Transform)
  • Real FFT (R2C/C2R transforms)
  • DCT/DST (Discrete Cosine/Sine Transforms)
  • Multi-dimensional transforms
  • Batch processing
  • SIMD optimization
  • Threading support
  • Wisdom system for plan caching

Module Structure

src/
├── lib.rs              # Public API exports
├── api/                # User-facing API
│   ├── plan.rs         # Plan creation (fftw_plan_* equivalents)
│   ├── execute.rs      # Execution functions
│   ├── wisdom.rs       # Wisdom import/export
│   ├── memory.rs       # Aligned allocation
│   └── types.rs        # Direction, Flags, R2rKind
│
├── kernel/             # Core infrastructure
│   ├── float.rs        # Float trait (f32/f64)
│   ├── complex.rs      # Complex<T> type
│   ├── tensor.rs       # IoDim, Tensor
│   ├── problem.rs      # Problem trait
│   ├── plan.rs         # Plan trait
│   ├── solver.rs       # Solver trait
│   ├── planner.rs      # Main planner
│   ├── twiddle.rs      # Twiddle factor cache
│   ├── primes.rs       # Prime utilities
│   └── ...
│
├── dft/                # Complex DFT
│   ├── problem.rs      # DftProblem
│   ├── plan.rs         # DftPlan
│   ├── solvers/        # Algorithm implementations
│   │   ├── ct.rs       # Cooley-Tukey
│   │   ├── rader.rs    # Rader's algorithm
│   │   ├── bluestein.rs # Bluestein/Chirp-Z
│   │   └── ...
│   └── codelets/       # Optimized kernels
│
├── rdft/               # Real DFT
│   ├── problem.rs      # RdftProblem
│   ├── plan.rs         # RdftPlan
│   └── solvers/        # R2C, C2R, etc.
│
├── reodft/             # DCT/DST
│   ├── redft.rs        # DCT variants
│   ├── rodft.rs        # DST variants
│   └── dht.rs          # Discrete Hartley
│
├── simd/               # SIMD abstraction
│   ├── traits.rs       # SimdVector trait
│   ├── detect.rs       # Runtime detection
│   ├── scalar.rs       # Fallback
│   ├── sse2.rs         # x86_64 SSE2
│   ├── avx.rs          # x86_64 AVX
│   └── neon.rs         # ARM NEON
│
├── threading/          # Parallel execution
│   ├── spawn.rs        # ThreadPool trait
│   ├── serial.rs       # Single-threaded
│   └── rayon_impl.rs   # Rayon integration
│
└── support/            # Utilities
    ├── align.rs        # Memory alignment
    ├── copy.rs         # Optimized copies
    └── transpose.rs    # Matrix transpose

FFTW API Compatibility

This crate aims for high API compatibility with FFTW. Key mappings:

FFTW Function OxiFFT Equivalent
fftw_plan_dft_1d Plan::dft_1d()
fftw_plan_dft_2d Plan2D::new()
fftw_plan_dft_3d Plan3D::new()
fftw_plan_dft_r2c RealPlan::r2c_1d()
fftw_plan_dft_c2r RealPlan::c2r_1d()
fftw_plan_guru_dft GuruPlan::dft()
fftw_execute plan.execute()
fftw_export_wisdom_to_string wisdom::export_to_string()
FFTW_MEASURE Flags::MEASURE
FFTW_FORWARD Direction::Forward

Usage

use oxifft::{Complex, Direction, Flags, Plan, Plan2D, RealPlan};

// Create a 256-point forward FFT plan
let plan = Plan::dft_1d(256, Direction::Forward, Flags::MEASURE).unwrap();

// Prepare input/output buffers
let input = vec![Complex::new(0.0, 0.0); 256];
let mut output = vec![Complex::zero(); 256];

// Execute
plan.execute(&input, &mut output);

// 2D FFT
let plan_2d = Plan2D::new(64, 64, Direction::Forward, Flags::ESTIMATE).unwrap();

// Real-to-Complex FFT
let plan_r2c = RealPlan::r2c_1d(256, Flags::MEASURE).unwrap();
let real_input = vec![0.0f64; 256];
let mut complex_output = vec![Complex::zero(); 129]; // n/2 + 1
plan_r2c.execute_r2c(&real_input, &mut complex_output);

Features

  • std (default): Enable standard library features
  • threading (default): Enable Rayon-based parallelism
  • simd: Enable explicit SIMD optimizations

License

Same as the parent OxiFFT project.