Iphone AurioTouch&;用于仪器调谐器的FFT

Iphone AurioTouch&;用于仪器调谐器的FFT,iphone,audio,fft,Iphone,Audio,Fft,我正在尝试编写一个简单的调谐器(不,不是为了制作另一个调谐器应用程序),并且正在查看AurioTouch示例源代码(有人试过对这段代码进行注释吗??) 我担心的是,在查看频域图时,aurioTouch实际上似乎工作得不太好。我在乐器上弹奏一个音符,我看不到一个有序的、小的、有一个弦峰的频率集合在音符的适当频率 有没有人使用aurioTouch足够了解底层代码是功能性的还是只是一个粗略的示例 我的其他选择是使用FFTW或KISS FFT。有人有这方面的经验吗 谢谢。FFT使用频率存储单元,存储单元

我正在尝试编写一个简单的调谐器(不,不是为了制作另一个调谐器应用程序),并且正在查看AurioTouch示例源代码(有人试过对这段代码进行注释吗??)

我担心的是,在查看频域图时,aurioTouch实际上似乎工作得不太好。我在乐器上弹奏一个音符,我看不到一个有序的、小的、有一个弦峰的频率集合在音符的适当频率

有没有人使用aurioTouch足够了解底层代码是功能性的还是只是一个粗略的示例

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


谢谢。

FFT使用频率存储单元,存储单元频率宽度基于FFT参数。要找到一个频率,您需要以至少两倍于样本中最高频率的速率对其进行采样。然后找出两个周期之间的时间。如果不是一个纯频率,这当然会更困难。

极光触摸看起来很奇怪,因为频率轴是线性的。当x轴不是对数标度(传统上为log2)时,很难解释FFT输出

如果无法使用aurioTouch的整数FFT,请查看我的库:

它使用双精度,支持多种窗口类型,并实现(随着时间的推移,这将为您提供更稳定的光谱)


@zaph,FFT计算的是真正的离散傅里叶变换。这是一种简单有效的算法,利用数字信号的逐位表示。

我使用Ooura FFT计算加速度计数据的FFT。我并不总是能得到正确的光谱。由于某些原因,Ooura FFT在所有频率上产生了完全错误的结果,其频谱量级为10^200

你想错了!! 不是图书馆的错 无论库是否正确生成,您都在寻找一种在现实生活中很少实际存在的模式。只有电子产生的完美正弦波才会在频率图中出现均匀的半程离散“尖峰”。如果您不相信,请尝试在winamp或media player中启动“频谱分析器”可视化。这并不是电脑的错

真正的声波是复杂的动物 想象一下你脑海中的锯齿波或方波。在FFT甚至是真正的傅里叶变换中,波上那些尖锐的转折点看起来像是成吨的高次谐波。如果你曾经在示波器上看到过真正的“斯夸尔波/锯齿波”,或者甚至是由一个本应产生正弦波的仪器产生的“正弦波”,那么就在一个音符中观察一下所有尖锐的角落和缝隙(如果你没有示波器,就大胆地放大波形——放大的越多,看到的音符就越高)。是的,这些偏差都算作频率

在频谱分析中,有时很难区分一个音符和整个乐团之间的区别

但我只听到一个音符! 那么耳朵是如何做到的呢?它考虑整个波形。然后你的下半脑向上半脑撒谎,说输入的是什么:一个音符,而不是一堆泛音

你不能完全做到这一点,但你可以通过“培训”来接近它

近似:构建一些智能 播放乐器上的音符并“保存”频率图。对几个频率范围内的注释执行此操作,或者更好的是对所有注释执行此操作

然后,通过将该工具保存的图形乘以2^(1/12)(或1/24表示1/4步等),插入注释以填补空白(1/2或1/4步)

找出如何将它们存储在快速搜索的数据结构(如BST或trie)中。只是它必须返回一个“这有多接近”分数。它还必须通过频率的比例来识别匹配,以防出现不同的音量

使用智能 下一次,当你想从那台仪器中寻找一个音符时,只要把“hear”频率图放到数据结构中就可以了。您可以记录几个产生不同波形的仪器并搜索它们。如果有背景音或多个音符,请选择最接近的匹配项。然后,如果你想识别其他音符,从取样的音符中减去找到的频率模式,然后冲洗,再重复

用你的声音是不行的。。。 如果你曾经试图通过对着吉他调谐器唱歌来调节自己,你就会知道调谐器并没有那么聪明。当然,有些乐器(语音esp)确实在音高上浮动,并产生不断变化的波形(即使没有人唱歌)

你想完成什么? 对于一个“简单”的调谐器应用程序,你不必完全有这种幻想,但如果你不只是制作另一个调谐器应用程序,我猜你实际上想识别音符(例如,也许你想从收音机上的歌曲自动生成midi文件;-)

祝你好运。我希望你能找到一个能做这些垃圾的图书馆,而不必自己翻滚

编辑2017 请注意此网页:
在这一页的下方,有各种风琴管的光谱分析。有很多很多的含义。如果你先用它们“训练”你的应用程序(就像告诉一个孩子,“单簧管的声音是这样的…”),这些都是可以检测到的——只要付出足够的努力——但是aurioTouch做得正确吗?此外,你还需要找出周期之间的时间。如果我做一个FFT,我就不用这么做了,FFT,你也提到过,是为我做的。我对FFT和音符的经验是,一个音箱会显示更高的值,这就是音符的基本频率。我假设所有的音符都有一个容易识别的基频,否则我们的耳朵会拒绝它们,因为它们是非关键的。频率BIB的宽度相当宽,因此它们不能准确地提供频率。FFT不是四次方