定义频率上的音量(C#)

我不明白为什么音量定义频率不如预期。

我依次用几个指定的频率向我的麦克风发送声音。 然后我做我的麦克风缓冲区的FFT。 退出FFT时,我有一个复数数组。 要知道定义频率上的声音音量,我看看我的数组,我得到这个数组中的元素数:

MyFrequency = n*SamplingRate/SizeOfArray. 

接下来,我得到复数的大小

 (sqrt(Re^2+Im^2) 

如果我是对的,这会显示此频率上的声音音量。 但是这个值会根据频率发生很大变化。 如果我错了,请向我解释我需要做些什么来纠正我的错误。 如果我是对的,请解释一下为什么这些价值变化如此之大。

您是在FFT之前应用窗口函数吗? 如果没有,那么您将看到频谱泄漏的影响,并且如果原始频率是采样率的精确子倍数,则任何给定FFT仓的幅度将是正确的。