问题标签 [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.

0 投票
1 回答
1319 浏览

android - 如何从 android 上的实时 FFT 获得最准确的音频数据?

所以我正在尝试构建一个 android 应用程序,它充当实时音频分析器,作为一个项目的前身,该项目将涉及检测和过滤某些声音。

所以我认为我已经掌握了离散傅立叶变换的基础知识,但是我不确定进行实时频率分析的最佳参数应该是什么。

我的印象是,在理想情况下(无限计算能力),我将从 AudioRecord 类获得的 44100 样本/秒 PCM 流中获取所有样本,并将它们放入 44100 元素 fifo“窗口”(填充到2**16 带有 0 并且可能是锥形函数?),每次有新样本进入时在窗口上运行 FFT。这(我认为)会给我 0 - ~22 KHz 的频谱,每秒更新 44100 次.

这似乎不会在智能手机上发生。问题是,我不确定我应该减少哪些计算参数以使其在我的 Galaxy Nexus 上易于处理,同时仍尽可能保持质量。最终我想使用灵敏度更高的外接麦克风。

我认为这将涉及在进行 FFT 之间移动窗口不止一个样本,但我不知道在什么时候这会比仅在较小的窗口上进行 FFT 或如果有第三个选项我忽略了。

使用我从 libgdx 使用的本机实现的 KissFFT,我似乎能够在每 44100 个样本中执行 30-42 个 44100 个元素 FFT 并且仍然具有响应性(这意味着缓冲区从执行 AudioRecord.read 的线程中填充() 的填充速度不会比执行 fft 的线程消耗它的速度快)。

所以我的问题是:

  1. 我目前获得的表现会是我将获得的最好的吗?或者看起来我一定是个愚蠢的人,因为可以实现更快的速度?
  2. 我的方法至少从根本上是正确的,还是我完全是在错误的树上吠叫?

如果这有助于回答我的问题,我很乐意展示我的任何代码,但其中有很多,所以我想我会选择性地这样做,而不是全部发布。

0 投票
1 回答
1421 浏览

opencv - FFTW fftwf_plan_r2r_2d() 与 FFTW_REDFT01 等效

我正在尝试移植使用 FFTW 的代码以使用 KissFFT。
代码使用fftwf_plan_r2r_2d()withFFTW_REDFT01

KissFFT 中的等效调用是什么?

如果这个调用 (with FFTW_REDFT01) 等效于 DCT,我可以只使用直接 DCT 变换,例如OpenCVcv::dct吗?
是否需要进行一些输入数据修改,例如反射和对称化?

0 投票
1 回答
453 浏览

c++ - 如何从 Tizen 上的实时 FFT 获得最准确的音频数据?

目前我正在研究 Tizen IDE。

我已经从麦克风读取了输入数据并对其应用了 FFT……但每次我得到 nan 输出。

这是我的代码..

应用 FFT..

0 投票
2 回答
317 浏览

c++ - 我如何转换 std::vector& samples2 变成 Kiss_fft_scalar* 样本?

目前我在输入数据上接吻 FFT ..

我在 std::vector& samples2 中有输入数据,我想将其转换为 KissFFT 所需的格式。

我正在使用以下代码来转换它,,

但最后我得到了差异值,请帮助..

这是我的代码

请帮忙

0 投票
2 回答
2148 浏览

c++ - 如何使用 KissFFT 计算峰值?

我想在真实的音频设备上应用 FFT 并从中计算峰值

这是我的代码..

现在我使用代码计算选择。但每次它返回 0

在这里我总是得到峰值= 0。请帮忙

这是前 25 个 FFT 样本的频谱输出:

0 投票
1 回答
582 浏览

c++ - 反转 FFT 时无法获得准确的数据

好的,我要实现的目标很简单。对一些随机数据应用 FFT,然后在输出上应用反向算法以取回输入。我正在kissFFT为此使用图书馆。

代码:

输出:

调试。如果你走到底部,你会看到有 317 个不匹配。我还输出值之间的差异,即(in[].r - rec[].r)(in[].i - rec[].i)

接下来我要展示的是输入数据,其中白点代表实部,红点代表虚部。

在此处输入图像描述

这是用紫色表示的 FFT 的输出数据以及用白色和红色表示的重建数据。

在此处输入图像描述

在此处输入图像描述

注意到细微的差别了吗?我猜这与浮点精度有关。我怎样才能克服这个问题来获得与我使用 FFT 完全相同的输入数据?

编辑:

我注意到在我的情况下,范围关闭错误类似于 ]0 , 0.002]。因此,作为一种解决方法,我对重建的数据进行了四舍五入,并得到了一个很好的结果。但是...这仅在我的数字的小数部分为 0.0 时才有效。

0 投票
1 回答
430 浏览

c - 有谁知道我如何用 Kiss-fft API 替换 fftw 中的这些 API?

有谁知道我如何用 Kiss-fft API 替换 fftw 中的这些 API?

0 投票
1 回答
3988 浏览

c++ - 如何在 Visual Studio 2010 中使用 Kiss fft

我从这里下载了kiss fft 。但我真的不知道如何在Visual Studio中使用它。例如,我在 Visual Studio 中创建了一个空的 win32 项目后,我应该如何复制粘贴 zip 文件中的文件并更改配置文件中的命令,以便我可以使用 Kiss fft 库中的所有功能?

谢谢你的协助!

0 投票
1 回答
301 浏览

fft - 我如何在 Kiss FFT 中定义计划并执行它

您在下面看到任何错误吗?

是否等于:?

cfg = fftw_plan_dft_c2r_1d(dim, in, out, FFTW_ESTIMATE);
fftw_execute(cfg);

0 投票
1 回答
213 浏览

gcc - Kissfftr 不同的结果 x86 - Atheros AR9331

这是我关于stackoverflow的第一个问题,不幸的是我的英语很差。但我想试试。

Kissfft 的 twotonetest 的定制例程带来了两个不同的系统非常不同的结果。

在 x86 程序上用 gcc 翻译的 ubuntu 下会带来正确的值。使用为 Arduino YUN (Atheros AR9331) 程序翻译的 openWRT SDK 显示不正确的值​​​。似乎因为 FIXED_POINT 的定义被忽略了。

定义为:

功能:

使用来自同一文件的 16 位声音的输入样本。结果不同,例如从-3dB 到-15dB。A您可以从哪里开始进行故障排除?