|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
0 M' L- L: [5 t4 Idct2 o, b1 v/ N6 i* N
Discrete cosine transform
5 {' c. ~+ x! \8 ]
: F/ n2 D* `* ^2 A1 [Syntax, u. i' M% P4 z$ g
) R! W8 R; `9 G
y = dct(x)
# g9 \+ K. X2 O) t7 q, C: x8 W
( k Z! U1 I" _' p' N3 C5 x. Uy = dct(x,n)
5 M( b" @. x! X4 R6 P& }. i6 G/ `# P) a9 l3 M/ [
y = dct(x,n,dim)
& b- q# }7 s% F3 j5 ^6 b1 C5 T) W& s
4 t' V$ c/ G; _( Uy = dct(___,'Type',dcttype)
+ c) }4 ?' R# d- x7 S4 |) c8 s- B# T! G: O
Description! o& f8 S% [: y& [( x6 S
3 p7 ?) l% R/ H" j: m r& _; r
y = dct(x)返回输入数组x的酉离散余弦变换。 输出y的大小与x相同。 如果x具有多个维度,则dct沿第一个数组维度运行,其大小大于1。
7 o) Z6 |" J; X; W! r0 G: X0 l# k
y = dct(x,n)在转换之前将x的相关维度填充或截断为长度n。
+ P) g/ ~; M+ F7 r* D9 h
y' H* t* s/ @3 [1 Ny = dct(x,n,dim)计算沿维度dim的变换。 要输入维度并使用默认值n,请将第二个参数指定为空,[]。 x5 G) v8 T0 t. p
- F @& Y+ s, u5 ` v
y = dct(___,'Type',dcttype)指定要计算的离散余弦变换的类型。 有关详细信息,请参见离散余弦变换。 此选项可以与任何以前的语法结合使用。5 k7 ?* A9 f6 `' L/ R2 P
4 \0 Q4 O/ j& x% @ |
Discrete Cosine Transform: p! {/ ~, V# N9 C
1 d5 r) G" u5 |, V( B a0 l
离散余弦变换(DCT)与离散傅立叶变换密切相关。 您通常可以从几个DCT系数非常精确地重建序列。 此属性对需要数据减少的应用程序很有用。6 X4 p) E+ f) n0 P# j. i5 W+ N% Q
0 Z3 L0 T, _; [0 C, c0 D& n) _
DCT有四种标准型号。 对于长度为N的信号x,以及具有δkℓ的Kronecker delta,变换由下式定义:# A' `% F* C3 t
* k8 y4 u& s0 J5 @7 S
0 c' o1 \; x# z4 T) r
4 _6 _& V: C# ?8 I( `( b5 }该系列从n = 1和k = 1索引,而不是通常的n = 0和k = 0,因为MATLAB®向量从1到N而不是从0到N - 1。: m- ^( E4 d8 v# d
g6 g# L/ u. f/ n2 H; y, k1 @
DCT的所有变体都是单一的(或等效地,正交):要找到它们的反转,在每个定义中切换k和n。 特别地,DCT-1和DCT-4是它们自己的逆,并且DCT-2和DCT-3是彼此相反的。$ S1 Q Z. Q8 S$ i+ m
. l+ P! T) l. Z' yEnergy Stored in DCT Coefficients8 e; Q8 I0 Y+ I: f9 h6 u
3 M6 [. q/ T; m) Y/ b$ E
找出有多少DCT系数代表序列中99%的能量。8 b$ N, i" }, I
; }" G0 k s% ^% T, W: k- 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')2 X, h$ b, |* A4 x4 Y
* P6 _8 a8 ^+ s4 I得到:- ~3 r0 d* [& V; e
0 r0 V- w1 L# B6 z! Y
* z+ s3 z0 v+ V4 z }
6 W' V6 T8 V) A5 i. U1 A$ R1 u
& m/ _" B% N# {5 m' A4 u; e |
|