DFT 与 DCT - 频谱差异

信息处理 自由度 dct
2022-02-17 22:07:21

当您同时使用 DFT 和 DCT 将信号转换到频域时,例如函数 sin(x),频谱会如何?两个频率值(DCT 和 DFT)是否相同?谁能解释函数 sin(x) 的频率值(显然频率应该是 1/2π)

3个回答

的 DCT 与的 DFT 大致相同,即在垂直轴上镜像。由于该函数是偶数,因此所有正弦系数都将为零,并且可以从结果中删除。x(t)[0,T]x(|t|)[T,T]

现在不同,因此所得系数将完全不相关。如果采样间隔在处结束,则 DFT 将仅在频率附近出现一个峰值。sin(|t|)sin(t)=sin(t)tt=T=2πf=12π

但是由于处的扭结,以及采样间隔结束时的一秒,DCT 将在频率t=0sin(|t|)f2f>0

首先,DFT 产生复数输出,因此您最好将其幅度与输入和输出均为实数的 DCT 幅度进行比较。

您可能知道 DCT 可以从 DFT 中精确计算,因此您可以从预处理的 x[n] 信号的 DFT[k] 值中准确找到任何 k 的 DCT[k] 值。(反过来可能是错误的)

基本上,DCT 用于那些强调低频内容的过程。例如在语音或图像编码中。然而,出于频谱分析的目的,DFT 会产生更好的工具,并且将其结果映射到物理频率是如此简单。如果您有 matlab,请检查以下代码以查看它们的差异是否对您很重要:

N=128; f = 123, Fs = 1024;   % set the signal parameters  
x = sin(2* pi* f*[0:N-1]/Fs);  % create a real signal x[n]  
figure,plot(abs(fft(x,N)));  % get the first half of it, since it is symmetric  
figure,plot(abs(dct(x,N)));  % get DCT for comparison

正如您所看到的,对于不同的“f”值,DCT 和 DFT 值之间的相似性有所不同,但是它们的总体包络(如预期的那样)相似。

看看维基百科有一个示例图像,但用于 DFT。

DFT 与 DCT