-1

我正在尝试实现吻 FFT 实际计算。

我相信每个人都知道我不是第一个在这里询问kiss FFT的人,也不是专门询问kiss_fftr的人。我对 FFT 相当陌生,但已经掌握了大部分基础知识,现在正尝试在 ATxmega192A3 的音频分析仪中实现它。

这是我复制和修改的基本代码,试图将 512 个 8 位 ADC 样本输入 FFT 以获得 256 个输出频率箱。

int size = 512;
int isinverse = 1;
kiss_fft_scalar zero;
memset(&zero,0,sizeof(zero));
kiss_fft_cpx fft_in[size];
kiss_fft_cpx fft_out[size];

kiss_fftr_cfg fft = kiss_fftr_alloc(size*2,0,0,0);

//load 512 samples from ADC into fft_in[].r and zero out fft_in[].i, fft_out[].i, and fft_out[].r

kiss_fftr(fft, (kiss_fft_scalar*) fft_in, fft_out);

以下是我的问题:

  1. 出垃圾箱中是否有任何重叠?意思是如果我正在查看.. 说 12Hz 输出箱是否仅显示 12Hz 而不是部分在 12.1Hz 中舍入(我知道音频不是那么精确,所以会有残留的物理效应导致干扰)?

  2. 我很难弄清楚如何使用 Kiss_fftr_cfg。我不确定所有选项都标记在哪里,只要将其与 8 位整数(或 16 位)一起使用,但这是否意味着我的所有输入样本都需要为 16 位?之前代码中的所有内容,包括cfg 的声明除了他所做的前两个 int 声明之外我不理解,并且不确定他为什么使用 memset 而不是允许kiss_fftr 分配空间。我在哪里可以找到更多信息??我已经浏览了大部分包含带有kiss_fft的文件,并且似乎没有找到太多有用的信息来挖掘代码,花费数小时和数小时。

4

1 回答 1

1

FFT 输出 bin 的带宽约为 2*Fs/N(FFT 长度上的采样率),但会衰减或转换为 Sinc 形函数。因此,所有 FFT 结果 bin 与除了 bin 中心之外的所有其他 bin 重叠。

使用 Kiss FFT 需要了解 C 数据类型以及哪些自动转换有效或无效。

于 2015-05-03T10:36:04.393 回答