了解DCT的输出

时间:2018-04-12 12:01:54

标签: python scipy dct

我在理解离散余弦变换的输出时遇到了一些麻烦。 背景: 我想通过仅保存DCT的最相关频率来实现简单的音频压缩。为了有点笼统,我会将几个音轨切成固定大小的片段,比如说5秒钟。 然后我会对每个样本进行DCT,找出所有短片段中最重要的频率。

然而这不起作用,这可能是由于我对DCT的误解。例如,参见下面的图片:

DCT of the first 40s of an audio track[1] DCT of the first 10s of an audio track[2 DCT of the first 40s flipped and concatenated to itself (abc->abccba)[3]

第一张图片显示了音频轨道前40秒的DCT(希望它足够长,以便我获得良好的频率组合)。 第二个图像显示前十秒的DCT。 第四个图像显示前40秒反向连接(如abc-> abccba)的DCT 我在2e5处添加了一个垂直标记用于比较。音乐的采样率通常为44.1 khz

所以这是我的问题:

  1. 对应于DCT输出向量的单个值的频率是多少?是bin / 2吗?就像我在bin = 10000时有一个尖峰,现实世界中哪个频率对应?

  2. 为什么第一个情节显示的强度超过了比这更多的频率?我的直觉是DCT会产生高达44.l khz的所有频率的值(如果我在#1中的假设是正确的话,那么二进制数为88.2k),只是尖峰的比例会有所不同,这将构成音乐的差异。

  3. 为什么第三个图表显示的振幅比第一个更强?我认为通过连接数据,我不会得到任何新的频率。

  4. 由于DCT和FFT / DFT非常相似,我试图详细了解ft(thisthis帮助),但显然它还不够。

1 个答案:

答案 0 :(得分:0)

自己想出来。它确实写在我在问题中发布的链接中。对应于某个bin_id的频率由(bin_id * freq / 2)/(N / 2)给出。这基本上归结为bin_id * 1 / t,其中N = freq * t。这意味着这些图只有不同的粒度。因此,如果情节#1在位置x处具有高点,则情节#2可能在x / 4处显示高点并且在x * 2处显示#3

图像显示图#1的数据拉伸到其大小的两倍(蓝色),图3的数据以黄色显示

enter image description here