I'm back. As i was in a hurry in my last post, i didn't included this: i had converted the 16-bits QM table to 8 bits (simply by getting the 8 higher bits of every value). I will post it here (this is before doing any modification as i commented before) for the shake of using common terminology. As said, while there are values that obviously won't be used (as they are 0), i prefer to maintain the same ordering than the original at this point. We always can simplify it when all be understood.
Code: Select all
struct evolution_node
{
uint8 Qe;
uint8 nextLps;
uint8 nextMps;
uint8 mpsExch;
};
struct evolution_node evolution_table[] = {
{0x5a, 1, 1,1}, //0
{0x25, 14, 2,0}, //1
{0x11, 16, 3,0}, //2
{0x08, 18, 4,0}, //3
{0x03, 20, 5,0}, //4
{0x01, 23, 6,0}, //5
{0x00, 25, 7,0}, //6
{0x00, 28, 8,0}, //7
{0x00, 30, 9,0}, //8
{0x00, 33, 10,0}, //9
{0x00, 35, 11,0}, //10
{0x00, 9, 12,0}, //11
{0x00, 10, 13,0}, //12
{0x00, 12, 14,0}, //13
{0x5a, 15, 15,1}, //14
{0x3f, 36, 16,0}, //15
{0x2c, 38, 17,0}, //16
{0x20, 39, 18,0}, //17
{0x17, 40, 19,0}, //18
{0x11, 42, 20,0}, //19
{0x0c, 43, 21,0}, //20
{0x09, 45, 22,0}, //21
{0x07, 46, 23,0}, //22
{0x05, 48, 24,0}, //23
{0x04, 49, 25,0}, //24
{0x03, 51, 26,0}, //25
{0x02, 52, 27,0}, //26
{0x01, 54, 28,0}, //27
{0x01, 56, 29,0}, //28
{0x00, 57, 30,0}, //29
{0x00, 59, 31,0}, //30
{0x00, 60, 32,0}, //31
{0x00, 62, 33,0}, //32
{0x00, 63, 34,0}, //33
{0x00, 32, 35,0}, //34
{0x00, 33, 9,0}, //35
{0x5a, 37, 37,1}, //36
{0x48, 64, 38,0}, //37
{0x3a, 65, 39,0}, //38
{0x2e, 67, 40,0}, //39
{0x26, 68, 41,0}, //40
{0x1f, 69, 42,0}, //41
{0x19, 70, 43,0}, //42
{0x15, 72, 44,0}, //43
{0x11, 73, 45,0}, //44
{0x0e, 74, 46,0}, //45
{0x0b, 75, 47,0}, //46
{0x09, 77, 48,0}, //47
{0x08, 78, 49,0}, //48
{0x07, 79, 50,0}, //49
{0x05, 48, 51,0}, //50
{0x04, 50, 52,0}, //51
{0x04, 50, 53,0}, //52
{0x03, 51, 54,0}, //53
{0x02, 52, 55,0}, //54
{0x02, 53, 56,0}, //55
{0x01, 54, 57,0}, //56
{0x01, 55, 58,0}, //57
{0x01, 56, 59,0}, //58
{0x01, 57, 60,0}, //59
{0x00, 58, 61,0}, //60
{0x00, 59, 62,0}, //61
{0x00, 61, 63,0}, //62
{0x00, 61, 32,0}, //63
{0x5b, 65, 65,1}, //64
{0x4d, 80, 66,0}, //65
{0x41, 81, 67,0}, //66
{0x37, 82, 68,0}, //67
{0x2f, 83, 69,0}, //68
{0x29, 84, 70,0}, //69
{0x23, 86, 71,0}, //70
{0x1e, 87, 72,0}, //71
{0x1a, 87, 73,0}, //72
{0x17, 72, 74,0}, //73
{0x14, 72, 75,0}, //74
{0x11, 74, 76,0}, //75
{0x0f, 74, 77,0}, //76
{0x0d, 75, 78,0}, //77
{0x0b, 77, 79,0}, //78
{0x0a, 77, 48,0}, //79
{0x58, 80, 81,1}, //80
{0x4d, 88, 82,0}, //81
{0x43, 89, 83,0}, //82
{0x3b, 90, 84,0}, //83
{0x34, 91, 85,0}, //84
{0x2e, 92, 86,0}, //85
{0x29, 93, 87,0}, //86
{0x25, 86, 71,0}, //87
{0x55, 88, 89,1}, //88
{0x4c, 95, 90,0}, //89
{0x44, 96, 91,0}, //90
{0x3e, 97, 92,0}, //91
{0x38, 99, 93,0}, //92
{0x32, 99, 94,0}, //93
{0x2e, 93, 86,0}, //94
{0x56, 95, 96,1}, //95
{0x4f,101, 97,0}, //96
{0x47,102, 98,0}, //97
{0x41,103, 99,0}, //98
{0x3c,104,100,0}, //99
{0x37, 99, 93,0}, //100
{0x52,105,102,0}, //101
{0x4c,106,103,0}, //102
{0x46,107,104,0}, //103
{0x41,103, 99,0}, //104
{0x56,105,106,1}, //105
{0x50,108,107,0}, //106
{0x4b,109,103,0}, //107
{0x55,110,109,0}, //108
{0x50,111,107,0}, //109
{0x5a,110,111,1}, //110
{0x55,112,109,0}, //111
{0x59,112,111,1}, //112
};
Bitplane #0 in the "all 1's" example can be understood without further changes. However, the same change of MPS unrelated to the evolution appear when passing from the 2nd to the 3rd bit (in this case it's more clear that it's independent from the evolution, as there is no renormalization at that point.). The states it use are: 0-1-14 and all the way down to 25.
It seems that 0x100 bytes are a little too few bytes to follow even this to the end (it doesn't reach the saturation state) so maybe it could be worthwhile to bigger that limit if possible.
Now it's late and i'm tired, so i will just stop here. A last observation, however: in bitplane #1 it's clear how at least 2 different contexts are being used.