版权声明:本博客内容来自于个人学习过程中的总结,参考了互联网以及书本、论文等上的内容,仅供学习交流使用,如有侵权,请联系我会重写!转载请注明地址! https://blog.csdn.net/Reborn_Lee/article/details/83117706
dct
Discrete cosine transform
Syntax
y = dct(x)
y = dct(x,n)
y = dct(x,n,dim)
y = dct(___,'Type',dcttype)
Description
y = dct(x)返回输入数组x的酉离散余弦变换。 输出y的大小与x相同。 如果x具有多个维度,则dct沿第一个数组维度运行,其大小大于1。
y = dct(x,n)在转换之前将x的相关维度填充或截断为长度n。
y = dct(x,n,dim)计算沿维度dim的变换。 要输入维度并使用默认值n,请将第二个参数指定为空,[]。
y = dct(___,'Type',dcttype)指定要计算的离散余弦变换的类型。 有关详细信息,请参见离散余弦变换。 此选项可以与任何以前的语法结合使用。
Discrete Cosine Transform
离散余弦变换(DCT)与离散傅立叶变换密切相关。 您通常可以从几个DCT系数非常精确地重建序列。 此属性对需要数据减少的应用程序很有用。
DCT有四种标准型号。 对于长度为N的信号x,以及具有δkℓ的Kronecker delta,变换由下式定义:
该系列从n = 1和k = 1索引,而不是通常的n = 0和k = 0,因为MATLAB®向量从1到N而不是从0到N - 1。
DCT的所有变体都是单一的(或等效地,正交):要找到它们的反转,在每个定义中切换k和n。 特别地,DCT-1和DCT-4是它们自己的逆,并且DCT-2和DCT-3是彼此相反的。
Energy Stored in DCT Coefficients
找出有多少DCT系数代表序列中99%的能量。
clc
clear
close all
% Find how many DCT coefficients represent 99% of the energy in a sequence.
x = (1:100) + 50*cos((1:100)*2*pi/40);
X = dct(x);
[XX,ind] = sort(abs(X),'descend');
i = 1;
while norm(X(ind(1:i)))/norm(X) < 0.99
i = i + 1;
end
needed = i;
% Reconstruct the signal and compare it to the original signal.
X(ind(needed+1:end)) = 0;
xx = idct(X);
plot([x;xx]')
legend('Original',['Reconstructed, N = ' int2str(needed)], ...
'Location','SouthEast')
得到:
上面这个例子中用到了下面博文中的知识点: