22个版本 (稳定版)

6.2.0 2024年1月22日
6.1.0 2022年11月8日
6.0.1 2021年5月10日
5.1.1 2021年5月10日
0.0.2 2015年3月17日

#8算法

Download history 25682/week @ 2024-04-25 24408/week @ 2024-05-02 20818/week @ 2024-05-09 23212/week @ 2024-05-16 22242/week @ 2024-05-23 24210/week @ 2024-05-30 23680/week @ 2024-06-06 26340/week @ 2024-06-13 28878/week @ 2024-06-20 23513/week @ 2024-06-27 28051/week @ 2024-07-04 25845/week @ 2024-07-11 28904/week @ 2024-07-18 28272/week @ 2024-07-25 27390/week @ 2024-08-01 27610/week @ 2024-08-08

每月下载量116,574
用于 299 个crate(123个直接使用)

MIT/Apache

2.5MB
49K SLoC

RustFFT

CI minimum rustc 1.61

RustFFT是一个纯Rust编写的、SIMD加速的高性能FFT库。它可以在O(nlogn)时间内计算任何大小的FFT,包括素数大小的FFT。

使用方法

// Perform a forward FFT of size 1234
use rustfft::{FftPlanner, num_complex::Complex};

let mut planner = FftPlanner::<f32>::new();
let fft = planner.plan_fft_forward(1234);

let mut buffer = vec![Complex{ re: 0.0, im: 0.0 }; 1234];

fft.process(&mut buffer);

SIMD加速

x86_64目标

RustFFT支持AVX指令集以提升性能。无需特殊代码即可启用AVX:只需在一个支持avxfma CPU特性的机器上使用FftPlanner规划FFT,RustFFT将自动切换到更快的AVX加速算法。

对于没有AVX的机器,RustFFT也支持SSE4.1指令集。与AVX类似,使用FftPlanner时将自动启用SSE4.1。如果同时启用了AVX和SSE4.1支持,规划器将自动选择最快的可用指令集。

AArch64目标

RustFFT支持64位Arm,AArch64中的NEON指令集。与AVX和SSE类似,无需特殊代码即可激活NEON加速代码路径:只需在AArch64目标上使用FftPlanner规划FFT,RustFFT将自动切换到更快的NEON加速算法。

WebAssembly目标

RustFFT支持WebAssembly的固定宽度SIMD扩展。与AVX、SSE和NEON一样,无需特殊代码即可利用此代码路径:只需使用FftPlanner规划FFT。

注意:编译WASM SIMD加速代码时有一个重要的限制:与AVX、SSE和NEON不同,WASM不允许动态特性检测。因此,RustFFT无法检测CPU特性并自动切换到WASM SIMD加速算法。相反,如果启用了wasm_simd crate特性,它将无条件地使用SIMD代码路径。有关此限制的更多信息,请参阅官方Rust文档

特性标志

x86_64目标

默认情况下启用了 avxsse 功能。在 x86_64 上,这些功能可以启用 AVX 和 SSE 加速代码的编译。

禁用它们可以减少编译时间和二进制文件大小。

在其他平台(非 x86_64)上,这些功能不起作用,RustFFT 将表现得好像它们没有被设置。

AArch64目标

默认启用了 neon 功能。在 AArch64 上,此功能可以启用 Neon 加速代码的编译。

禁用它可以减少编译时间和二进制文件大小。

在其他平台(非 AArch64)上,此功能不起作用,RustFFT 将表现得好像它没有被设置。

WebAssembly目标

功能 wasm_simd 默认是禁用的。在 WASM 平台上,此功能可以启用 WASM SIMD 加速代码的编译。

要执行使用 wasm_simd 编译的二进制文件,您需要一个支持 fixed-width SIMD 的目标浏览器或运行时。如果您在不受支持的平台上运行 SIMD 加速代码,WebAssembly 将指定一个陷阱,导致立即执行取消。

在其他平台(非 WASM)上,此功能不起作用,RustFFT 将表现得好像它没有被设置。

稳定性/未来破坏性变更

最新版本是 6.2 - 5.0 版本于 2022 年初发布,包含从先前版本中删除的几个破坏性 API 变更。对于使用 RustFFT 非常旧版本的用户,请查看升级指南,了解 RustFFT 5.0 需要升级的更改。为了稳定起见,我们承诺在未来 3 年内(即直到 2024 年)不再进行破坏性更改。

此政策有一个例外:我们目前重新导出 num-complexnum-traits 的预 1.0 版本。为了避免生态系统碎片化,我们将继续跟踪这些包,即使这需要主要版本的增加。当这些包发布新的主要版本时,我们将尽快升级,这将需要我们自己的主要版本更改。在这些情况下,num-complex/num-traits 的版本增加将是发布中的唯一破坏性更改。

支持的 Rust 版本

RustFFT 需要 rustc 1.61 或更高版本。RustFFT 的次要版本可能会将 MSRV(最低支持 Rust 版本)升级到 rustc 的新版本。但是,如果我们需要提高 MSRV,新的 Rust 版本必须至少在六个月前发布。

许可

根据您的选择,受以下任一许可协议的许可

贡献

除非您明确声明,否则任何旨在包含在您的工作中的贡献,根据 Apache-2.0 许可证定义,均应按上述方式双许可,没有任何附加条款或条件。

在提交 PR 之前,请确保运行 cargo fmt

依赖关系