【问题标题】:Understanding the output of a DCT了解 DCT 的输出
【发布时间】:2018-09-22 13:48:25
【问题描述】:

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

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

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

所以这是我的问题:

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

  2. 为什么第一张图显示的振幅比第二张多很多?我的直觉是 DCT 将产生高达 44.l khz 的所有频率的值(如果我在 #1 中的假设是正确的,那么 bin 编号为 88.2k),只是尖峰的规模会有所不同,这将弥补音乐的不同。

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

由于 DCT 和 FFT/DFT 非常相似,我尝试了解有关 ft 的更多信息(thisthis 帮助),但显然还不够。

【问题讨论】:

    标签: python scipy dct


    【解决方案1】:

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

    图片展示了 plot#1 的数据被拉伸到两倍大小(蓝色)和 plot#3 的数据为黄色

    【讨论】:

      猜你喜欢
      • 2019-02-13
      • 2012-10-21
      • 2019-02-18
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多