C# 调谐器应用:如何找到频率?

C# 调谐器应用:如何找到频率?,c#,silverlight-4.0,C#,Silverlight 4.0,您好 我目前正在为班级项目使用Silverlight/c#开发一个调谐器应用程序。我遇到的问题似乎有很多人问过,但没有得到真正的回答。我读了很多论坛,在谷歌上搜索了几个小时,但仍然不能真正掌握代码和数学。到目前为止,我得到的是: 麦克风=>音频输入=>音频样本写入内存流=>字节转换为双倍,然后转换为复数=>FFT(),后者返回复数数组 我读过关于FFT/DFT/自相关等的书。在我看来,FFT是我追求速度的方式。从本质上说,我正在将乐队/管弦乐队/等中使用的半音调谐器转变为在线应用程序,因此一切都

您好

我目前正在为班级项目使用Silverlight/c#开发一个调谐器应用程序。我遇到的问题似乎有很多人问过,但没有得到真正的回答。我读了很多论坛,在谷歌上搜索了几个小时,但仍然不能真正掌握代码和数学。到目前为止,我得到的是:

麦克风=>音频输入=>音频样本写入内存流=>字节转换为双倍,然后转换为复数=>FFT(),后者返回复数数组

我读过关于FFT/DFT/自相关等的书。在我看来,FFT是我追求速度的方式。从本质上说,我正在将乐队/管弦乐队/等中使用的半音调谐器转变为在线应用程序,因此一切都需要实时完成。现在,我只想了解整个过程

问题:

  • 将写入内存流的字节转换为复数的正确方法是什么?这在这里得到了部分回答,但我不知道哪种方法是正确的,因为每种方法都会产生不同的值

  • 我理解FFT的基本原理,但不确定数字在不同阶段代表什么。例如,进入fft算法时,复数数组究竟代表什么,离开时它们代表什么

  • 计算FFT后,需要进行哪些其他处理才能找到正在播放的音符的频率


  • 我感谢所有的帮助,这个项目已经证明比我最初研究的要复杂得多/

    干杯,谢谢

    乔希什么都没有

    2) FFT返回一个值数组。每个阵列成员都包含该频带中的信号强度

    3) 首先,找到具有最强值的数组成员。要拨入精确的频率,您可能需要在最强桶周围的数组成员之间进行一些插值


    编辑:找到。看起来这对你来说是个难题。

    “这个项目已经证明比我最初研究的要复杂得多”-一直如此。在你链接的代码中,我以前看过,但忍不住要问他的一些数学问题…当他计算光谱图时,他取复数平方的绝对值,他也用减法代替加法:(Re*Re-Im*Im)…幅度(光谱图)不是唯一的绝对值吗?(sqrt(Re*Re+Im*Im))