我一直试图找到一个快速的 16 点 dct2 和 dct3 实现,但是我只能在以数学方程表示的文献中找到它,老实说我无法理解。
但是我确实找到了一个输出 dft 转换的代码生成器。我遇到的主要问题是 DFT 和逆 DFT 没有相同的数字进出。
// Before DFT // After DFT and IDFT
inputArray[ 0] = 12; outputArray[ 0] = 184;
inputArray[ 1] = 12; outputArray[ 1] = 194;
inputArray[ 2] = 12; outputArray[ 2] = 178;
inputArray[ 3] = 14; outputArray[ 3] = 198;
inputArray[ 4] = 8; outputArray[ 4] = 155;
inputArray[ 5] = 10; outputArray[ 5] = 141;
inputArray[ 6] = 12; outputArray[ 6] = 164;
inputArray[ 7] = 12; outputArray[ 7] = 149;
inputArray[ 8] = 12; outputArray[ 8] = 138;
inputArray[ 9] = 12; outputArray[ 9] = 121;
inputArray[10] = 12; outputArray[10] = 107;
inputArray[11] = 12; outputArray[11] = 90;
inputArray[12] = 12; outputArray[12] = 74;
inputArray[13] = 12; outputArray[13] = 55;
inputArray[14] = 12; outputArray[14] = 37;
inputArray[15] = 12; outputArray[15] = 19;
我意识到前 5 个左右的索引在除以 16 时确实等于输入,但是随着您下降,这种趋势不会继续。
这是预期的行为吗?或者我还需要做些什么来获得正确的转换吗?
此外,我确实找到了一个 8点 dct效果很好并给出了正确的结果,有没有办法将它扩展到一个快速的 16 点 dct?
编辑:
我想找到一个快速的 16x16 DCT 的原因是因为我正在开发一个支持透明度的 javascript 视频编解码器。
所以在帧间预测完成后,我留下了很多残留物。因为它在 javascript 中,并且每秒处理 24 帧,所以我需要尽可能快的方法来压缩和解压缩这个残留物。