Audio FFT帧对齐

Audio FFT帧对齐,audio,signal-processing,fft,Audio,Signal Processing,Fft,我有2个100%相同的波形文件转换成FFT。把它们叠在一起,我得到了一个完美的匹配 但是,如果我在其中一个数据的开头切掉一个非帧大小的块,那么FFT不匹配(从末尾对齐) 我猜这是因为帧中包含的频率。如果一个频率被分成两个帧,那么与集中在一个帧中相比,它在两个帧中显示的能量都会更低 如何补偿/绕过这种影响?为什么在切断一个样本的一部分后,您会期望傅里叶变换的结果相同?我不确定你想补偿什么,这是预期的行为 如果要比较两个样本,看看它们在“签名”方面的差异有多大,那么可能需要对DFT的结果进行规格化。

我有2个100%相同的波形文件转换成FFT。把它们叠在一起,我得到了一个完美的匹配

但是,如果我在其中一个数据的开头切掉一个非帧大小的块,那么FFT不匹配(从末尾对齐)

我猜这是因为帧中包含的频率。如果一个频率被分成两个帧,那么与集中在一个帧中相比,它在两个帧中显示的能量都会更低


如何补偿/绕过这种影响?

为什么在切断一个样本的一部分后,您会期望傅里叶变换的结果相同?我不确定你想补偿什么,这是预期的行为

如果要比较两个样本,看看它们在“签名”方面的差异有多大,那么可能需要对DFT的结果进行规格化。对每个频率单元中的所有能量值求和,然后将每个频率单元中的值除以该和,使结果中的所有能量之和为1。允许您将两个不同的样本逐个进行比较,而不考虑长度


请注意,这只是一种规范化DFT的方法,可能过于简化了。还有无数其他的。根据您的输入数据以及您计划对其执行的操作,日志规范化可能比线性规范化更好。

唯一精确的方法是对数据进行IFFT(假设初始窗口无损耗),然后重新对其进行窗口化,并使用新的偏移量对其进行FFT。最好只制作一组FFT帧,每个帧具有不同的初始偏移量。

您可能希望在计算FFT之前应用窗口函数

:

“使用DFT意味着所分析的有限段是一段 无限长周期信号的周期;如果不是 实际上,必须使用窗口函数来减少 光谱中的伪影。”


我认为你在正确的轨道上把信号分解成重叠的帧,但是你需要考虑你的匹配标准(找出一些启发,例如3个主要频率),帧的大小(太小,你会错过较低的频率,太高,你的分辨率降低)等等。我相信很多人已经解决了这个问题。

你不能-FFT只是输入数据的转换表示-如果你改变了输入数据,那么你就改变了数据的转换表示。如果你能解释一下你真正想要达到的目标,也许会更好。我只是想比较一下声音。“你不能”并不是我解决这个问题的方法,尽管有时在我找到答案之前,我会得到很多这样的回答你需要了解音乐的特点是时变的。如果你想用Shazam这样的方式来描述一首歌,那么你需要做的工作不仅仅是做FFT,因为这并不会真正减少歌曲中的信息总量。你需要找到聪明的方法将信息量减少到尽可能少的字节内,并且不受由不同压缩级别等引起的微小变化的影响。所有相关工作已经完成,匹配/比较正在工作。我试图通过克服FFT中“偏移对齐”的差异来实现进一步的改进。我想在信号处理中或多或少都有这样做的标准方法。我知道这是预期的行为。如果数据改变,FFT也会改变。但我需要某种补偿。例如,计算3帧(N=-1,0,1)的平均值有效吗?我一直在尝试理解FFT的重叠帧,但我所有的尝试似乎要么模糊了太多的频率,要么导致不匹配。但是你想补偿什么呢?如果对两个不相同的音频样本执行DFT,结果将不相同。没有办法使它们完全相同,并且仍然有一个有效的DFT。你想用DFT结果做什么?我正在做一个音频搜索引擎/比较引擎。我正在确定要校准的峰值能量/热点。从我所看到的情况来看,FFT帧中的移位导致4096字节帧的显著差异(猜测约10%),因此一些“热点”是不同的。我想这是因为能量在不同的帧之间分配不同。所以我想补偿帧中的不同偏移。