Estou tendo problemas para descobrir como seguir os diagramas rápidos do algoritmo DCT 8x8 encontrados nos dois documentos a seguir:
(1) Um algoritmo computacional rápido para a transformação discreta de cossenos por Chen et al.
e
(2) Algoritmos práticos rápidos de DCT 1-D com 11 multiplicações por Loeffler et al.
Em particular, o segundo diagrama que mostra o algoritmo em (2) se parece com o seguinte:
A descrição das operações neste algoritmo são:
Existem algumas perguntas que tenho sobre essa formulação e não tenho certeza de onde encontrar as respostas:
(2) sugere que esse algoritmo gera um DCT escalado por algum valor . Menciona que estefoi escolhido arbitrariamente para evitar multiplicações na computação do coeficiente DC. Realmente o único requisito é que. Então, minha pergunta é a seguinte: Qual é o fator de escala dos coeficientes de saída usando esse algoritmo? Parece que eles são diferentes da definição original do DCT, mas não sei por quanto (principalmente porque não vejo realmente nenhuma relação entre este diagrama e a formulação original do DCT):
Onde para e para .O artigo afirma que a execução do IDCT pode ser feita usando exatamente o mesmo algoritmo, mas transformando saídas em entradas e vice-versa. Primeiro, os coeficientes do DCT devem ser ordenados na ordem inversa de bits antes de executá-los no IDCT? Segundo, para os blocos de rotação (os quadrados no diagrama), a operação inversa não deveria ser:
Meu raciocínio é o seguinte: o inverso de uma rotação por é uma rotação por . Portanto, apenas substituímos o ângulo por seu inverso e usamos as identidades e . Terceiro, qual é o fator de escala dos valores transformados após o IDCT? (2) diz, mas empiricamente, isso não produziu resultados corretos.Suponha que, depois de executar o algoritmo, tenha o resultado de cada pista armazenada nos valores
d0 ... d7
. Qual das seguintes opções está correta:saída [0] = d0 ou saída [0] = d0 saída [4] = d1 saída [1] = d4 saída [2] = d2 saída [2] = d2 saída [6] = d3 saída [3] = d6 saída [7] = d4 saída [4] = d7 saída [3] = d5 saída [5] = d3 saída [5] = d6 saída [6] = d5 saída [1] = d7 saída [7] = d1
Se houver alguma maneira de melhorar essa pergunta ou se eu perguntar em outro lugar, entre em contato.
Respostas:
Tudo bem, depois de alguns dias olhando para esse problema, espero poder fornecer um pouco de orientação para a próxima pobre alma.
scipy.fftpack.dct
o termo DC éObserve também que há um erro no gráfico e é2-√c 6 para o bloco de rotação do lado par.
fonte