问题标签 [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 投票
12 回答
61335 浏览

audio - 实时音高检测

我正在尝试对用户唱歌进行实时音高检测,但遇到了很多问题。我尝试了很多方法,包括 FFT(FFT 问题(返回随机结果))和自相关(自相关音高检测返回带有麦克风输入的随机结果),但我似乎无法获得任何方法来给出好的结果。谁能建议一种实时音高跟踪的方法或如何改进我已有的方法?我似乎找不到任何用于实时音高检测的好的 C/C++ 方法。

谢谢,

尼尔。

编辑:请注意,我检查了麦克风输入数据是否正确,并且当使用正弦波时,结果或多或少是正确的音高。

编辑:对不起,这已经晚了,但目前,我通过从结果数组和每个索引中取出值来可视化自动收集,并在 X 轴上绘制索引和 Y 轴上的值(两者都除以100000 或其他东西,我使用 OpenGL),将数据插入 VST 主机并使用 VST 插件对我来说不是一个选项。目前,它看起来就像一些随机的点。我做得对吗,或者你能不能指点我一些代码来做这件事,或者帮助我理解如何可视化原始音频数据和自相关数据。

0 投票
2 回答
5011 浏览

image-processing - 如何将两个不同尺寸图像的光谱相乘?

这不是一个“编程”问题。但我确信这是在这个社区中广为人知和理解的东西。

我有一个图像 x 和一个小得多的图像 y,我需要通过乘以它们的 FFT 来对两者进行卷积。但由于它们的大小不同,我不知道如何进行频域乘法。

我采用 x 的(二维)FFT(它是一个维度为 4096 x 4096 的整数矩阵),它给出了频域表示 X(它是一个复数矩阵,我认为它的维度是 2048 x 2048 )。

同样,我采用(y 的二维 FFT(它是一个 64 x 64 维的整数矩阵),它给出了频域表示 Y(它也是一个复数矩阵,我认为它的维数是 32 × 32)。

我在 Numerical Recipes 中使用了fourn 函数,所以我的输入矩阵 x 和 y 必须折叠成一维数组,这些数组被它们的离散傅里叶变换 X 和 Y 所取代。关键是即使这是一个图像的二维问题,我正在处理一维数组。

如果我试图对两个尺寸完全相同的图像 x 和 y 进行卷积。这一切都非常简单:

但是如果 X 和 Y 的长度不同,我该如何做乘法呢?

一种可能性是将 y 填充为与 x 具有相同的尺寸。但这似乎非常低效。另一种可能性是填充 Y 使其具有与 X 相同的尺寸。但我不知道这在频率空间中意味着什么。

这是问这个问题的另一种方式:如果我想使用 FFT 对两个尺寸非常不同的图像进行卷积,以便可以对其光谱进行乘法(频域表示),我该如何进行乘法运算?

谢谢,

〜迈克尔。

0 投票
5 回答
5783 浏览

iphone - iPhone:做 DSP/傅立叶变换/频域的 CPU 能力?

我想持续分析 MIC 音频(不仅仅是剪辑或预先录制的样本),并显示频率图并过滤掉音频的某些方面。iPhone 是否足够强大?鉴于谷歌和 iPhone 语音识别、Shazaam 和其他音乐识别应用程序以及吉他调音器应用程序,我怀疑答案是肯定的。但是,我不知道我必须处理哪些限制。

有人玩这个区吗?

0 投票
4 回答
9019 浏览

iphone - 用于乐器调谐器的 AurioTouch 和 FFT

我正在尝试编写一个简单的调谐器(不,不是制作另一个调谐器应用程序),并且正在查看 AurioTouch 示例源(有没有人试图评论这段代码??)。

我担心的是,在查看频域图时,aurioTouch 似乎实际上并不能很好地工作。我在乐器上弹奏一个音符,但我没有看到一组有序的、小的频率集,其中一个弦峰在音符的适当频率处出现。

有没有人使用过 aurioTouch 足以知道底层代码是功能性的还是只是一个粗略的样本?

我的其他选择是使用 FFTW 或 KISS FFT。有没有人有这方面的经验?

谢谢。

0 投票
2 回答
2706 浏览

algorithm - 傅里叶除法算法背后的逻辑是什么?

来自维基百科:傅立叶除法

这是相同的屏幕截图:( 替代文字全分辨率查看

这个算法背后的逻辑是什么?

我知道它可以用来划分非常大的数字,但它究竟是如何工作的呢?

0 投票
5 回答
13532 浏览

audio - 智能手机上音符的音高识别

由于资源有限,例如较慢的 CPU、代码大小和 RAM,如何最好地检测音符的音高,类似于电子或软件调音器所做的事情?

我应该使用:

  • 亲吻 FFT
  • FFTW
  • 离散小波变换
  • 自相关
  • 过零分析
  • 倍频程滤波器

其他?

简而言之,我要做的是识别一个音符,在中音 C 以下两个八度到两个八度以上,在任何(合理的)乐器上演奏。我希望在半音的 20% 以内 - 换句话说,如果用户弹奏太平或太尖锐,我需要区分这一点。但是,我不需要调整所需的精度。

0 投票
3 回答
22917 浏览

c++ - 使用 FFT 进行实时音高检测

我正在尝试使用 C++ 进行实时音高检测。我正在测试一些来自高性能(http://performous.org/)的代码,因为其他一切都对我不起作用。我肯定知道这行得通,但我就是不能让它工作。我已经尝试了几个星期,但我无法让任何音高检测代码正常工作。

0 投票
2 回答
8063 浏览

math - 如何在 Matlab 中生成较低频率的信号版本?

使用正弦输入,我试图修改它的频率,削减频谱中的一些较低频率,将主频率移向零。由于信号没有 fftshift,我试图通过在 fft 向量的开头和结尾消除一些样本来做到这一点:

但它没有按预期工作。我还尝试去除频谱的中心部分,但它也使用了更高频率的正弦波。

如何使它正确?

0 投票
1 回答
936 浏览

audio - 智能手机上音符的音高识别,pt。2

作为我之前问题的后续,如果我希望我的智能手机应用程序检测到某个音符,并且我只需要知道传入的声音是否是那个音符,并带有一定的模糊性,就可以允许注意要偏离 x 美分。

鉴于此,在速度和准确性方面是否有比其他方法更好的方法?也就是说,通过知道您要查找的音符是#C3,如何最好地判断该音符是否存在?我假设寻找单个音符比分离所有波形更容易,然后查看基频的结果。

在对我最初问题的回答中,一位受访者建议,如果您知道注释在一定范围内,自相关可能会很好地发挥作用。我想知道如果您只需要检查是否存在某个音符(+/- x 美分),那么自相关是否会更好。

这些方法是:

  • 亲吻 FFT
  • FFTW
  • 离散小波变换
  • 自相关
  • 过零分析
  • 倍频程滤波器
  • 载重吨

任何想法将不胜感激。

0 投票
5 回答
101140 浏览

math - 进行信号频谱分析时的傅立叶变换 (FFT) 单位

我的问题与对信号进行频谱分析或将信号放入 FFT 并使用合适的数值包解释结果的物理意义有关,

具体来说:

  • 取一个信号,比如一个随时间变化的电压 v(t)
  • 把它扔进一个 FFT(你得到一个复数序列)
  • 现在取模数 (abs) 并将结果平方,即 |fft(v)|^2。

所以你现在在 y 轴上有实数——我应该把这些称为频谱系数吗?

  • 使用采样分辨率,您可以按照食谱将频谱系数与频率相关联。
  • 此时,您有一个频谱 g(w),频率在 x 轴上,但是 y 轴上的物理单位是什么?

我的理解是,这个频谱显示了电压信号中存在多少各种频率——它们是频谱系数,因为它们是重构原始信号所需的各种频率的正弦和余弦系数。

所以第一个问题是,这些频谱系数的单位是什么?

这很重要的原因是频谱系数可能很小而且很大,所以我想使用 dB 标度来表示它们。

但要做到这一点,我必须做出选择:

  • 要么我使用 20log10 dB 转换,对应于现场测量,如电压。
  • 或者我使用 10log10 dB 转换,对应于能量测量,如功率。

我使用哪种缩放取决于单位是什么。

对此的任何启示将不胜感激!