Main Content

Transformación coseno discreta

La transformación discreta del coseno (DCT) está estrechamente relacionada con la transformación discreta de Fourier (DFT). El DFT es en realidad un paso en el cálculo del DCT para una secuencia. El DCT, sin embargo, tiene mejor que el DFT, con sólo algunos de los coeficientes de transformación que representan la mayoría de la energía en la secuencia.compactación energética Esta propiedad del DCT lo hace útil en aplicaciones como las comunicaciones de datos y la codificación de señales.

Variantes DCT

El DCT tiene cuatro variantes estándar. Para una señal de longitud, y conxN

<math display="block">
<mrow>
<msub>
<mrow>
<mi>δ</mi>
</mrow>
<mrow>
<mi>k</mi>
<mo></mo>
</mrow>
</msub>
</mrow>
</math>
el delta de Kronecker, las transformaciones se definen por:

  • DCT-1:

<math display="block">
<mrow>
<mi>y</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msqrt>
<mrow>
<mrow>
<mfrac>
<mrow>
<mn>2</mn>
</mrow>
<mrow>
<mrow>
<mi>N</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mrow>
</mfrac>
</mrow>
</mrow>
</msqrt>
<munderover>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>n</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</munderover>
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mrow>
<msqrt>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mrow>
<msub>
<mrow>
<mi>δ</mi>
</mrow>
<mrow>
<mi>n</mi>
<mn>1</mn>
</mrow>
</msub>
</mrow>
<mo>+</mo>
<mrow>
<msub>
<mrow>
<mi>δ</mi>
</mrow>
<mrow>
<mi>n</mi>
<mi>N</mi>
</mrow>
</msub>
</mrow>
</mrow>
</msqrt>
</mrow>
</mrow>
</mfrac>
</mrow>
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mrow>
<msqrt>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mrow>
<msub>
<mrow>
<mi>δ</mi>
</mrow>
<mrow>
<mi>k</mi>
<mn>1</mn>
</mrow>
</msub>
</mrow>
<mo>+</mo>
<mrow>
<msub>
<mrow>
<mi>δ</mi>
</mrow>
<mrow>
<mi>k</mi>
<mi>N</mi>
</mrow>
</msub>
</mrow>
</mrow>
</msqrt>
</mrow>
</mrow>
</mfrac>
</mrow>
<mi mathvariant="normal">cos</mi>
<mrow>
<mo>(</mo>
<mrow>
<mrow>
<mfrac>
<mrow>
<mi>π</mi>
</mrow>
<mrow>
<mrow>
<mi>N</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mrow>
</mfrac>
</mrow>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
</mrow>
</math>

  • DCT-2:

<math display="block">
<mrow>
<mi>y</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msqrt>
<mrow>
<mrow>
<mfrac>
<mrow>
<mn>2</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</mfrac>
</mrow>
</mrow>
</msqrt>
<munderover>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>n</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</munderover>
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mrow>
<msqrt>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mrow>
<msub>
<mrow>
<mi>δ</mi>
</mrow>
<mrow>
<mi>k</mi>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mrow>
</msqrt>
</mrow>
</mrow>
</mfrac>
</mrow>
<mi mathvariant="normal">cos</mi>
<mrow>
<mo>(</mo>
<mrow>
<mrow>
<mfrac>
<mrow>
<mi>π</mi>
</mrow>
<mrow>
<mrow>
<mn>2</mn>
<mi>N</mi>
</mrow>
</mrow>
</mfrac>
</mrow>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mi>n</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
</mrow>
</math>

  • DCT-3:

<math display="block">
<mrow>
<mi>y</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msqrt>
<mrow>
<mrow>
<mfrac>
<mrow>
<mn>2</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</mfrac>
</mrow>
</mrow>
</msqrt>
<munderover>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>n</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</munderover>
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mrow>
<msqrt>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mrow>
<msub>
<mrow>
<mi>δ</mi>
</mrow>
<mrow>
<mi>n</mi>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mrow>
</msqrt>
</mrow>
</mrow>
</mfrac>
</mrow>
<mi mathvariant="normal">cos</mi>
<mrow>
<mo>(</mo>
<mrow>
<mrow>
<mfrac>
<mrow>
<mi>π</mi>
</mrow>
<mrow>
<mrow>
<mn>2</mn>
<mi>N</mi>
</mrow>
</mrow>
</mfrac>
</mrow>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
</mrow>
</math>

  • DCT-4:

<math display="block">
<mrow>
<mi>y</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msqrt>
<mrow>
<mrow>
<mfrac>
<mrow>
<mn>2</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</mfrac>
</mrow>
</mrow>
</msqrt>
<munderover>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>n</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</munderover>
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mi mathvariant="normal">cos</mi>
<mrow>
<mo>(</mo>
<mrow>
<mrow>
<mfrac>
<mrow>
<mi>π</mi>
</mrow>
<mrow>
<mrow>
<mn>4</mn>
<mi>N</mi>
</mrow>
</mrow>
</mfrac>
</mrow>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mi>n</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
</mrow>
</math>

La función Signal Processing Toolbox calcula el DCT unitario de una matriz de entrada.dct

Variantes inversas de DCT

Todas las variantes del DCT son (o, equivalentemente, ):UnitarioOrtogonal Para encontrar sus inversas, cambie y en cada definición.kn En particular, DCT-1 y DCT-4 son sus propios inversos, y DCT-2 y DCT-3 son inversos entre sí:

  • Inverso de DCT-1:

<math display="block">
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msqrt>
<mrow>
<mrow>
<mfrac>
<mrow>
<mn>2</mn>
</mrow>
<mrow>
<mrow>
<mi>N</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mrow>
</mfrac>
</mrow>
</mrow>
</msqrt>
<munderover>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</munderover>
<mrow>
<mi>y</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo stretchy="false">)</mo>
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mrow>
<msqrt>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mrow>
<msub>
<mrow>
<mi>δ</mi>
</mrow>
<mrow>
<mi>k</mi>
<mn>1</mn>
</mrow>
</msub>
</mrow>
<mo>+</mo>
<mrow>
<msub>
<mrow>
<mi>δ</mi>
</mrow>
<mrow>
<mi>k</mi>
<mi>N</mi>
</mrow>
</msub>
</mrow>
</mrow>
</msqrt>
</mrow>
</mrow>
</mfrac>
</mrow>
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mrow>
<msqrt>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mrow>
<msub>
<mrow>
<mi>δ</mi>
</mrow>
<mrow>
<mi>n</mi>
<mn>1</mn>
</mrow>
</msub>
</mrow>
<mo>+</mo>
<mrow>
<msub>
<mrow>
<mi>δ</mi>
</mrow>
<mrow>
<mi>n</mi>
<mi>N</mi>
</mrow>
</msub>
</mrow>
</mrow>
</msqrt>
</mrow>
</mrow>
</mfrac>
</mrow>
<mi mathvariant="normal">cos</mi>
<mrow>
<mo>(</mo>
<mrow>
<mrow>
<mfrac>
<mrow>
<mi>π</mi>
</mrow>
<mrow>
<mrow>
<mi>N</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mrow>
</mfrac>
</mrow>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
</mrow>
</math>

  • Inverso de DCT-2:

<math display="block">
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msqrt>
<mrow>
<mrow>
<mfrac>
<mrow>
<mn>2</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</mfrac>
</mrow>
</mrow>
</msqrt>
<munderover>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</munderover>
<mrow>
<mi>y</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo stretchy="false">)</mo>
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mrow>
<msqrt>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mrow>
<msub>
<mrow>
<mi>δ</mi>
</mrow>
<mrow>
<mi>k</mi>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mrow>
</msqrt>
</mrow>
</mrow>
</mfrac>
</mrow>
<mi mathvariant="normal">cos</mi>
<mrow>
<mo>(</mo>
<mrow>
<mrow>
<mfrac>
<mrow>
<mi>π</mi>
</mrow>
<mrow>
<mrow>
<mn>2</mn>
<mi>N</mi>
</mrow>
</mrow>
</mfrac>
</mrow>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mi>n</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
</mrow>
</math>

  • Inverso de DCT-3:

<math display="block">
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msqrt>
<mrow>
<mrow>
<mfrac>
<mrow>
<mn>2</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</mfrac>
</mrow>
</mrow>
</msqrt>
<munderover>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</munderover>
<mrow>
<mi>y</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo stretchy="false">)</mo>
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mrow>
<msqrt>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mrow>
<msub>
<mrow>
<mi>δ</mi>
</mrow>
<mrow>
<mi>n</mi>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mrow>
</msqrt>
</mrow>
</mrow>
</mfrac>
</mrow>
<mi mathvariant="normal">cos</mi>
<mrow>
<mo>(</mo>
<mrow>
<mrow>
<mfrac>
<mrow>
<mi>π</mi>
</mrow>
<mrow>
<mrow>
<mn>2</mn>
<mi>N</mi>
</mrow>
</mrow>
</mfrac>
</mrow>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
</mrow>
</math>

  • Inverso de DCT-4:

<math display="block">
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msqrt>
<mrow>
<mrow>
<mfrac>
<mrow>
<mn>2</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</mfrac>
</mrow>
</mrow>
</msqrt>
<munderover>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow>
<mi>N</mi>
</mrow>
</munderover>
<mrow>
<mi>y</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo stretchy="false">)</mo>
<mi mathvariant="normal">cos</mi>
<mrow>
<mo>(</mo>
<mrow>
<mrow>
<mfrac>
<mrow>
<mi>π</mi>
</mrow>
<mrow>
<mrow>
<mn>4</mn>
<mi>N</mi>
</mrow>
</mrow>
</mfrac>
</mrow>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mi>n</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
</mrow>
</math>

La función calcula el DCT inverso para una secuencia de entrada, reconstruyendo una señal a partir de un conjunto completo o parcial de coeficientes DCT.idct

Reconstrucción de señal mediante DCT

Debido a la propiedad de compactación de energía del DCT, puede reconstruir una señal a partir de solo una fracción de sus coeficientes DCT. Por ejemplo, genere una secuencia sinusoidal de 25 Hz muestreada a 1000 Hz.

t = 0:1/1000:1; x = sin(2*pi*25*t);

Calcular el DCT de esta secuencia y reconstruir la señal utilizando sólo aquellos componentes con un valor mayor que 0.1. Determine cuántos coeficientes del 1000 original satisfacen el requisito.

y = dct(x); y2 = find(abs(y) < 0.1); y(y2) = zeros(size(y2)); z = idct(y);  howmany = length(find(y))
howmany = 64 

Trazar las secuencias originales y reconstruidas.

subplot(2,1,1) plot(t,x) ax = axis; title('Original Signal')  subplot(2,1,2) plot(t,z) axis(ax) title('Reconstructed Signal')

Una medida de la precisión de la reconstrucción es la norma de la diferencia entre las señales originales y reconstruidas, divididas por la norma de la señal original. Calcular esta estimación y expresarla como un porcentaje.

norm(x-z)/norm(x)*100
ans = 1.9437 

La señal reconstruida retiene aproximadamente el 98% de la energía en la señal original.

Consulte también

|

Temas relacionados