【 MATLAB 】訊號處理工具箱之 dct 簡介及案例分析
阿新 • • 發佈:2018-11-11
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 】sort ( Sort array elements )