Algorithm 根据振幅和比特率计算频率

Algorithm 根据振幅和比特率计算频率,algorithm,math,signal-processing,Algorithm,Math,Signal Processing,我现在有一个数组,里面有很多数据,我相信是波形文件的振幅。它目前处于低-32768和高32767 我还有16000Hz的采样器 我对声音的理解不是很好;有人知道我如何计算频率吗 非常感谢您的帮助 Monkeyguy。这正是我从物理学中记得的,而且我也绝对不是音乐专家 除非它是一个恒定音调的录音,否则它可能没有单一的频率。每个音调都有不同的频率,这就是它们听起来不同的原因。一般来说,波的频率(不是wav)和波长之间是有关系的,但据我所知,关于振幅没有关系 您的采样器类似于一个频率,在中测量,但它只

我现在有一个数组,里面有很多数据,我相信是波形文件的振幅。它目前处于低-32768和高32767

我还有16000Hz的采样器

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

非常感谢您的帮助


Monkeyguy。

这正是我从物理学中记得的,而且我也绝对不是音乐专家

除非它是一个恒定音调的录音,否则它可能没有单一的频率。每个音调都有不同的频率,这就是它们听起来不同的原因。一般来说,波的频率(不是wav)和波长之间是有关系的,但据我所知,关于振幅没有关系


您的采样器类似于一个频率,在中测量,但它只告诉您录制的精度,而不是录制的声音的实际频率。

几乎在所有情况下,音频文件都没有单一频率。声波只有一个频率的声音(通常)是纯正弦音,声音如下:

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赫兹的正弦波。(由于降价限制,无法对此进行适当链接。)

一般的声音,如录音(语音、音乐或城市噪音),由叠加的正弦波组合(无限多个)组成。也就是说,如果你要画出波的压力与时间(在空间中的某一给定点)的关系图,或者(或多或少)等效地,作为时间函数的扬声器膜的位置,那么它就不是,而是更复杂的东西。(事实上,贝多芬交响乐的所有信息怎么能用一个简单的正弦波来表示,而正弦波完全由它的频率,一个单一的数字来决定?)

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

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


要在任何小时间确定声音的平均频率,您可以使用来自的一些高级技术,但这并不完全是微不足道的。

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

您想要做的到底是什么?该方法将完全取决于您希望实现的目标。您是否有一个包含单个正弦信号的信号,例如来自机械设备的检测器?或者更可能是y你想对着麦克风演奏/唱歌并转录音乐吗

在这两种情况下,FFT将是您的第一个调用端口。在第一种情况下,这可能是您所需要的全部,因为FFT适用于孤立的稳态正弦信号。在后一种情况下,为了获得任何有用的结果,您还有很长的路要走。基音识别是一个困难的问题,只需抛出一些FFT即可这不会让你走多远。你需要在数字信号处理和音乐信号的特征方面有一个良好的基础,然后可能你最好的选择是使用基于自相关的方法


请参阅我之前关于相关主题的回答,了解一些可能有用的链接:

虽然音频录制确实没有单一频率,但您可以很容易地找到基频。从样本的开头开始,并对其进行跟踪;您正在寻找最高的绝对值,并且是在mul的波形中t多个频率,直到你回到零,你才知道它是什么。记住迄今为止你看到的最高或最低值。现在,向前追踪,希望是相反的方向。你正在寻找下一个绝对值与你发现的类似的峰值或低谷,使用与以前相同的方法。找出有多少样本在两个最高绝对值读数之间。将采样率除以该数字(最好不要为零),然后除以2。这是此时记录的最低或基本频率


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

非常感谢你的输入!因此,在我的例子中,它每秒可以节省16000个样本(我已经有了)。我的输入来自正在录制的麦克风,我只是不确定如何找到平均频率(以确定第二个音符当前播放的是哪个音符)。