问题标签 [kissfft]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Kissfft - 逆实数 FFT 给出 NaN
真正的逆 FFT 给了我一个充满NaN而不是floats的数组。
complex_array是正常的,我猜的值没有错。
据我所知, conf也应该没问题。
尺寸有什么问题吗?我知道前向FFT 的输出大小必须是N/2 + 1并且上面的大小应该是N。
我已经用频域中的音频卷积和所有内容制作了一个简单的工作示例,但我不知道 这里发生了什么。
NaN 和上面的 complex_array 的一些样本。
我的示例中的size参数始终为18750。那就是样本的数量。N / 2 + 1 因此是7876。
首先,我有一个带有 450k 样本的单声道。然后我把它分成24个部分。现在每个部分都是 18750 个样本。对于这些样本中的每一个,我都在用脉冲响应进行卷积。所以基本上我在上面打印的数字是 for 循环正在进行的 24 轮中每一轮中的前 20 个样本。我猜这里没有错。
我什至在 Kiss_fftr_next_fast_size_real(size) 上做过,它保持不变,所以尺寸应该是最佳的。
这是我的卷积:
我在这里通过参数输入的大小是N/2 + 1。
signal-processing - 带或不带窗口的 KISS FFT 输出
我目前正在尝试使用吻 fft 将 fft 实现到 avr32 微控制器中以进行信号处理。我的输出有一个奇怪的问题。基本上,我将 ADC 样本(使用函数发生器测试)传递给 fft(实际输入,256 n 大小)并且检索到的输出对我来说很有意义。但是,如果我将汉明窗应用于 ADC 样本,然后将它们传递给 FFT,则峰值幅度的频率箱是错误的(并且与之前没有开窗的结果不同)。ADC 样本有 DC 偏移,因此我消除了偏移,但它仍然不适用于加窗样本。
下面是通过 rs485 的前几个输出值。第一列是没有窗口的 fft 输出,而第二列是有窗口的输出。从第 1 列开始,峰值位于第 6 行(6 x fs (10.5kHz) / 0.5N)给了我正确的输入频率结果,其中第 2 列在第 2 行(直流 bin 除外)有一个峰值幅度,这对我来说没有意义. 任何建议都会有所帮助。提前致谢。
signal-processing - 真正的 FFT 输出
我已经使用吻 fft 库将 fft 实现到 at32ucb 系列 ucontroller 中,目前正在努力处理 fft 的输出。我的目的是分析来自压电扬声器的声音。目前,发声器的频率为 420Hz,我成功地从 fft 输出(用示波器交叉检查)得到。但是,如果我将函数发生器波形放入系统,则输出频率仅为预期的一半。我怀疑是我弄错了频率仓计算公式;当前使用,fft_peak_magnitude_index*采样频率/fft_size。我的输入是真实的,并且是真实的 fft。(输出样本 = N/2)并且还在 fft 之前进行 iir 过滤和加窗。任何建议都会有很大帮助!
audio - 向 KissFFT 提供大量样本
我想找到持续时间为 10 秒、采样率为 44100 Hz 的音频信号的 4096 点 DFT。因此有 441000 个输入样本。但是 KissFFT 最多只需要 4096 作为输入大小。如何找到如此大信号的FFT?
fft - KissFFT 与 DSPIC - 舍入误差
试图让 KissFFT 定点实现与 DSPIC 保持一致。问题是 Kiss 中的定点实现是真正的定点,但 dspic 在 40 位寄存器中进行乘法和求和,然后在舍入后向下移动到 16 位。KissFFT 可以是 16/32 位定点或浮点。到目前为止,浮点数是最接近的匹配,但我需要它们准确。我不确定在 ASM 代码中每个频率 bin 更新了多少次,但正如您所见,每次更新 bin 时,累加器结果都会移位和舍入。我没有足够的 FFT 知识来解决这个问题。如果有人能指出我正确的方向,将不胜感激。
这是 ASM 代码:
c++ - 如何正确使用带有 C++ 向量的 KissFFT?
我想在 C++ 项目中使用 KissFFTstd::vector
来轻松处理任意长度的信号。为了实现这一点,我编辑了kissFFT作者的这个SO答案。我换了
std::complex<float> x[nfft];
和
vector<std::complex<float>> x(nfft, 0.0);
并替换了函数调用
kiss_fft(fwd,(kiss_fft_cpx*)x,(kiss_fft_cpx*)fx)
和
kiss_fft(fwd,(kiss_fft_cpx*)&x[0],(kiss_fft_cpx*)&fx[0]);
这似乎工作得很好,但这是正确的方法吗?在kissFFT的“test”文件夹中,我找到了“testcpp.cc”,它似乎使用了一些花哨的C++模板功能(不幸的是,对我来说太花哨了;我无法编译它)。我的解决方案有什么缺点吗?
完整代码
c - 为什么kiss_fft的正反radix-4计算不同?
我一直在花时间理解和实现我自己的混合基数抽取时间快速傅立叶变换。我主要使用 Kiss_fft 和http://www.briangough.com/fftalgorithms.pdf来了解正在发生的事情。
根据我的阅读,我可以通过使用共轭旋转因子来反转 fft。
然而,当我阅读 Kiss_fft 源代码时,radix-4 实现实际上测试了我们是在进行正向变换还是逆变换,并且使用了稍微不同的数学。
https://github.com/itdaniher/kissfft/blob/master/kiss_fft.c#L77
我认为前向和反向 fft 使用的 fft 计算是相同的(就像 Kiss_fft 的 radix-2、3 和 5 实现一样)。
为什么kiss_fft radix-4计算需要做这个?
c - 在波形文件上使用 KissFFT
我正在尝试使用带有这个 11 秒 44kHz .wav 样本文件的KissFFT 库作为测试输入。
但是,当我处理窗口大小为 512 的文件时,我只得到 1 个输出值。这很奇怪,44kHz 的 11 秒 .wav 文件不应该给出 1 个值作为窗口大小为 512 的输出。像 16 这样的较小窗口会给我 5 个值,这仍然是一个低计数。
有谁知道我做错了什么?
这是我的代码:
这是我得到的输出:
这是更新的代码版本,但我在编译时遇到错误:
我按照这篇文章的步骤操作:
Visual Studio 2010 中的“错误 LNK2019:无法解析的外部符号”错误
我仍然得到这些错误:
c++ - 我将如何编译 Kiss_fft 以使用双数据类型 C++?
我正在寻找编译 KISS_FFT (保持简单愚蠢),以便它可以接受一个双精度数组作为输入并输出一个双精度数组。
KISS_FFT 是一个库,它对一组数据进行快速傅立叶变换并输出结果。默认情况下,它看起来像使用浮点数据类型。
c - Tiva C FFT 库
我正在进行一个新的嵌入式系统项目,该项目分析输入频率并获取频率系数并根据此信息生成一些信息。
我将使用 Tiva C TM4C 微控制器,我进行了大量搜索以找到任何兼容的 C 语言 FFT 库,但我失败了。
我实际上找到了一些通用库,如 FFTW 和 KissFFT,但我没有使用它们,因为我认为它们非常复杂,无法找到代码示例甚至用户手册左右。
那么谁能帮我找到我正在寻找的好图书馆?甚至是 FFTW/KissFFT 库的使用手册?