问题标签 [fft]

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 投票
4 回答
377 浏览

signal-processing - 计算快速傅里叶变换时..?

如果我们从具有两个通道的麦克风中获取声音,为了计算频谱,我们:

  • 计算所有数据输入的快速傅立叶变换?
  • 计算每个左右通道的快速傅立叶变换,然后对两者取平均值?
  • 计算每个左右通道的快速傅立叶变换并获得两者的最大值?
  • 以不同的方式计算?
0 投票
9 回答
176924 浏览

python - Python/SciPy 的寻峰算法

我可以通过查找一阶导数的过零或其他东西来自己编写一些东西,但这似乎是一个足够通用的函数,可以包含在标准库中。有人知道吗?

我的特定应用是二维数组,但通常它会用于在 FFT 等中查找峰值。

具体来说,在这类问题中,有多个强峰,然后是许多较小的“峰”,这些“峰”只是由噪声引起的,应该忽略。这些只是例子;不是我的实际数据:

一维峰:

带峰值的 FFT 输出

二维峰:

带圆圈峰值的氡变换输出

寻峰算法会找到这些峰值的位置(不仅仅是它们的值),并且理想情况下会找到真正的样本间峰值,而不仅仅是具有最大值的索引,可能使用二次插值或其他方法。

通常,您只关心几个强峰,因此选择它们要么是因为它们高于某个阈值,要么是因为它们是按幅度排序的有序列表的前n 个峰。

正如我所说,我知道如何自己写这样的东西。我只是想问一下是否有一个已知运行良好的预先存在的功能或包。

更新:

翻译了一个 MATLAB 脚本,它适用于一维案例,但可能会更好。

更新更新:

Sixtenbe为一维案例创建了一个更好的版本

0 投票
2 回答
611 浏览

algorithm - 关于 FFT 的说明

我知道以下推理有问题,但我不确定它是什么。

FFT:

  1. 给定两个多项式

    A = a_0 + a_1 x + a_2 x^2 + ... + a_n x^n

    B = b_0 + b_1 x + b_2 x^2 + ... + b_n x^n

    您可以计算产品的系数

    AB = \sum _k = 0 ^ 2n ( \sum _ j = 0 ^ k (a_j b_{k-j}))x^k

    O(n log n )及时。

  2. 所以给定两个向量(a_0, ..., a_n)(b_0, ..., b_n)我们可以及时计算向量(通过将向量v_i = \sum j = 0 ^ k ( a_j b_{k-j})嵌入O(n log n)零。)

  3. 鉴于上述情况,我们应该能够通过预处理其中一个向量来计算 和 的点积,然后按时间计算2.A =(a_0, ..., a_n)中的卷积。B =(b_0, ..., b_n)A.B = \sum_j=0 ^ n a_j b_jO(n log n)BB' = (b_n, b_{n-1}, ..., b_1, b_0)O(n log n)

如果上述推理是正确的,那么这意味着我们可以通过计算时间点乘积来实现两个nxn矩阵的时间矩阵乘法。O(n^2 log n )O(n log n)O(n)

然而,我们所知道的矩阵乘法的最佳运行时间大约是O(n^2.4)这样,所以这似乎不太可能是真的,这可能意味着步骤 1,2 或 3 是不正确的。

0 投票
2 回答
2817 浏览

python - 如何使用带有 portaudio 的 numpy 提取低音、中高音

如本例所示 ,如何从输入音频流中提取频率信息(使用 PortAudio)? 我对portaudio和numpy很好奇...

我对 fft 不是 100% 确定,我怎样才能通过 numpy 一个块并取回从 -1.0 到 1.0 的三个值来表示低音、中音和高音?

我不介意这只是针对一个频道,因为我可以理解其中的音频部分,当我看着它们时,这是在我面前游泳的数学:)

0 投票
4 回答
1945 浏览

matlab - 我的傅里叶变换中的奇怪伪影

我已经在 Matlab 中对时间序列波形执行了 fft(快速傅立叶变换),但实际上在傅立叶变换图中我似乎有一个奇怪的波,尽管这个波看起来像我希望看到的只有在时域。是否有任何编程原因导致这种情况发生?

0 投票
3 回答
1533 浏览

matlab - 我的傅里叶逆变换尖峰

我正在尝试比较 MATLAB 中的两个数据集。为此,我需要通过对数据进行傅里叶变换来过滤数据集,对其进行过滤,然后对其进行傅里叶逆变换。

当我对数据进行傅里叶逆变换时,我在红色数据集的任一端都得到了一个尖峰(图片显示了第一个尖峰),它在开始时应该接近于零,就像蓝线一样。我正在比较许多数据集,这只是偶尔发生。

我对这个现象有三个问题。首先,可能是什么原因造成的,其次,我该如何补救,第三,它是否会进一步影响时间序列中的数据,或者只是在时间序列的开头和结尾处,如图所示。

任何帮助都会非常感谢。

替代文字

0 投票
2 回答
2768 浏览

signal-processing - FFT结果的大小取决于波频率?

我对从 FFT 获得的结果感到困惑,希望能提供任何帮助。

我正在使用 FFTW 3.2.2,但与其他 FFT 实现(在 Java 中)得到了类似的结果。当我对正弦波进行 FFT 时,结果的缩放取决于波的频率 (Hz)——特别是它是否接近整数。当频率接近整数时,结果值的比例非常小,而当频率在整数之间时,结果值会大几个数量级。该图显示了 FFT 结果中尖峰的大小,对应于不同频率的波频率。这是正确的吗??

我检查了 FFT 的逆 FFT 等于原始正弦波乘以样本数,确实如此。FFT 的形状似乎也是正确的。

如果我正在分析单个正弦波,那也不会那么糟糕,因为无论其高度如何,我都可以在 FFT 中寻找尖峰。问题是我想分析正弦波的总和。如果我正在分析 440 Hz 和 523.25 Hz 的正弦波总和,那么只有 523.25 Hz 的尖峰出现。另一个的尖峰非常小,看起来就像噪音。必须有某种方法可以使这项工作发挥作用,因为在 Matlab 中它确实有效——我在两个频率上都得到了类似大小的尖峰。如何更改下面的代码以均衡不同频率的缩放?

0 投票
3 回答
4962 浏览

macos - OS X 环境中的音频文件 FFT

我希望在 OS X 上对线性 PCM 音频文件(可能有多个音频通道)执行 FFT。最好的方法是什么?

一些消息来源表明 Apple 的 Accelerate Framework 正是我所需要的。如果是这样,我应该如何提取并正确准备浮点数据以用于这些 FFT 函数?

0 投票
1 回答
1144 浏览

audio - 使用 Core Audio 从 AIFF 中提取浮点数

有没有办法在 OS X 上使用 Core Audio 将 AIFF 文件中的一组帧提取到适合执行 FFT 的 32 位浮点数组中?

0 投票
1 回答
23162 浏览

matlab - 如何在 MATLAB 中创建 FFT 图?

我有图表 y 轴的数据,我需要对数据执行 FFT 并绘制它。我对 MATLAB 没有太多经验,因此非常感谢任何帮助。