我不太了解 FFT 和采样率
Posted
技术标签:
【中文标题】我不太了解 FFT 和采样率【英文标题】:i don't really understand FFT and sample rates 【发布时间】:2015-02-23 13:17:43 【问题描述】:我真的很困惑。我是一名 AI 程序员,正在开发一款旨在检测歌曲节拍等游戏的游戏。我以前没有关于音频的知识,只是阅读我能找到的任何材料。虽然我得到了 fft 工作和东西,但我根本不明白样本转移到不同频率的方式。问题1,每个频率代表什么。对于我得到的算法。例如,我可以将 1024 个样本转换为 512 个结果。那么它们是对当前秒每个频谱强度的描述吗?这真的没有意义,因为我记得44.1khz的录音中有20,000hz。那么 512 个频谱样本如何解释那一刻发生的事情呢?问题2,从我读到的,它是一个代表此时声波的数字。但是我通过平方左声道和右声道来读取它,并将它们加在一起,你会得到当前的功率水平。这两个似乎与我的理解不一致,我真的很迷,所以请解释一下。
【问题讨论】:
*** 上有一些关于该主题的很好的问题和答案,例如***.com/questions/4364823/…。尝试搜索[fft]
标签。另请注意,没有实际编程内容的 DSP 理论问题更适合dsp.stackexchange.com。
@PaulR 如何说这可能是dsp.stackexchange.com 的问题,在 44100hz 中是 22050hz
如果你真的想了解FFT,我建议你去上课。这个理论很深刻,也很大。通过了解一堆松散的事实很难理解它。这通常在大一/大二 ee 类的信号和系统介绍中教授。更多细节在初级/高级数学课中讲授谐波分析。
【参考方案1】:
DFT 输出
输出是基函数(通常是正弦波)的相量(Re,Im,Frequency)的复表示。第一项是 DC 偏移量,因此请跳过它。所有其他都是相同基本频率 (sampling rate/N
) 的倍数。输出是对称的(如果输入只是真实的),所以只使用结果的前半部分。通常使用功率谱
Amplitude=sqrt(Re^2+Im^2)
是基函数的幅值。如果需要相位,那么
phase=atan2(Im,Re)
注意 DFT 结果很大程度上取决于输入信号的形状、频率和相移到您的基函数。这会导致输出在正确值附近振动/振荡,并产生宽峰值而不是奇异频率的尖峰,更不用说混叠了。
频率
如果你得到44100Hz
,那么最大输出频率是它的一半,这意味着数据中存在的最大频率是22050Hz
。但是,DFFT 不包含此频率,因此如果您忽略镜像的后半部分结果,则:
-,11025
Hz
8 个采样频率为: -,5512.5,11025,16537.5
Hz
输出频率从一开始就与其地址成线性关系,所以如果你得到N=512
样本
-
对其进行 DFFT
获得第一
N/2=256
结果
i
-th 样本代表频率f=i*samplerate/N
Hz
在哪里i= 1,...,(N/2)-1
...跳过i=0
图片显示了我的一个实用应用程序与
2 通道声音发生器(左上角) 2 通道示波器(右上) 2 通道频谱分析仪(底部)...切换到线性频率刻度以明确我在上面的文字中的意思缩放图像以查看设置...我尽可能地接近真实设备。
这里DCT和DFT比较:
这里 DFT 输出依赖于采样率对输入信号频率的混叠
更多频道
通道功率求和更安全。如果您只是添加频道,那么您可能会错过一些数据。例如,让左声道正在播放 1 Khz 正弦波,而右声道正在播放 1 Khz 正弦波,所以如果你只是将它们相加,那么结果为零,但你可以听到声音....(如果你不在扬声器之间的中间)。如果您独立分析每个通道,那么您需要计算每个通道的 DFFT,但是如果您使用通道的功率总和(或绝对总和),那么您可以一次获得所有通道的频率,粗略的您需要缩放幅度.. .
[备注]
N
越大,结果越好(混叠伪影越少,更接近最大频率)。对于特定频率检测,FIR 滤波器检测器更精确、更快。
强烈建议阅读DFT 和那里的所有子链接以及这个plotting real time Data on (qwt) Oscillocope
【讨论】:
这个答案中有一些迂腐的细节并不完全正确。 #1 - “Re=Amplitude,Im = 相位”不正确。实际上输出是 Re 和 Im,但 Re = 实部,Im = 虚部。幅度 = ||以上是关于我不太了解 FFT 和采样率的主要内容,如果未能解决你的问题,请参考以下文章