【发布时间】: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 在他们的计算中考虑到这种转变。非常感谢! :)