1个不稳定版本
0.1.0 | 2020年12月27日 |
---|
#45 in #real
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