从幅度和比特率计算频率

时间:2010-09-03 22:05:26

标签: algorithm math signal-processing

我目前有一个充满数据的数组,我认为是我的wave文件的幅度。它目前处于-32768低点和32767高点。

我的SampleRate也是16,000hz。

我对声音的理解不是很好;有谁知道如何计算频率?

非常感谢,

Monkeyguy。

5 个答案:

答案 0 :(得分:4)

你究竟想做什么?该方法完全取决于您希望实现的目标。你有一个包含单个正弦波的信号,例如一个机械设备的探测器吗?或者更有可能的是,你想演唱/唱歌并录制音乐吗?

在这两种情况下,FFT都将是您的第一个停靠点。在第一种情况下,这可能几乎是你所需要的,因为FFT对于孤立的稳态正弦曲线是有益的。在后一种情况下,为了获得任何有用的结果,你有一条很长的路要走。音高识别是一个难题,只是抛出一些FFT不会让你走得太远。你需要在数字信号处理和音乐信号的特性方面有一个良好的基础,然后你最好的选择是使用基于自相关的方法。

有关可能有用的链接,请参阅我之前对相关主题的回答:Algorithms for determining the key of an audio sample

答案 1 :(得分:3)

几乎在所有情况下,音频文件都没有单一频率。声波具有单一频率的声音(通常)是纯正弦音,听起来像这样:

http://www.wolframalpha.com/input/?i=sound+440+Hz&a=*MC.~-_*PlaySoundTone-&a=*FS-_**DopplerShift.fo-.*DopplerShift.vs-.*DopplerShift.c--&f3=10+m/s&f=DopplerShift.vs_10+m/s&f4=340.3+m/s&f=DopplerShift.c_340.3+m/s&a=*FVarOpt.1-_***DopplerShift.fo-.*DopplerShift.fs--.***DopplerShift.DopplerRatio---.*--&a=*FVarOpt.2-_**-.***DopplerShift.vo--.**DopplerShift.vw---.**DopplerShift.fo-.*DopplerShift.fs---

这是一个纯440 Hz的正弦波。 (由于MarkDown限制,无法对此进行适当的链接。)

一般声音,例如录音(语音,音乐或仅仅是城市噪音),由这些正弦波的(无限数量)组合组成,叠加。也就是说,如果要绘制波浪的压力与时间(在空间的给定点)的图形,或者(或多或少)等效地说明扬声器膜的位置作为时间的函数,它将因此不是a pure sine wave,而是更复杂的东西。 (的确,贝多芬交响乐的所有信息怎么能用一个简单的正弦波表示,完全由它的频率,一个数字决定?)

数字记录的采样率仅仅是声波每秒的采样数。实际上,物理声波每次都有一个幅度p(t),因此,因为在0秒到10秒之间存在无限次数t(比方说),理论上,为了保存音频,我们需要一个无穷大的数字字节数(每个样本需要固定数量的字节 - 例如,16位记录每个样本使用16位或2个字节 - 当然,“位数”越高,我们得到的质量越高;对于16位声音,我们在指定单个样本时有2个 16 = 65536个级别可供选择)。在实践中,对声音进行采样,使得幅度p(t)仅以固定间隔保存。例如,典型的音频CD的采样率为44.1 kHz;也就是说,样品每22.7μs保存一次。

因此,任何频率或任何记录的纯正弦波都可以使用任何采样率存储在计算机上,记录的质量由采样率决定(越高越好)。 [技术说明:当然,采样率有一个下限(在某种意义上)。这称为Nyquist rate。]

要确定声音在任何时间的平均频率,您可以使用Fourier analysis中的一些高级技术,但这并非完全无关紧要。

答案 2 :(得分:2)

这就是我从物理学中记得的东西,我绝对不是音乐专家。

除非它是恒定音调的录音,否则它可能没有单一频率。每种音调都有不同的频率,这就是它们听起来不同的原因。波(不是波)频率和波长之间通常存在关系,但我所知道的关于幅度的关系没有。

您的SampleRate类似于频率,在Hz中测量,但它只告诉您录音的精确度,而不是录音的实际频率。

答案 3 :(得分:2)

作为其他两个答案的快速补充,如果 试图测量声音文件本身内的频率,则需要查看Fast Fourier Transform(FFT),是一种用于确定采样数据集内频率强度的算法。

答案 4 :(得分:0)

虽然录音不会有单一频率,但您可以轻松找到基频。从样品的开头开始,然后追踪它;你正在寻找最高的绝对值,而在一个有多个频率的波浪中你不会知道它是什么,直到你回到零。记住你到目前为止看到的最高或最低值。现在,向前追寻,希望在相反的方向。您正在寻找与您找到的相似绝对值的下一个峰值或谷值,使用与之前相同的方法。找出两个最高绝对值读数之间有多少个样本。将采样率除以此数字(最好不要为零)然后除以2.这是此时录音的最低或基本频率。

您还可以生成表示给定频率的合成波形的正弦函数,并从样本中减去此波形的瞬时值。求出前后样本的均方根振幅的差异。该差异是该频率处信号幅度的粗略近似。重复此过程,每次加倍频率。您可以使用它来创建基本的EQ频谱。