我真的很困惑。我是一名致力于游戏的ai程序员,旨在检测歌曲中的节拍等等。我以前没有关于音频的知识,只是阅读我能找到的任何材料。虽然我有fft工作和东西我只是不明白样本转移到不同频率的方式。问题1,每个频率代表什么。对于我得到的算法。我可以将1024个样本转换成512个结果。那么它们是对当前第二个频谱强度的描述吗?它真的没有意义,因为我记得的是44.1khz录音中有20,000hz。那么512个频谱样本如何解释当时发生的事情呢?问题2,从我读到的,它是一个代表此时声波的数字。然而,我通过平方左声道和右声道来读取它,并将它们加在一起,您将获得当前的功率水平。这两个看起来似乎与我的理解不连贯,我真的爱上了,所以请解释一下。
答案 0 :(得分:0)
DFT输出
输出是基函数(通常是正弦波)的相量(Re,Im,Frequency)的复杂表示。第一项是 DC 偏移,因此请跳过它。所有其他都是相同基频(sampling rate/N
)的倍数。输出是对称的(如果输入是真实的),所以只使用前半部分的结果。通常使用功率谱
Amplitude=sqrt(Re^2+Im^2)
这是基函数的幅度。如果需要阶段那么
phase=atan2(Im,Re)
注意 DFT 结果强烈依赖于输入信号的形状,频率和相移到基函数。这会导致输出在正确的值附近振动/振荡,并产生宽峰而不是尖峰,而不是混淆。
<强>频率强>
如果你得到44100Hz
,则最大输出频率是其一半,这意味着数据中存在的最大频率为22050Hz
。然而, DFFT 不包含此频率,因此如果您忽略镜像的后半部分,则:
{ -,11025 }
Hz { -,5512.5,11025,16537.5 }
Hz 输出频率与开始时的地址呈线性关系,如果您有N=512
个样本
N/2=256
结果 i
- 样本代表频率f=i*samplerate/N
Hz
其中i={ 1,...,(N/2)-1}
...正在跳过i=0
图像显示了与
一起被收录的一个实用程序应用程序缩放图像以查看设置...我尽可能接近真实设备。
此处 DCT 和 DFT 比较:
此处 DFT 输出对输入信号频率混叠的依赖性取样率
更多频道
通道的总和功率更安全。如果你只是添加频道,那么你可能会错过一些数据。例如,让左声道正在播放1 Khz正弦波,而正确的正好相反,所以如果你只是将它们相加,那么结果为零,但你可以听到声音....(如果你不是正好在扬声器之间的中间)。如果你独立分析每个通道,那么你需要计算每个通道的DFFT,但如果你使用通道的功率和(或绝对和),那么你可以一次获得所有通道的频率,粗略需要缩放幅度。
<强> [注释] 强>
结果越N
越好(混叠伪像越少,越接近最大频率)。对于特定频率,检测 FIR 滤波器检测器更精确,更快速。
强烈建议您阅读DFT及其中的所有子链接以及此plotting real time Data on (qwt) Oscillocope