找回密码
 注册
关于网站域名变更的通知
查看: 434|回复: 1
打印 上一主题 下一主题

了解一下MATLAB信号处理工具箱之 dct 介绍及案例分析

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-12-20 10:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

2 U4 W9 r9 `1 P" D, C* ^, ]2 t+ sdct, [% o  j; h- W6 {# K9 R  P9 b6 c
Discrete cosine transform
% l$ _8 o+ D) f% V
+ c# ]+ O: b& P( S4 E3 _- @* CSyntax& Z# S* U* g, Y1 v4 r

# K; Y4 A8 ~, B$ O% E4 j! j: @y = dct(x)
5 c" y. E7 N! Y. |$ M$ S: L9 C  k7 k" ]
y = dct(x,n), n! }# J6 R% e) ?( Z9 O  g

7 \/ u" ~3 z" ~' k4 `y = dct(x,n,dim)# A+ C* R% L5 d- l* l4 T1 F" X
8 C# t1 ?, x% s0 I6 p
y = dct(___,'Type',dcttype); s4 ^3 r  U. J0 l
7 u% s+ b/ h4 X) ~, ?( a' q$ l" Y
Description% ~( S8 ]- S- v" O9 M; K6 R
' V' x) y' w3 V& t) i+ i! I: u
y = dct(x)返回输入数组x的酉离散余弦变换。 输出y的大小与x相同。 如果x具有多个维度,则dct沿第一个数组维度运行,其大小大于1。% x$ |- u+ r; e+ _7 h2 h, ^% \7 N
% J1 i$ ]- J7 U' s7 l+ V  b
y = dct(x,n)在转换之前将x的相关维度填充或截断为长度n。: w( l. j+ j1 r4 T+ h9 m( F: S. S
2 |7 ~) N3 m! A) W! M# y
y = dct(x,n,dim)计算沿维度dim的变换。 要输入维度并使用默认值n,请将第二个参数指定为空,[]。
& y$ H8 E4 A5 o6 G" L( U- H
9 s% Q5 A' F( O7 D* ?  q. vy = dct(___,'Type',dcttype)指定要计算的离散余弦变换的类型。 有关详细信息,请参见离散余弦变换。 此选项可以与任何以前的语法结合使用。' l+ n; m; C. v2 P. M1 _/ t& E; Z

( {7 P, o: M/ \" Z% ^Discrete Cosine Transform
* G' p8 u- X, I# |
2 x9 O7 E( \: `# L% f7 ~离散余弦变换(DCT)与离散傅立叶变换密切相关。 您通常可以从几个DCT系数非常精确地重建序列。 此属性对需要数据减少的应用程序很有用。
& d- h2 M. x: ]4 w$ ~  l  K/ n0 L1 h( A
DCT有四种标准型号。 对于长度为N的信号x,以及具有δkℓ的Kronecker delta,变换由下式定义:
$ b' E" R% z6 Q+ w/ ~0 o7 c2 Y0 k+ i: X% [1 g
8 w' x2 x0 n+ K- C7 F

. G, X% N7 ?, L4 E1 M$ ?: V该系列从n = 1和k = 1索引,而不是通常的n = 0和k = 0,因为MATLAB®向量从1到N而不是从0到N - 1。  r3 z% s% s# R; X, L$ c% U

2 u8 \; ]5 o7 j! C( v- FDCT的所有变体都是单一的(或等效地,正交):要找到它们的反转,在每个定义中切换k和n。 特别地,DCT-1和DCT-4是它们自己的逆,并且DCT-2和DCT-3是彼此相反的。) [& u: k% f* F! [; F

% P" W  [* M2 R2 B- F5 p- yEnergy Stored in DCT Coefficients
4 n: a6 w& q4 ]5 q7 ~# H1 l3 }9 o# Z! y6 X
找出有多少DCT系数代表序列中99%的能量。2 x2 N- S) X4 N  u8 |2 ?
4 M! Z) x. o5 p4 ?3 n+ b, k5 I
  • 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')( X0 R3 g. F/ _4 B2 a6 ]/ X; k( D
   
/ B8 P* R) a9 d! D得到:
' T$ N( s# g( `4 y! w; Z
% ^# P" i2 Q+ p/ V2 c; y+ Q0 u; P- j/ i0 p7 H4 a
; e2 T; X* w- E0 e! u
' P  d7 b+ m! |1 X* W& z) k
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-20 10:36 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表