Я не эксперт в DCT, но я написал несколько FFT-реализаций в свое время, поэтому я попытаюсь ответить на этот вопрос. Пожалуйста, возьмите следующее с щепоткой соли.
void njRowIDCT(int* blk)
Вы правильно говорите, что алгоритм представляет собой DCT Radix-2 длиной 8, который использует арифметику с фиксированной точкой с точностью 24: 8. Я предполагаю точность, потому что последняя ступень справа сдвигается на 8, чтобы получить желаемое (это и комментарий рассказывающего рассказа;)
Поскольку его длина 8, его мощность равна 3 (2 ^ 3 = 8), что означает, что в DCT есть 3 ступени. Пока что все это очень похоже на БПФ. «Четвертая стадия» - это просто масштабирование для восстановления исходной точности после арифметики с фиксированной точкой.
Насколько я вижу, входной каскад представляет собой обращение битов от входного массива blk к локальным переменным x0-x7. х8 кажется временной переменной. Извините, я не могу быть более наглядным, чем это.
Стадия обращения бит
Обновление
Взгляните на DSP для ученых и инженеров . Это дает четкое и точное объяснение тем обработки сигналов. Эта глава посвящена DCT (перейдите к p497).
Wn (множители) соответствуют базисным функциям в этой главе, хотя обратите внимание, что это описание DCT 8x8 (2D).
В отношении трех этапов, которые я упомянул, сравните с описанием 8-точечного БПФ:
БПФ выполняет бабочек на обращенном к битам входном массиве (которые по сути являются сложными многократными сложениями), умножая один путь на Wn или коэффициент твида. БПФ выполняется поэтапно. Я до сих пор не выяснил, что делает ваш код DCT, но разложение на такую диаграмму может помочь.
Тот или кто-то, кто знает, о чем они говорят, подойдут; -)
Я вернусь на эту страницу и отредактирую по мере расшифровки кода