1个不稳定版本

0.1.0 2020年12月27日

#45 in #real

MIT许可证

17KB
212

定点快速傅里叶变换

这个"无std"包旨在与没有FPU且能更快执行定点FFT的核心一起使用。FFT代码使用带符号的16位数字格式,该格式解释为Q15格式(即一个符号位,15个分数位)。

假设目标架构上可用Count Leading Zeros (CLZ)指令,并且leading_zeros()使用此指令。

此代码受fix_fft.c的启发,这是一个用C编写的非常简单的定点FFT函数。想法是提供一个简单、直接且与目标无关的FFT实现。

复数输入数据的示例

use fixed_fft::{fft_radix2_q15, Direction};
use num_complex::Complex;

fn main() {
    let mut samples = [Complex::new(1000, 0); 8];

    println!("input data: {:?}", samples);
    fft_radix2_q15(&mut samples, Direction::Forward).unwrap();
    println!("output data: {:?}", samples);
}

实数输入数据的示例

use fixed_fft::fft_radix2_real_q15;
use num_complex::Complex;

fn main() {
    let mut samples = [1000; 8];
    let mut result = [Complex::new(0, 0); 5];

    println!("input data: {:?}", samples);
    fft_radix2_real_q15(&mut samples, &mut result, false).unwrap();
    println!("output data: {:?}", result);
}

依赖项

~275KB