修正離散コサイン変換(MDCT)は、タイプIV離散コサイン変換(DCT-IV)をベースとした変換であり、重ね合わせ処理という特性が追加されています。つまり、より大きなデータセットの連続するブロックに対して実行されるように設計されており、連続するブロックは重ね合わされ、あるブロックの後半部分が次のブロックの前半部分と一致するようになっています。この重ね合わせ処理は、DCTのエネルギー圧縮特性に加えて、ブロック境界に起因するアーティファクトを回避するのに役立つため、信号圧縮アプリケーションにおいて特に魅力的なものとなっています。これらの利点から、MDCTは音声データ圧縮において最も広く使用されている非可逆圧縮技術となっています。MP3、Dolby Digital ( AC - 3)、Vorbis (Ogg)、Windows Media Audio (WMA)、ATRAC、Cook、Advanced Audio Coding (AAC) [ 1 ]、High -Definition Coding (HDC) [ 2 ] 、 LDAC、Dolby AC-4 [ 3 ]、MPEG-H 3D Audio [ 4 ]などの最新のオーディオ コーディング規格、およびAAC-LD (LD-MDCT) [ 5 ]、G.722.1 [ 6 ] 、 G.729.1 [ 7 ] 、 CELT [ 8 ] 、 Opus [ 9 ] [ 10 ]などの音声コーディング規格で採用されています。
離散コサイン変換(DCT)は、 1972年にNasir Ahmedによって初めて提案され[ 11 ] 、 1974年にAhmed、T. Natarajan、 KR Raoによって実証されました[ 12 ]。MDCTは、1987年にサリー大学のJohn P. Princen、AW Johnson、Alan B. Bradleyによって提案されました[ 13 ]。これは、PrincenとBradley(1986)[ 14 ]によるMDCTの基本原理である時間領域エイリアシングキャンセル(TDAC)の開発に続くものです。(離散サイン変換に基づく類似の変換であるMDSTや、異なるタイプのDCTまたはDCT/DSTの組み合わせに基づく、あまり使用されないMDCTの形式も存在します。)
MP3では、MDCTは音声信号に直接適用されるのではなく、32バンドのポリフェーズ直交フィルタ(PQF)バンクの出力に適用されます。このMDCTの出力は、PQFフィルタバンク特有のエイリアシングを低減するために、エイリアシング低減式によって後処理されます。このようなフィルタバンクとMDCTの組み合わせは、ハイブリッドフィルタバンクまたはサブバンドMDCTと呼ばれます。一方、AACは通常、純粋なMDCTを使用します。(めったに使用されない) MPEG-4 AAC-SSRバリアント(ソニー製)のみが、4バンドのPQFバンクの後にMDCTを使用します。MP3と同様に、ATRACはスタックされた直交ミラーフィルタ(QMF)の後にMDCTを使用します。
MDCTは、重ね合わせ変換であるため、他のフーリエ変換とは異なり、入力数と同じ数ではなく、出力数が半分であるという点でやや特殊です。特に、線形関数です。(ここでRは実数の集合を表す)。2 N 個の実数x 0 , ..., x 2 N −1は、次の式に従ってN 個の実数X 0 , ..., X N −1に変換される。
この変換の前の正規化係数(ここでは1)は任意の慣例であり、治療法によって異なります。制約を受けるのは、以下に示すMDCTとIMDCTの正規化の積のみです。
逆MDCTはIMDCTとして知られています。入力と出力の数が異なるため、一見するとMDCTは可逆ではないように思えるかもしれません。しかし、連続する重複ブロックの重複IMDCTを加算することで完全な可逆性が実現され、エラーが相殺されて元のデータが復元されます。この手法は時間領域エイリアシングキャンセル(TDAC)として知られています。
IMDCTは、次の式に従ってN個の実数X₀ , ..., XN - 1を2N個の実数y₀ , ..., y2N - 1に変換します。
直交変換であるDCT-IVと同様に、逆変換は順変換と同じ形式を持つ。
通常のウィンドウ正規化(下記参照)を用いたウィンドウ付きMDCTの場合、IMDCTの前の正規化係数は2倍する必要があります(つまり、2/ Nになります)。
MDCT 式を直接適用すると O( N 2 ) 回の演算が必要になりますが、高速フーリエ変換(FFT)のように計算を再帰的に因数分解することで、同じことを O( N log N ) の計算量で実現できます。また、DFT (FFT) や DCT などの他の変換と O( N ) の前処理および後処理ステップを組み合わせることで、MDCT を計算することもできます。さらに、後述するように、DCT-IV のアルゴリズムは、偶数サイズの MDCT および IMDCT を計算する方法を即座に提供します。

