理解DCT的输出

2024-06-16 18:40:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我在理解离散余弦变换的输出时有些困难。 背景: 我想通过只保存DCT最相关的频率来实现简单的音频压缩。为了更通俗一点,我会把几个音轨切成固定大小的片段,比如5秒。 然后我会对每个样本做一个离散余弦变换,找出在所有短片段中最重要的频率。在

但这不起作用,这可能是因为我对DCT的理解有误。如下图所示:

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

第一张图片显示了音频轨迹前40秒的DCT(想让它足够长,这样我就能得到一个很好的频率混合)。 第二张图显示前10秒的DCT。 第三张图显示了前40秒的反向合并(如abc->;abccba)的DCT 我在2e5处加了一个垂直标记,以便比较。音乐样本通常是44.1千赫

我的问题是:

  1. 与DCT输出矢量的单个值相对应的频率是多少?它是bin/2吗?比如如果我有一个尖峰在bin=10000,这对应于真实世界中的哪个频率?

  2. 为什么第一张图显示的振幅比第二张图多出那么多?我的直觉是,DCT将产生44.1kHz的所有频率值(所以如果我在#1中的假设是正确的,那么bin数为88.2k),只是峰值的尺度不同,这将弥补音乐中的差异。

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

由于dct和FFT/DFT非常相似,我试图更多地了解ft(this和{a2}有帮助),但显然这还不够。在


Tags: bin音乐轨迹图片音频频率dct样本
1条回答
网友
1楼 · 发布于 2024-06-16 18:40:40

我自己想出来的。这确实是写在我在问题中发布的链接中。与某个bin_id相对应的频率由(bin_id*freq/2)/(N/2)给出。这基本上可以归结为bin_id*1/t,N=freq*t。这意味着绘图的粒度不同。因此,如果图1在x处有一个高点,那么图2很可能在x/4处出现一个高点,而图3在x*2处有一个高点

图像显示图1的数据被拉伸到两倍大小(蓝色),而图3的数据显示为黄色

enter image description here

相关问题 更多 >