¿Cuáles son las diferencias entre un (discreta) de transformación de coseno y un (discreta) de la transformada de Fourier? Sé el primero se usa en la codificación JPEG, mientras que el segundo juega un papel importante en el procesamiento de señales e imágenes. ¿Cómo son ellos?
Respuesta
¿Demasiados anuncios?Coseno transforma no son más que accesos directos para el cálculo de la transformada de Fourier de una secuencia especial de simetría (por ejemplo, si la secuencia representa muestras de una función par).
Para dar un ejemplo concreto en Mathematica ($VersionNumber >= 6
), considere la secuencia
smp = {1., 2., 3., 4., 5., 4., 3., 2.};
La secuencia tiene redundancia (por ejemplo smp[[2]] == smp[[8]]
, pero tenga en cuenta que en la costumbre de Fourier de trabajo, la indexación es de $0$ $n-1$en lugar de $1$$n$). Una secuencia como smp
se denomina incluso de la secuencia. La transformada de Fourier discreta de la smp
se puede esperar a tener redundancia así:
Fourier[smp] // Chop
{8.48528137423857, -2.414213562373095, 0, -0.4142135623730949, 0,
-0.4142135623730949, 0, -2.414213562373095}
y la transformada de Fourier discreta es la misma también. Uno podría aspirar a tener una manera de calcular la transformada de Fourier discreta, sin redundancia, y aquí es donde el tipo I de la transformada discreta del coseno (DCT-I):
FourierDCT[Take[smp, Length[smp]/2 + 1], 1] // Chop
{8.48528137423857, -2.414213562373095, 0., -0.4142135623730949, 0.}
El más habitual de tipo II transformada discreta del coseno (DCT-II) es la redundancia-método para el cálculo de la transformada de Fourier de un así llamado "cuarto de onda, incluso," de la secuencia (con una transformación adicional para hacer que los resultados totalmente real para entradas reales). Un cuarto de onda, incluso la secuencia se parece a esto:
smp = {1., 2., 3., 4., 4., 3., 2., 1.};
y la correspondencia (por ejemplo smp[[2]] == smp[[7]]
) se ve fácilmente. DCT-II requiere sólo la mitad de la secuencia que se indica a hacer su trabajo:
Exp[2 Pi I Range[0, 7]/16] Fourier[smp]/Sqrt[2] // Chop
{4.999999999999999, -1.5771610149494746, 0, -0.11208538229199128, 0,
0.11208538229199126, 0, 1.5771610149494748}
FourierDCT[Take[smp, Length[smp]/2], 2] // Chop
{5., -1.577161014949475, 0, -0.11208538229199139}
(Podemos ver en este ejemplo que la explotación de la simetría en este caso llevó a un poco más de precisión.)
Los otros dos tipos de coseno discreta transforma, así como los cuatro tipos de discretos sine transforma, están destinados a ser redundancia libre de métodos para calcular discreta de Fourier. Para DCT-I, se puede tratar con una secuencia de longitud $\frac{N}{2}+1$, en lugar de una secuencia de longitud $N$, mientras que para DCT-II, sólo una longitud de $\frac{N}{2}$ secuencia es necesaria. Esto representa un ahorro en el tiempo de cómputo y esfuerzo. (Supongo que el caso de la longitud de aquí; de longitud impar, similares propiedad de simetría puede ser establecido para el caso de longitud impar).
En cualquier caso, quiero señalar dos buenas referencias sobre cómo FFT y la DCTs/Dst están relacionados con: Van del Préstamo Computacional Marcos para la transformada Rápida de Fourier y Briggs/Henson de La DFT: un manual del propietario para la transformada de Fourier discreta.