【问题标题】:Implementing DCT from its connection to DFT via FFT in Matlab在 Matlab 中通过 FFT 从其连接到 DFT 实现 DCT
【发布时间】:2018-01-07 02:43:09
【问题描述】:

我有这个任务要自己在 Matlab 中实现一维 DCT-II,其中偶数长度序列的一维 DCT-II 定义为:

当然,禁止使用内置的 dct 函数,而我可以使用 fft 函数。使用 DCT-II 和 DFT 之间的关系,我从原始序列的偶数和对称扩展的 DFT 系数计算了 DCT 系数,如下所示:

但是,我自己的实现不同意内置的 dct 功能。我已经看到了一些关于 DCT 实现的问题,但无法在我自己的代码中找到问题。我的代码如下。

function X_dct = dct_new (x_sig)
N = length(x_sig);
if mod(N,2) ~= 0
    error('Sequence is of odd length.');
end

x_hat = zeros(N, 1);
for n = 1: (N/2)
    x_hat(n) = x_sig((2*n)-1);
    x_hat(N-n+1) = x_sig(2*n);
end

X_hat_dft = fftshift(fft(x_hat));
X_dct = zeros(1, N);
for k = 1:N
    X_dct(k) = real(alpha(k-1,N)* exp(-1i*pi*(k-1)/(2*N))*(X_hat_dft(k)));
end
end

function a = alpha(k, N)
    if k == 0
        a = sqrt(1/N);
    else
        a = sqrt(2/N);
    end
end

提前致谢。

【问题讨论】:

  • 这个“问题”没有问题!请提供一个!
  • 你认为你为什么需要fftshift
  • 没有回答我的问题?请尝试不带fftshift 的代码,这可能是您的问题所在。
  • 对不起,半小时前我才注意到关于您的评论的通知,您当然是对的,在计算 dct 系数之前使用 fftshift 真的没有必要甚至愚蠢,因为我没有' t 在他们的计算中考虑到这种转变。非常感谢! :)

标签: matlab fft dct


【解决方案1】:

正如 Cris Luengo 在他的评论中指出的那样,我的错误是在计算 dct 系数之前使用了 fftshift,因为我没有采取移位位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    相关资源
    最近更新 更多