我在声音设计论坛上也问了这个here,但问题是重型计算机科学/数学,所以它可能真的属于这个论坛:
因此,通过读取文件中的二进制文件,我能够成功找到有关WAV文件的所有信息,除了大sin函数的幅度和频率(赫兹)之外(不幸的是,这正是我正在寻找的内容) )。为了验证我在说什么,该文件仅使用以下公式生成一个波:
F(s)= A * sin(T * s)
当s是当前样本时,A是幅度,T是周期。现在T(期间)的等式是:
T =(2π* Hz)/(α*ω)
其中Hz是以赫兹为单位的频率,α是每秒采样数,ω是通道数。
现在我知道要解决幅度,我可以简单地找到F(s)的值
s =(π/ 2)/ T
因为那时正弦函数的值将是1,并且最终值将等于A.问题是要除以T,我必须知道赫兹(或Hz)。
我是否有任何方法可以读取WAV文件以从数据中发现Hertz,假设该文件只包含一个波形。
答案 0 :(得分:1)
为了澄清一些条款,您要查找的属性是频率,频率单位是赫兹(每秒一次)。按照惯例,典型的A音符的频率为440 Hz。
实际上你的功能错了。现实中的正弦波形式为F(s) = A * sin(2*pi*s/T + c)
- 您不知道它何时开始,因此您可以获得恒定的c。此外,您需要除以T,而不是乘以。
获得振幅实际上相当容易。正弦波有一系列的峰值和谷值。找到每个峰值(高于两个邻居)和每个谷值(下限),计算平均峰值和平均谷值,并且幅度是TWICE两者之间的差值。满容易。可以通过计算从峰到峰以及从谷到谷的平均距离来估计周期T.
有一点你需要小心。如果有轻微的噪音,您可能会在峰值附近出现轻微凹痕。您可以14 17 18 17 14
取代14 17 16 17 14
而不是CKQuery
。那16个不是山谷。一旦你对真实的山峰和山谷进行了很好的估计,就可以抛弃所有扭曲的山峰。
答案 1 :(得分:0)
问题不在于什么频率?"。如果你的功能不是简单的触发功能,那么它就是频率的组合,每个频率都有自己的幅度。
正确的方法是使用finite Fourier transform进行数字信号处理。你有很多需要做的事情。
如果您只想假设单个触发功能,则文件中只有2个(幅度和频率)或3个自由度(幅度,频率和相位角)和N个时间点。这意味着least squares fitting假设正弦或余弦函数。