DCT行而不是列

时间:2014-01-21 14:29:41

标签: matlab transform fft cosine dct

我喜欢在matlab中使用fft和代码

  

FFT(信号,[],n)的

其中n表示从Matlab文档中应用fft的维度: http://www.mathworks.it/it/help/matlab/ref/fft.html

我想对dct做同样的事。

这可能吗?我找不到任何有用的信息。

感谢您的帮助。

路易

2 个答案:

答案 0 :(得分:0)

dct没有选择像fft这样的尺寸的选项。您必须转换输入以对行进行操作或从信号中选择一个向量并对其进行操作。

答案 1 :(得分:0)

没错!

试一试:

matrix = dctmtx(n);
signal_dct = matrix * signal;

修改

离散余弦变换。

Y = dct(X)返回X的离散余弦变换。

矢量Y与X的大小相同,包含离散余弦变换系数。

Y = dct(X,N)在变换前将矢量X填充或截断为长度N.

如果X是矩阵,则将dct操作应用于每列。可以使用IDCT反转此变换。

% Example:
%   Find how many dct coefficients represent 99% of the energy 
%   in a sequence.

x = (1:100) + 50*cos((1:100)*2*pi/40);  % Input Signal 
X = dct(x);                             % Discrete cosine transform
[XX,ind] = sort(abs(X)); ind = fliplr(ind);
num_coeff = 1;
while (norm([X(ind(1:num_coeff)) zeros(1,100-num_coeff)])/norm(X)<.99)
    num_coeff = num_coeff + 1;
end;
num_coeff