如何将真实的kiss_fft用于音频分析仪?

Posted

技术标签:

【中文标题】如何将真实的kiss_fft用于音频分析仪?【英文标题】:How to use real kiss_fft for audio analyzer? 【发布时间】:2015-05-02 23:06:40 【问题描述】:

我正在尝试实现kiss 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);

这是我的问题:

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

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

【问题讨论】:

请阅读帮助->导览,尤其是关于“no chit-chat”的部分 【参考方案1】:

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

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

【讨论】:

嗯,所以问题“1)”的答案是“是的,存在重叠”。谢谢!我知道 C 能够自动转换我假设您所指的变量类型。处理浮点比说.. 无符号整数需要更长的时间,这通常会对 MCU CPU 周期产生很大影响。如果可能的话,我希望使用整数代替默认浮点,但在配置选项的任何地方都找不到详细的文档!

以上是关于如何将真实的kiss_fft用于音频分析仪?的主要内容,如果未能解决你的问题,请参考以下文章

用于查找歌曲音高的音频分析器

在将数据输入 FFT 用于音频频谱分析仪之前,使用 python 将 wav 文件转换为 csv 文件 [关闭]

如何分析没有真实标签的聚类的完整性?

分析音频文件java

用于检测人声、性别、年龄和情感的音频分析——之前是不是做过任何开源工作?

webrtc 上用于远程流的网络音频分析器