一般的な信号圧縮アプリケーションでは、上記のMDCT 式ではx nに、IMDCT 式ではy nにウィンドウ関数w n ( n = 0, ..., 2 N − 1) を乗じることで変換特性がさらに改善されます。これは、 n = 0 と 2 N の境界で関数が滑らかにゼロに収束するようにすることで、境界での不連続性を回避するためです。(つまり、ウィンドウ関数はMDCT の前またはIMDCTの後にデータに適用されます。) 原理的には、xとy は異なるウィンドウ関数を持つことができ、ウィンドウ関数はブロックごとに変化することもあります (特に、異なるサイズのデータブロックが結合される場合) が、ここでは簡略化のため、同じサイズのブロックに対して同一のウィンドウ関数を使用する一般的なケースを検討します。
対称ウィンドウw n = w 2 N −1− nの場合、 w がプリンセン・ブラッドリー条件を満たす 限り、変換は可逆性を維持します(つまり、TDAC が機能します)。
さまざまなウィンドウ関数が使用される。変調ラップ変換(MLT) [ 15 ] [ 16 ]として知られる形式を生成するウィンドウは、次のように与えられる。
MP3およびMPEG-2 AACに使用され、
Vorbisの場合。AC-3はカイザー・ベッセル派生(KBD)ウィンドウを使用し、MPEG-4 AACもKBDウィンドウを使用できます。
MDCTに適用されるウィンドウは、プリンセン・ブラッドレー条件を満たす必要があるため、他の信号解析で使用されるウィンドウとは異なります。この違いの理由の一つは、MDCTウィンドウがMDCT(解析)とIMDCT(合成)の両方に2回適用されることです。
定義を詳しく見てみるとわかるように、Nが偶数の 場合、MDCTは本質的にDCT-IVと等価であり、入力はN /2だけシフトされ、2つのNブロックのデータが同時に変換されます。この等価性をより詳しく調べることで、TDACなどの重要な特性を容易に導き出すことができます。
DCT-IVとの正確な関係を定義するには、DCT-IVが偶数/奇数の境界条件が交互に現れることを理解する必要がある。すなわち、左境界(n = − 1/2付近)では偶数、右境界(n = N − 1/2付近)では奇数、といった具合である(DFTのような周期境界ではない)。これは、次の恒等式から導かれる。
そして
したがって、入力が長さNの配列xである場合、この配列を ( x、− x R、− x、x R 、 ...)などに拡張することを想像できます。ここで、x Rはx を逆順にしたものを表します。
2 N 個の入力とN 個の出力を持つ MDCT を考えます。入力はそれぞれサイズN /2 の 4 つのブロック ( a、b、c、d ) に分割されます。これらを (MDCT の定義の + N /2 項から) N /2だけ右にシフトすると、( b、c、d ) はN 個のDCT-IV 入力の末尾を超えて伸びるため、上記の境界条件に従って折り返す必要があります。
このように、DCT-IVを計算するためのアルゴリズムは、MDCTにも容易に適用できる。
同様に、上記の IMDCT 式は、DCT-IV (その逆変換) のちょうど 1/2 であり、出力は (境界条件を介して) 長さ 2N に拡張され、N /2だけ左にシフトされます。逆 DCT-IV は、上記の入力 ( −cR − d 、a − bR )を単純に返します。これを境界条件を介して拡張してシフトすると、次の式が得られます。
したがって、IMDCT の出力の半分は冗長であり、b − a R = − ( a − b R ) Rとなり、最後の 2 つの項についても同様です。入力をサイズNのより大きなブロックA、Bにグループ化すると、A = ( a、b ) およびB = ( c、d ) の場合、この結果をより簡単に記述できます。
これでTDACの仕組みが理解できるだろう。次に、50%重複する2Nブロック(B、C)のMDCTを計算するとしよう。すると、IMDCTは上記と同様に(B − B R、C + C R)/2となる。これを重複する半分の前のIMDCTの結果に加えると、逆の項が相殺され、単純にBが得られ、元のデータが復元される。
「時間領域エイリアシングキャンセル」という用語の由来はこれで明らかになった。論理DCT-IVの境界を超える入力データを使用すると、ナイキスト周波数を超える周波数が低周波数にエイリアシングされるのと同様に、データにエイリアシングが発生する。ただし、このエイリアシングは周波数領域ではなく時間領域で発生する。つまり、( a , b , c , d )のMDCT 、あるいは同等に、結果に対するaとb Rの寄与を区別することはできない 。
c − d Rなどの組み合わせは、加算したときに相殺されるのにちょうど良い符号を持っています。
奇数N(実際にはほとんど使用されない)の場合、 N /2は整数ではないため、MDCTはDCT-IVの単純なシフト順列ではありません。この場合、半サンプル分の追加シフトにより、MDCT/IMDCTはDCT-III/IIと等価になり、解析は上記と同様になります。
上で見たように、2 N 個の入力 ( a、b、c、d )の MDCT は、 N 個の入力 (− c R − d、a − b R ) の DCT-IV と等価です。 DCT-IV は、右境界での関数が奇関数である場合、つまり右境界付近の値が 0 に近い場合を想定して設計されています。入力信号が滑らかな場合、このようになります。入力シーケンス ( a、b、c、d ) では、 aとb Rの右端の成分が連続しており、したがってそれらの差は小さくなります。区間の中央を見てみましょう。上記の式を (− c R − d、a − b R ) = (− d、a ) − ( b、c ) Rと書き直すと、第 2 項 ( b、c ) Rは中央で滑らかな遷移を示します。しかし、最初の項 (− d , a ) では、− dの右端がaの左端と交わる箇所で不連続になる可能性があります。これが、入力シーケンス ( a , b , c , d ) の境界付近の成分を 0 に近づけるウィンドウ関数を使用する理由です。
上記では、通常のMDCTについてTDAC特性が証明され、重複する半分のブロックのIMDCTを加算することで元のデータが復元されることが示された。ウィンドウ付きMDCTにおけるこの逆特性の導出は、わずかに複雑になるだけである。
サイズ N のブロックA、B、Cに対して、 2 つの連続する重複入力セット ( A、B ) と ( B、C )を考えます。上記で述べたように、そしてMDCT、IMDCT、およびそれらの重なり合う半分を加算すると、元のデータ。
ここで、 MDCT入力とIMDCT出力の両方に長さ2Nのウィンドウ関数を乗じると仮定します。上記と同様に、対称なウィンドウ関数を仮定します。したがって、その形式は次のようになります。ここで、Wは長さNのベクトルであり、Rは以前と同様に反転を表す。すると、プリンセン・ブラッドリー条件は次のように書ける。二乗と加算は要素ごとに実行される。
したがって、MDCTの代わりに我々は今MDCT(すべての乗算は要素ごとに実行されます)。これをIMDCTし、ウィンドウ関数で再度(要素ごとに)乗算すると、最後のN個の半分は次のようになります。
(ウィンドウ処理の場合、IMDCT正規化の係数が2倍異なるため、1/2を乗算する必要がなくなることに注意してください。)
同様に、ウィンドウMDCTとIMDCTは前半Nでは以下の収率が得られます。
これら2つの半分を足し合わせると、次のようになります。
元のデータを復元する。