【 MATLAB 】信号处理工具箱之 idct 简介及案例分析
有关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, 请将第二个参数指定为空 []。
specifies the type of inverse discrete cosine transform to compute. y
= dct(___,'Type',dcttype
)
Signal Reconstruction Using Inverse Discrete Cosine Transform
生成一个信号, 由 25 hz 正弦采样 1000 hz 1 秒。正弦波嵌入在具有方差0.01 的白色高斯噪声中。
-
clc
-
clear
-
close all
-
-
% Generate a signal that consists of a 25 Hz sinusoid sampled at 1000 Hz for 1 second.
-
% The sinusoid is embedded in white Gaussian noise with variance 0.01.
-
-
rng('default')
-
-
Fs = 1000;
-
t = 0:1/Fs:1-1/Fs;
-
x = sin(2*pi*25*t) + randn(size(t))/10;
-
-
% 计算序列的离散余弦变换。
-
% 确定1000个 DCT 系数中有多少是显著的。
-
% 选择1作为重要性的阈值。
-
-
y = dct(x);
-
-
sigcoeff = abs(y) >= 1;
-
-
howmany = sum(sigcoeff)
-
-
% Reconstruct the signal using only the significant components.
-
-
y(~sigcoeff) = 0; %~ means not
-
-
z = idct(y);
-
% Plot the original and reconstructed signals.
-
-
subplot(2,1,1)
-
plot(t,x)
-
yl = ylim;
-
title('Original')
-
-
subplot(2,1,2)
-
plot(t,z)
-
ylim(yl)
-
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
验证离散余弦变换的不同变体是否正交, 使用随机信号作为基准。
从生成信号开始。
-
clc
-
clear
-
close all
-
-
% Verify that the different variants of the discrete cosine transform are orthogonal, using a random signal as a benchmark.
-
%
-
% Start by generating the signal.
-
-
s = randn(1000,1);
-
% Verify that DCT-1 and DCT-4 are their own inverses.
-
-
dct1 = dct(s,'Type',1);
-
idt1 = idct(s,'Type',1);
-
-
max(abs(dct1-idt1))
-
% ans = 1.3323e-15
-
dct4 = dct(s,'Type',4);
-
idt4 = idct(s,'Type',4);
-
-
max(abs(dct4-idt4))
-
% ans = 1.3323e-15
-
% Verify that DCT-2 and DCT-3 are inverses of each other.
-
-
dct2 = dct(s,'Type',2);
-
idt2 = idct(s,'Type',3);
-
-
max(abs(dct2-idt2))
-
% ans = 4.4409e-16
-
dct3 = dct(s,'Type',3);
-
idt3 = idct(s,'Type',2);
-
-
max(abs(dct3-idt3))
-
% ans = 1.1102e-15
文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。
原文链接:reborn.blog.csdn.net/article/details/83149307
- 点赞
- 收藏
- 关注作者
评论(0)