Tengo problemas para descubrir cómo seguir los rápidos diagramas del algoritmo DCT 8x8 que se encuentran en los siguientes dos documentos:
(1) Un algoritmo computacional rápido para la transformación discreta del coseno por Chen et al.
y
(2) Algoritmos prácticos rápidos de DCT 1-D con 11 multiplicaciones de Loeffler et al.
En particular, el segundo diagrama que muestra el algoritmo en (2) tiene el siguiente aspecto:
La descripción de las operaciones en este algoritmo son:
Hay algunas preguntas que tengo sobre esta formulación, y no estoy seguro de dónde encontrar las respuestas:
(2) sugiere que este algoritmo genera un DCT que se escala en algún valor . Menciona que este fue elegido arbitrariamente para evitar cualquier multiplicación en el cálculo del coeficiente DC. Realmente el único requisito es que . Entonces mi pregunta es esta: ¿Cuál es el factor de escala de los coeficientes de salida usando este algoritmo? Parece que son diferentes a la definición original de DCT, pero no sé cuánto (principalmente porque realmente no veo ninguna relación entre este diagrama y la formulación original de DCT): donde
para y para .El documento establece que la realización del IDCT se puede hacer usando exactamente el mismo algoritmo pero transformando las salidas en entradas y viceversa. Primero, ¿deben ordenarse los coeficientes DCT en orden de inversión de bits antes de ejecutarlos a través del IDCT? Segundo, para los bloques de rotación (los cuadrados en el diagrama), la operación inversa no debería ser: Mi razonamiento es este: la inversa de una rotación por es una rotación por . Por lo tanto, simplemente reemplazamos el ángulo por su inverso y usamos las identidades y
. Tercero, ¿cuál es el factor de escala de los valores transformados después del IDCT? (2) dice , pero empíricamente, esto no ha producido resultados correctos.Supongamos que después de ejecutar el algoritmo, tengo el resultado de cada carril almacenado en los valores
d0 ... d7. Cual de los siguientes es correcto:salida [0] = d0 o salida [0] = d0 salida [4] = d1 salida [1] = d4 salida [2] = d2 salida [2] = d2 salida [6] = d3 salida [3] = d6 salida [7] = d4 salida [4] = d7 salida [3] = d5 salida [5] = d3 salida [5] = d6 salida [6] = d5 salida [1] = d7 salida [7] = d1
Si hay alguna forma de mejorar esta pregunta, o si debo preguntar en otro lado, hágamelo saber.



Respuestas:
Muy bien, después de algunos días de mirar este problema, espero poder brindar un poco de orientación a la próxima pobre alma.
scipy.fftpack.dctel término DC es y los otros términos . Pero aparentemente todo se cancela muy bien en la transformación inversa.También tenga en cuenta que hay un error en el gráfico y es para el bloque de rotación del lado par.2–√c6
fuente