1. 程式人生 > >【 MATLAB 】訊號處理工具箱之 dct 簡介及案例分析

【 MATLAB 】訊號處理工具箱之 dct 簡介及案例分析

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')

得到:

 

上面這個例子中用到了下面博文中的知識點:

【 MATLAB 】norm ( Vector and matrix norms )(向量範數以及矩陣範數)

【 MATLAB 】範數的必備基礎知識

【 MATLAB 】sort ( Sort array elements )