ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

idct

逆離散コサイン変換

構文

x = idct(y)
x = idct(y,n)
x = idct(y,n,dim)
y = idct(___,'Type',dcttype)

説明

x = idct(y) は、入力配列 y の逆離散コサイン変換を返します。出力 x は、y と同じサイズになります。y が複数次元配列である場合、idct は、サイズが 1 より大きい最初の配列次元に沿って動作します。

x = idct(y,n) は、y にゼロを付加するか関連する次元を切り捨て、長さ n にしてから変換します。

x = idct(y,n,dim) は、次元 dim に沿って変換を計算します。次元を入力し、n の既定値を使用するには、2 番目の引数を空 [] として指定します。

y = idct(___,'Type',dcttype) は、計算する逆離散コサイン変換のタイプを指定します。詳細は、逆離散コサイン変換を参照してください。このオプションは、上述の任意の構文と組み合わせることができます。

すべて折りたたむ

1000 Hz で 1 秒間サンプリングされた 25 Hz の正弦波で構成される信号を生成します。正弦波を、分散 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)
howmany = 17

有意な成分のみを使用して信号を再構成します。

y(~sigcoeff) = 0;

z = idct(y);

元の信号と再構成後の信号をプロットします。

subplot(2,1,1)
plot(t,x)
yl = ylim;
title('Original')

subplot(2,1,2)
plot(t,z)
ylim(yl)
title('Reconstructed')

離散コサイン変換のさまざまなバリアントが直交していることを、ランダムな信号をベンチマークとして使用して検証します。

まず、信号を生成します。

s = randn(1000,1);

DCT-1 および DCT-4 がそれ自体の逆変換であることを確認します。

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

DCT-2 および DCT-3 が互いの逆変換であることを確認します。

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

入力引数

すべて折りたたむ

離散コサイン変換の入力。実数値または複素数値のベクトル、行列、N 次元配列または gpuArray オブジェクトとして指定します。

gpuArray オブジェクトの詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)およびリリース別の GPU サポート (Parallel Computing Toolbox)を参照してください。

例: dct(sin(2*pi*(0:255)/4)) は、正弦波の離散コサイン変換を指定します。

例: dct(sin(2*pi*[0.1;0.3]*(0:39))') は、2 チャネルの正弦波の離散コサイン変換を指定します。

データ型: single | double
複素数のサポート: あり

逆変換の長さ。正の整数スカラーで指定します。

データ型: single | double

動作する対象の次元。正の整数スカラーとして指定します。

データ型: single | double

逆離散コサイン変換のタイプ。1 ~ 4 の正の整数スカラーで指定します。

データ型: single | double

出力引数

すべて折りたたむ

逆離散コサイン変換。実数値または複素数値のベクトル、行列、N 次元配列または gpuArray オブジェクトとして返されます。

詳細

すべて折りたたむ

逆離散コサイン変換

逆離散コサイン変換では、離散コサイン変換 (DCT) 係数からシーケンスが復元されます。関数 idct は、関数 dct の逆の演算を行います。

DCT には 4 つの標準バリアントがあります。長さ N でクロネッカー デルタ δkℓ の変換された信号 y の逆変換は、以下により定義されます。

  • DCT-1 の逆変換:

    x(n)=2N1k=1Ny(k)11+δk1+δkN11+δn1+δnNcos(πN1(k1)(n1))

  • DCT-2 の逆変換:

    x(n)=2Nk=1Ny(k)11+δk1cos(π2N(k1)(2n1))

  • DCT-3 の逆変換:

    x(n)=2Nk=1Ny(k)11+δn1cos(π2N(2k1)(n1))

  • DCT-4 の逆変換:

    x(n)=2Nk=1Ny(k)cos(π4N(2k1)(2n1))

MATLAB® のベクトルは 0 から N – 1 ではなく 1 から N で実行されるため、この級数には通常の n = 0 および k = 0 の代わりに、n = 1 および k = 1 のインデックスが付けられます。

DCT のすべてのバリアントは "単項" (または、同等に "直交") です。そのフォワード変換を求めるには、各定義で k と n を切り替えます。特に、DCT-1 と DCT-4 はそれ自体の逆変換で、DCT-2 と DCT-3 は互いの逆変換です。

参照

[1] Jain, A. K. Fundamentals of Digital Image Processing. Englewood Cliffs, NJ: Prentice-Hall, 1989.

[2] Pennebaker, W. B., and J. L. Mitchell. JPEG Still Image Data Compression Standard. New York: Van Nostrand Reinhold, 1993.

[3] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

拡張機能

R2006a より前に導入