Compute the unitary discrete cosine transform of a signal.
dct(x, n = NROW(x))
Arguments
x: input data, specified as a numeric vector or matrix. In case of a vector it represents a single signal; in case of a matrix each column is a signal.
n: transform length, specified as a positive integer scalar. Default: NROW(x).
Returns
Discrete cosine transform, returned as a vector or matrix.
Details
The discrete cosine transform (DCT) is closely related to the discrete Fourier transform. You can often reconstruct a sequence very accurately from only a few DCT coefficients. This property is useful for applications requiring data reduction.
The DCT has four standard variants. This function implements the DCT-II according to the definition in [1], which is the most common variant, and the original variant first proposed for image processing.
Note
The transform is faster if x is real-valued and has even length.
Examples
x <- matrix(seq_len(100)+50* cos(seq_len(100)*2* pi /40))X <- dct(x)# Find which cosine coefficients are significant (approx.)# zero the restnsig <- which(abs(X)<1)N <- length(X)- length(nsig)+1X[nsig]<-0# Reconstruct the signal and compare it to the original signal.xx <- idct(X)plot(x, type ="l")lines(xx, col ="red")legend("bottomright", legend = c("Original", paste("Reconstructed, N =", N)), lty =1, col =1:2)