Question

I was aquainted in using the fft in matlab with the code

fft(signal,[],n)

where n tells the dimension on which to apply the fft as from Matlab documentation: http://www.mathworks.it/it/help/matlab/ref/fft.html

I would like to do the same with dct.

Is this possible? I could not find any useful information around.

Thanks for the help.

Luigi

No correct solution

OTHER TIPS

dct does not have the option to pick a dimension like fft. You will have to either transpose your input to operate on rows or pick one vector from your signal and operate on that.

yep!

try it:

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

Edit

Discrete cosine transform.

Y = dct(X) returns the discrete cosine transform of X.

The vector Y is the same size as X and contains the discrete cosine transform coefficients.

Y = dct(X,N) pads or truncates the vector X to length N before transforming.

If X is a matrix, the dct operation is applied to each column. This transform can be inverted using 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     
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top