DCT vs DFT 为什么我们需要/想要相位?

信息处理 自由度 阶段 dct
2022-02-17 18:43:52

为什么我们在傅里叶变换中使用复指数,为什么我们想要相位部分?与没有相位而只有幅度的 DCT 不同?

此外,这个阶段对信号重构/分解具体意味着什么?(我知道它与信号的偏移有关,即我知道 sin 和 cos 相移 pi/2 rad ue 90 度,但我在傅里叶中无法真正理解它?

2个回答

DCT 与 DFT 相同,其长度是输入数据与其镜像连接的两倍。与其镜像连接的数据会产生对称数据。

由于对称向量是严格偶数的,因此 DFT 结果中没有奇数(正弦或虚数)分量。只是余弦(或实数或偶数)分量。因此,您可以在没有全零虚部的情况下重建原始输入。(在实践中,可能会有一些数值舍入噪声)。

仅原始数据(未加倍和镜像)的 DFT 并非如此,这可能不是完全对称(偶数)。因此,您需要 DFT 的完整复数结果来重建其输入(除非它恰好围绕第一个向量元素 x(0) 完全圆对称)。

例如我们有一个信号 x[]:

x[] = [1, 1, 1, 1, 0, 0, 0, 0]

我们得到 x[] 的 DFT(只有幅度):

DFT(x)[] = [4.000,  2.613,  0.000,  1.082,  0.000,  1.082,  0.000,  2.613]

x[] 的 DCT:

DCT(x)[] = [4.000,  2.563,  0.000, -0.900, -0.000,  0.601, -0.000, -0.510]

现在,我们移动信号,创建新信号 y[]:

y[] = [0, 0, 1, 1, 1, 1, 0, 0]

我们得到 y[] 的 DFT:

DFT(y)[] = [4.000,  2.613,  0.000,  1.082,  0.000,  1.082,  0.000,  2.613]

和 y[] 的 DCT:

DCT(y)[] = [4.000,  0.000, -2.613, -0.000,  0.000,  0.000,  1.082,  0.000]

您可以看到 x[] 和 y[] 在 DFT 中具有相同的幅度,但在 DCT 中具有非常不同的幅度。

因此,DFT 中的相位信息允许具有相同频率成分但不同相位的信号在 DFT 中具有相同的幅度。与此相反,由于 DCT 没有相位信息,信号的相位信息在 DCT 中变为幅度。它使具有相同频率成分但不同相位的信号在 DCT 中给出不同的幅度结果。

您可以丢弃 DFT 的相位信息。例如,在绘制频谱图时,大多数情况下您不需要绘制相位。但是,有时您需要相位信息。例如,在重构信号时,给定 DFT:

DFT()[] = [4.000,  2.613,  0.000,  1.082,  0.000,  1.082,  0.000,  2.613]

你无法知道信号是 x[] 还是 y[]。