DCT使用FFT的结果是复杂的结果

问题描述 投票:0回答:1

我想根据这篇论文实现一个DCT10。https:/www.researchgate.netpublication330405662_PittPack_Open-Source_FFT-Based_Poisson%27s_Equation_Solver_for_Computing_With_Accelerators ("诺依曼边界条件 "一节).然而我有一个问题,在执行FFT和半样本移位后,结果不是纯实数(我认为应该是这样的,对吗?),因此当截断虚数部分时,所述的反向变换将不会产生我的原始值。

这是我的Matlab代码(一维的DCT)。

function X_dct = dct_type2(x_sig)
    N = size(x_sig);

    % shuffle to prepare for FFT
    x_hat = zeros(N);
    for m = 1 : N(2)
        for n = 1 : (N(1) / 2)
            x_hat(n, m) = x_sig((2 * n) - 1, m);
            x_hat(N(1) - n + 1, m) = x_sig(2 * n, m);
        end
    end

    % perform FFT
    X_hat_dft = fft(x_hat, N(1), 1);

    % apply shifting by half-sample
    X_dct = zeros(N);
    for m = 1 : N(2)
        for k = 1 : N(1)
            X_dct(k, m) = 2 * exp(-1i * (pi * (k-1)) / (2 * N(1))) * X_hat_dft(k, m);
        end
    end
end

谁能解释一下这里的问题是什么?还是我的假设错了,结果应该是纯实数?

fft dct
1个回答
0
投票

所以事实证明,用这种技术去掉非零的虚部是正确的,尽管我直觉上认为这是错误的。"反向变换没有重新恢复原始值只是频率分量的缩放问题。

© www.soinside.com 2019 - 2024. All rights reserved.