【 MATLAB 】信号处理工具箱之 idct 简介及案例分析

举报
李锐博恩 发表于 2021/07/15 05:35:32 2021/07/15
【摘要】 有关idct的基础知识见博文:【 MATLAB 】逆离散余弦变换(idct)的基础知识介绍 idct 逆离散余弦变换 Syntax x = idct(y) x = idct(y,n) x = idct(y,n,dim) y = dct(___,'Type',dcttype) Description x = idct (y) 返回输入数组 y 的逆离散余弦...

有关idct的基础知识见博文:【 MATLAB 】逆离散余弦变换(idct)的基础知识介绍

idct

逆离散余弦变换


Syntax

x = idct(y)

x = idct(y,n)

x = idct(y,n,dim)

y = dct(___,'Type',dcttype)


Description

x = idct (y) 返回输入数组 y 的逆离散余弦变换。输出 x 的大小与 y 相同。如果 y 具有多个维度, 则 idct 沿第一个数组维度运行, 大小大于1。

x = idct (y, n) 填充0或截断 y 到长度 n 在转换前的相关维度。

x = idct (y、n、dim) 计算沿维度dim的变换。若要输入维度并使用默认值 n, 请将第二个参数指定为空 []。

y = dct(___,'Type',dcttype) specifies the type of inverse discrete cosine transform to compute. 


Signal Reconstruction Using Inverse Discrete Cosine Transform

生成一个信号, 由 25 hz 正弦采样 1000 hz 1 秒。正弦波嵌入在具有方差0.01 的白色高斯噪声中。


  
  1. clc
  2. clear
  3. close all
  4. % Generate a signal that consists of a 25 Hz sinusoid sampled at 1000 Hz for 1 second.
  5. % The sinusoid is embedded in white Gaussian noise with variance 0.01.
  6. rng('default')
  7. Fs = 1000;
  8. t = 0:1/Fs:1-1/Fs;
  9. x = sin(2*pi*25*t) + randn(size(t))/10;
  10. % 计算序列的离散余弦变换。
  11. % 确定1000个 DCT 系数中有多少是显著的。
  12. % 选择1作为重要性的阈值。
  13. y = dct(x);
  14. sigcoeff = abs(y) >= 1;
  15. howmany = sum(sigcoeff)
  16. % Reconstruct the signal using only the significant components.
  17. y(~sigcoeff) = 0; %~ means not
  18. z = idct(y);
  19. % Plot the original and reconstructed signals.
  20. subplot(2,1,1)
  21. plot(t,x)
  22. yl = ylim;
  23. title('Original')
  24. subplot(2,1,2)
  25. plot(t,z)
  26. ylim(yl)
  27. title('Reconstructed')

上面这段程序中,简单地做几点解释:

sigcoeff = abs(y) >= 1;

由于1是阈值,所以判断向量y中元素大于阈值的元素个数,这条语句可以改写为:sigcoeff = ( abs(y) >= 1 ) ;这样可以更清晰。

sigcoeff向量中得到的是逻辑值,元素1代表该位置的系数元素大于阈值。

后面用语句:howmany = sum(sigcoeff);

得到系数中大于阈值的个数,也就是重要系数个数。

y(~sigcoeff) = 0;      %~ means not 

这条语句的意思是将系数中的不重要的系数都置零。

最后:yl = ylim;表示获取当前x,y坐标轴的限制。

ylim(yl);表示当前画图的x,y坐标轴的限制和yl一致。

结果为:


DCT Orthogonality

验证离散余弦变换的不同变体是否正交, 使用随机信号作为基准。

从生成信号开始。


  
  1. clc
  2. clear
  3. close all
  4. % Verify that the different variants of the discrete cosine transform are orthogonal, using a random signal as a benchmark.
  5. %
  6. % Start by generating the signal.
  7. s = randn(1000,1);
  8. % Verify that DCT-1 and DCT-4 are their own inverses.
  9. dct1 = dct(s,'Type',1);
  10. idt1 = idct(s,'Type',1);
  11. max(abs(dct1-idt1))
  12. % ans = 1.3323e-15
  13. dct4 = dct(s,'Type',4);
  14. idt4 = idct(s,'Type',4);
  15. max(abs(dct4-idt4))
  16. % ans = 1.3323e-15
  17. % Verify that DCT-2 and DCT-3 are inverses of each other.
  18. dct2 = dct(s,'Type',2);
  19. idt2 = idct(s,'Type',3);
  20. max(abs(dct2-idt2))
  21. % ans = 4.4409e-16
  22. dct3 = dct(s,'Type',3);
  23. idt3 = idct(s,'Type',2);
  24. max(abs(dct3-idt3))
  25. % ans = 1.1102e-15

 

 

 

 

 

 

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/83149307

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。