求解 WAV 文件中的振幅和频率

Solving for Amplitude and Frequency in WAV files

我也在 Sound Design 论坛上问过这个 here,但问题是重型计算机 science/math 所以它实际上可能属于这个论坛:

因此,通过读取文件中的二进制文件(不幸的是,这正是我所知道的),我能够成功找到关于 WAV 文件的所有信息,除了大 sin 函数的振幅和频率(赫兹)寻找)。只是为了验证我在说什么,该文件仅使用等式生成一波:

F(s) = A * sin(T * s)

其中s为当前样本,A为振幅,T为周期。现在 T(周期)的等式是:

T = (2π * Hz) /(α * ω)

其中 Hz 是以赫兹为单位的频率,α 是每秒采样数,ω 是通道数。

现在我知道要求解振幅,我可以简单地找到 F(s) 的值,其中

s = (π/2)/T

因为这样正弦函数的值就是1,最后的值就等于A。问题是除以T,我必须知道赫兹(或赫兹)。

有什么方法可以读取 WAV 文件以从数据中发现赫兹,假设该文件仅包含一个波形。

为了澄清一些术语,您要查找的属性 是频率,频率的单位是赫兹(每秒一次)。按照惯例,典型的 A 音符的频率为 440 Hz。

实际上你把函数弄错了。现实中的正弦波具有 F(s) = A * sin(2*pi*s/T + c) 的形式——你不知道它是什么时候开始的,所以你在那里得到一个常数 c。此外,您需要除以 T,而不是乘法。

获取振幅实际上相当容易。该正弦波具有一系列 op 波峰和波谷。找到每个峰值(高于两个相邻峰值)和每个谷值(较低),计算平均峰值和平均谷值,幅度是两者之差的两倍。相当容易。周期 T 可以通过计算峰到峰和谷到谷的平均距离来估计。

有一点需要注意。如果有一点点噪音,您可能会在峰值附近出现轻微凹痕。而不是 14 17 18 17 14 你可能会得到 14 17 16 17 14。那个 16 不是山谷。一旦您对真实的峰值和谷值有了很好的估计,就可以去掉所有扭曲的峰值。

问题不是“什么频率?”。如果您的函数不是简单的三角函数,它将是频率的组合,每个频率都有自己的振幅。

正确的方法是使用 finite Fourier transform 进行数字信号处理。你有很多挖掘工作要做。

如果您只想假设一个单一的三角函数,那么文件中只有 2 个(幅度和频率)或 3 个自由度(幅度、频率和相位角)和 N 个时间点。这意味着 least squares fitting 假设正弦或余弦函数。