So far I have chosen the AES SBoxes to initialise the bi-LUT.
Remember : with the rotation trick the only thing that matters is to initialise the LUT with an equal amount of 0s and 1s. The AES SBox seemed like a quick way to get you there cheaply, you can immediately pump data through it.
Note : this is also a great way to make a biased generator (if the bias is not too strong), just initialise the required number of 0s and 1s in the LUT for the required ratio.
Now what's the "expensive way", the "worst case" ? Initialise the LUT with one half 0xFFFF and the other 0x0000. And no entropy at all in the inputs : keep them at 0. And FG=0 too. This forces the system to bootstraps into PRNG mode the hardest way... It was not easy and several shortcomings have been found.
- First, one of the inputs now gets XORed by a constant, though it could be a bit better than that.
- Second, the rotation is now extracted from a independent 5-bit LFSR (thus giving values from 1 to 31, excluding the 0 speeds mixing up).
I was not happy to add more internal bits, and even less happy to add a counter : this is the sign that "something wrong" happens and needs to be broken up. Well, in this case, it is... But then what is the minimum number of bits ?
First test estimate 10K iterations but it's hard to be sure, when can the LUT be considered "OK" ?
Have a look at scrambler_startup.tgz
(note: I use Braille Unicode to represent 8 bits in one glyph, displays OK with chrome)
The test starts at
LUT: ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
Can it be worse ?
The trick is to start it up. Hence the 0xAA as a XOR in one input, though it would be better fed from a LFSR8 (which also feeds the rotation). But the fixed XOR is enough in this case as the rotation exchanges some bits between the empty and the full zone.
iteration: 1 LUT: ⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
iteration: 8 LUT: ⣿⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⠇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠿
iteration: 16 LUT: ⡿⣾⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡿⣠⠀⠀⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢏⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⠇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣼⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣼
iteration: 32 LUT: ⣿⣾⠀⠀⠀⠀⠀⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⣿⣀⠀⠟⠇⣿⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣎⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠟⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢏⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣃⣷⣿⣿⣿⣿⠀⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⠏⣿⣾⠇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣸⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣼⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠿⣿⣿⣿⣿⢀⠀
So the 0xAA address, by chance, points to a place where there are set bits while the other address has no bit, they sort of serve as "swapping areas" in the beginning. That's why a LFSR8 would be good.
iteration: 128 LUT: ⣰⠝⠀⠀⠀⠀⣀⠃⣿⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⣼⠁⣿ ⢀⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠏ ⠀⠀⠀⠀⠀⠀⠀⠀⡿⡇⠃⣼⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠁⣿⠏⢀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠾⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠟⠀⠀⢁⣿⣿⣠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣎⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠿ ⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠁⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣺⣼⠟⠃⣿⣿⣿⠟⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⣰⣿⣿⢀⠟⣿⣿⣿⣿⣽⣟⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⠟⡜⣿⣿⣿⣿⣠⡿⣿⣿⣿⣿⣿⣿⠝⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣃⣿⢀⢁⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣼⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⠞⣿⣿⣿⣿⣿⣿⣾⠼⣿⣿⣳⣿⣸⠽
iteration: 256 LUT: ⠲⠇⠸⠜⠀⠀⠆⠾⣿⠀⠀⠀⠀⠀⣡⠀⠀⠀⣸⠀⠀⠀⠀⠀⠇⣿⠀⠀⠃⣸⠀⡿ ⢀⠛⠏⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠏⣿ ⠀⢀⠀⠀⠁⠏⠀⠀⡿⣡⠃⣼⠀⠀⠀⠀⠀⠀⠀⠀⣿⢠⣿⣿⠁⣿⣠⣸⡏⣰⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡸⠏ ⠀⠀⠀⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣸⡟⣾⠀⠀⣿⠾⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠄⣽⠟⣿⣿⡢⣿⠃⣿⣰⠀⠀⠏⣪⠰⠀⠀⠀⠀⠀⠀⠀⠇⡏⠀⠀ ⠼⡰⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣽⠀⠙⠀⠀⠘⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠟ ⠀⠬⢃⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠘⠠⣿⣿⣿⣿⣾⠀⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⢟⣿⣀⠃⠇⠇⣿⢏⣿⣿⣿⣿⡠⠇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⢟⣿⣿⣿⣇⣿⡌⠀⣿⣿⣿⣿⣼⠇⠀⠟⣀⠇⣠⠀⣿⣿⣿⣿⣿⣿⣿⣿ ⣸⢏⣿⣿⣿⣸⣿⣿⢀⠀⠿⢁⣿⣾⠇⣿⣿⣿⣿⣿⣽⣟⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⠠⠋⣿⣿⣿⣿⣀⡰⣿⣿⣿⣿⣿⣿⠝⣿⣣⣿⣿⣿⣿⣸⣿⣿⣿⣿⣿⣿⣱⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣃⣿⡀⣀⣿⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣼⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣁⣿⣿⣿⠁⣿ ⠟⣹⠀⡿⣿⣿⣿⣿⣿⣿⣿⣿⣸⠀⣿⣿⣼⠽⠟⣿⣿⣿⣿⣿⠀⠀⠿⣿⠟⠁⣰⣣
iteration: 512 LUT: ⣿⣲⠁⠃⠂⠀⠍⠼⢂⠇⠀⠀⠀⠀⣿⣿⣸⠀⡰⠀⠀⠀⠀⠀⣸⠿⣿⣿⠃⣸⣾⡐ ⠀⠂⠏⣿⠁⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠇⠀⠀⠀⠀⠇⣯⠝⣾⠀⠀⠀⠀⣠⠀ ⣐⠀⠀⠀⠁⠏⠃⠼⣿⢁⡿⣬⠀⠀⠀⠀⠀⠀⠀⠀⣴⣑⣾⡀⠁⢀⣧⠇⡏⣰⠀⠀ ⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠁⠾⠌⠀⠀⠀⠀⠀⡀⠀⠀⠀⠰⠀⠟⣿⣀⠀⠀⡹⢀⣿ ⣯⣠⠀⠃⢁⠁⣀⠀⠀⠀⠻⠀⠀⠀⠁⢳⠏⣽⣼⠀⣿⣀⣿⢾⡠⠀⣿⠾⠀⠀⣻⣀ ⠀⠀⠟⣛⡸⢠⣽⡹⠌⠃⣿⣀⣻⣿⣣⢸⠀⠀⢹⣣⠀⠆⠀⠀⠀⠀⠟⣰⠀⠏⣿⣹ ⣺⢧⠀⠀⠀⠁⠁⣿⠀⠀⠆⡸⠀⠀⠛⢀⠀⠀⠀⠀⠐⣿⠙⠈⡿⣡⠀⠀⠀⠀⠀⠀ ⠀⠀⠑⢟⠀⠀⡈⠀⠀⠀⠀⠀⠀⠀⣿⣿⠇⢐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠌⢠⠀ ⣿⢃⠿⢀⣿⣳⣿⣿⣿⣀⣿⣿⣿⣿⠀⠀⠀⠀⣿⣿⣁⠀⠐⠏⣿⣿⣾⠀⣿⣿⣰⡿ ⠣⣰⣿⣿⣿⣿⣿⣿⠎⠹⣸⡜⠎⠀⣱⢿⣿⣿⣿⣿⠑⢀⣿⣿⣿⣿⣿⣿⣿⣿⠃⣿ ⣿⣿⣿⣿⢟⣿⢃⢧⡿⣰⢀⣣⣿⣿⣿⣿⢇⣹⠄⠀⢁⣁⡇⠂⣀⡿⢀⠀⠟⣿⣿⣿ ⣸⢏⣿⣸⣿⣸⣿⣿⣿⢀⠀⠀⠀⠎⠇⣿⣿⣿⣿⣿⠇⠃⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⢟⢿⣰⠀⣿⣿⠇⣿⣿⣿⣼⠏⣿⣿⢎⡾⣣⣿⣿⣿⢏⣃⣿⣿⣿⣿⣿⣿⣱⣿⢀⠀ ⣿⣿⣿⣿⣿⣿⣺⡃⢇⣾⠿⣼⣿⣿⣿⣿⣿⣿⣿⣿⣯⣡⢀⡿⣰⡿⣿⣿⠟⣿⣿⣿ ⣡⠑⣿⣟⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡜⠀⣼⡿⣿⣾⣳⡼⣿⣿⣿⣿⣁⣿⣿⣿⣿⣑ ⠀⠀⠀⡿⣲⠀⣿⣿⣿⣿⣿⣿⣸⠀⣿⣿⠀⠠⣹⢀⣿⣾⣿⣿⠠⠀⠣⣿⠃⠀⡵⣿
iteration: 1024 LUT: ⢀⣬⣯⠏⠿⣀⠡⢏⣿⣱⠀⠀⠼⡷⡾⣲⣇⢟⡿⢹⣿⠀⠠⠀⣿⠝⡰⡿⠯⠀⠻⡿ ⠓⣃⠀⡿⣠⠀⣿⢀⣇⣽⡿⣿⣿⢀⠀⠀⠇⣠⠀⠬⠀⠿⢀⠏⣒⠻⠀⠀⠿⣻⣈⠀ ⣸⠍⠃⣀⢏⣎⣏⣾⣼⠉⣟⡠⣶⢃⠀⠀⠀⠀⠃⠀⠧⠀⡄⣿⣼⠆⣷⣀⣃⣀⣿⣰ ⠇⡢⠀⠀⠀⠁⠀⠀⠿⠐⣸⠟⠌⠀⠀⠀⠇⣀⡀⠀⣰⠜⢀⠇⠟⣄⣀⠀⠀⠇⠽⢇ ⣯⣠⣼⠀⢁⠁⣅⡸⠀⠀⣠⡠⡿⣰⢄⠿⣿⡀⢸⢇⡡⣱⣰⡯⠽⢀⣠⠃⣿⣓⠀⣠ ⣃⠫⠂⡿⣯⣸⣼⠿⣱⣼⡬⠫⠀⠷⣀⠯⣀⠀⠞⡸⠼⠏⣁⠇⣾⠇⠟⣰⣰⠀⣿⣹ ⣼⠏⠂⡀⠏⣀⣿⣾⠰⠀⠃⣴⠀⠀⠛⢀⠀⠃⠀⡱⣄⠗⠙⠈⡿⣡⠀⣀⠀⠀⠀⠀ ⣷⣠⡻⡿⠀⠀⡈⠀⠀⠀⠀⠼⣿⡠⣿⣿⡹⠀⠀⠠⠡⣿⡿⣿⠢⠰⠀⠀⠀⠌⠌⠿ ⠀⠇⠣⣆⢀⠏⣿⣈⠜⡿⣿⣿⡿⣿⣠⠏⠇⠀⠿⣯⢐⠰⠋⠟⣿⣿⠟⣸⣿⢃⣿⢜ ⠣⣰⠁⣿⣸⣿⠑⢟⣠⠕⣧⣃⡃⣾⣣⡿⠿⣿⣿⢏⠦⠜⣘⢏⣾⣿⣼⠌⠀⠠⠀⠀ ⣿⢣⢾⣧⠅⢟⢀⠀⣼⡼⠎⡉⠁⣿⣾⠁⠌⠿⣪⡀⣸⢤⢏⣠⠀⣀⢿⣳⣅⣿⣄⡸ ⠀⡯⣿⣸⣸⠟⣿⣿⠀⠇⠇⣸⣀⠁⣹⣐⡀⠌⣁⣇⠝⠀⣌⣷⣠⡿⣿⣿⣧⠀⠟⣿ ⣿⣸⣩⢠⠃⣓⣜⠌⣿⣿⠟⠄⣿⣿⡄⡳⣣⣿⠇⣿⢀⡠⣿⣿⠇⣿⣿⣯⣿⣠⠀⠀ ⣿⣿⣿⣿⠇⣻⣿⣩⠾⠀⠀⠁⠠⠯⣿⣿⣨⡿⣿⣿⣿⡿⢀⡿⣰⡿⣀⠜⠟⣿⣼⠿ ⢈⣏⡿⣿⣡⡼⣻⣀⣿⣿⣿⣬⠣⣿⡼⢃⠯⣼⣿⣾⠆⢆⣿⣿⣿⣿⣾⠏⣎⠐⠾⠤ ⣏⣿⠏⣯⡹⠀⣿⣼⠼⠀⣿⣿⣀⠇⣡⠣⠜⠡⣿⣺⣠⠀⡏⣾⠀⠀⣿⣧⡀⠁⣁⣣
At this point, data are fuzzy but still chunky:
iteration: 2048 LUT: ⣠⠏⢽⣠⡵⣀⠎⠘⠓⢽⡶⣟⠂⠁⣊⠠⡐⠼⡜⡾⡣⡭⡃⡿⡌⠮⡏⠠⠁⠜⣧⢟ ⠸⡿⣣⣇⠉⡟⣘⠿⠻⠿⠙⣞⠂⠀⢁⣠⣿⣀⣿⣿⢾⡿⣰⠍⢶⡿⣾⠀⣿⠻⡧⠞ ⠼⡲⠁⠇⠖⡻⣸⠈⠧⣨⣌⡸⠄⡿⣣⡀⡠⠀⢁⣳⠏⡻⠃⣀⠲⡀⠾⡸⠁⢸⣸⠅ ⡰⣎⣀⢇⠀⠁⢏⣽⠿⣈⡞⣊⠁⢃⣿⡾⣿⣏⡀⠇⠌⠇⢀⢿⣿⠏⠇⡱⣾⠿⠇⣧ ⣡⡼⠼⠀⣢⠒⣚⢰⣯⣻⠏⢺⠈⠠⣾⢀⠀⠟⠴⠉⢐⠶⣆⠄⢿⠺⣯⠃⢟⣸⣽⣮ ⣦⣿⠏⣮⠿⣽⢩⣿⣘⢗⠇⣃⣸⠀⡰⡸⢽⣀⢉⠌⣡⢾⡋⢿⠏⣀⡾⣠⡏⢌⣁⣱ ⡸⠃⠌⡢⢟⢃⠏⢜⠄⣡⣣⣩⣾⠀⢆⠐⠿⢙⠰⡈⠃⣤⢄⠴⣡⠏⣯⠟⠟⠆⢜⠀ ⡼⠏⠂⣸⣸⠀⠒⠂⣾⡆⢇⡻⠏⣃⣯⣠⠜⡽⢈⣿⠆⠸⢋⣮⠃⣚⡡⣸⣲⠉⣆⠹ ⠛⣎⠂⡿⡸⠀⡷⣰⠇⣁⣿⢉⣸⠿⠰⡭⠀⠸⢿⣿⣹⢀⠏⣼⣀⣼⠀⠍⣰⡿⠏⣀ ⠄⣹⡠⠟⣬⠐⠇⢀⠇⠀⣀⡫⢡⠞⣣⡿⣠⡣⣿⢏⡶⠀⣘⢏⠕⡾⣑⣿⠷⠏⠩⣀ ⣽⠘⣻⣮⡸⡿⣿⣿⠌⠀⠁⠷⡳⣳⣽⣾⠾⢼⡮⠏⠂⢼⡠⠟⠁⡈⢧⣿⣟⣿⣾⣞ ⢊⠖⣀⣢⠡⡭⣘⡠⣣⡠⣰⣑⠿⠀⢲⡷⣾⠐⢝⣤⠍⠸⣟⢀⣼⠆⣏⣀⡎⠲⣹⣿ ⠞⣛⣀⠇⣽⠝⠁⣡⠀⠻⣼⠀⠿⠸⣃⠼⣳⣨⣓⠕⠹⢝⡻⢝⠀⡾⣸⠀⣿⣿⣿⣸ ⣿⢽⢟⣿⣦⡼⠧⡠⡀⠁⠁⠖⢠⡻⠦⡿⡠⠇⣜⣎⠼⠀⣡⣺⢁⣡⣸⠸⢼⠺⢰⢟ ⠁⠍⢜⠟⣃⢸⡁⠍⠔⠱⡸⢁⣄⡟⡃⣞⠒⢲⣹⣿⣿⢀⠂⠜⣿⢀⠀⠢⠙⣿⠟⠁ ⣸⠎⠧⣿⠁⣀⣹⡿⠃⡇⣘⢟⢇⣝⢄⠎⣀⡠⠜⠨⠀⠏⢞⠙⢔⠈⣹⣰⢹⣞⣠⠮
iteration: 4096 LUT: ⡮⠥⣁⣼⢵⣸⠃⣻⣵⣭⣰⠔⢸⠆⡙⢿⣸⡺⣠⡊⣀⣝⣶⠍⡡⠭⠘⡿⠻⠳⢙⡏ ⢇⢌⣺⡉⣟⣦⡦⣴⡁⡄⡊⡄⠍⣄⠧⠠⡇⢺⡼⠱⠃⢓⢣⡃⣻⡭⣶⠠⠴⡚⠁⢋ ⢃⣷⡝⡨⠴⠓⣇⣺⣿⢋⡹⠙⣂⡭⣘⠽⣞⢯⢟⢐⡃⠡⢿⣁⣷⢏⠁⣂⠉⣿⢂⣠ ⢟⡛⠶⣮⣷⢷⢹⣃⠉⢱⠦⠽⡹⣋⣿⠘⢫⢟⠝⣡⣫⣆⢘⠅⠂⡆⡠⠋⣍⣿⡱⠉ ⢴⣸⣾⠾⠋⡯⣝⢲⣞⡾⡧⢈⠈⠒⠐⠗⠸⠃⡲⠸⠻⣓⢑⣛⣽⠊⠊⠸⢞⡡⢟⠇ ⡍⠛⢹⣺⠀⢆⠀⢷⠟⡿⠔⠍⠔⡓⡾⢜⣤⣲⣼⢇⣑⣣⣐⣖⢿⢜⢋⣋⣀⣈⢂⢠ ⣃⡞⡞⠭⢾⢽⡁⡭⢇⣻⣰⠓⡟⠓⠧⢧⠷⣮⣷⠟⡀⣼⢞⣠⢣⠔⣙⡠⣏⠜⠀⠃ ⢂⡍⣬⡰⢤⣧⣘⢬⠗⡖⠾⡇⠤⡪⢶⣃⠞⣷⢒⡕⠂⢓⡏⢑⠺⡐⡤⣜⣄⠍⡼⢚ ⣳⠏⢞⠧⢅⣥⣴⠋⢼⣯⡂⢾⢕⣨⡻⢘⣔⠘⡆⡭⠱⣰⠡⣐⡷⢖⣈⣂⣋⢽⠤⢆ ⣹⢦⠁⣰⠰⣳⠀⣹⡀⡾⣡⠁⠶⣝⣩⢮⢌⢡⢂⢞⡜⠿⠬⣵⡺⣯⢃⢯⠣⡡⣜⠇ ⣱⡎⡾⠓⠰⠃⡅⠨⣦⣸⠖⣆⠷⡌⡶⡺⣐⠺⢐⠗⣿⢍⣦⠻⣵⠊⠙⣡⠫⡷⣯⢸ ⣾⡥⣐⠢⢿⣅⣸⡯⣾⢯⢼⡂⠌⠈⢰⢺⡣⠱⡙⣺⣠⢀⢓⠬⠷⠢⡳⡭⠐⣲⠶⠒ ⣀⣩⡾⡹⠑⠶⢆⡮⢄⢤⠽⡀⠑⡣⢋⠀⠼⡿⢃⢿⣀⢯⣆⢠⠕⠪⣢⠠⣆⠌⡙⠐ ⠘⡰⠶⢍⠬⢂⣱⡳⠕⠥⡄⠰⡚⠽⡅⢫⡸⡓⣐⡵⡧⠌⢴⠉⣏⠫⢔⠹⢤⢆⣶⠰ ⣧⣠⣜⠚⣝⣠⢎⡆⠑⣀⢝⢣⣷⡣⣀⡖⠭⠚⢷⢧⠀⡷⢠⣭⢏⡦⠊⡻⠿⢐⢚⠼ ⢿⢨⣽⡇⣅⢑⡰⡧⡾⢀⣠⠸⠋⠡⢩⡹⡫⠖⡼⢿⣔⡺⣊⣲⢃⢤⠺⡧⠡⣳⡃⣱
iteration: 8192 LUT: ⠚⢴⢋⠱⡣⢵⣂⢊⢬⣴⡼⠸⢢⠵⣵⢊⣓⠸⣒⠊⠇⣭⢮⢐⡡⡔⡒⠌⠝⠜⠴⠧ ⠒⢙⢀⡦⢻⡧⣿⢭⢚⢷⡦⣖⢧⡟⢾⢂⡢⢝⠆⡹⢔⠩⣯⠒⠱⣂⣃⣶⡵⢒⡾⣸ ⡺⡏⢇⣓⣲⢤⣆⣧⣖⣧⠅⢗⠹⣌⣛⣬⢃⠙⣉⢎⡆⣝⠛⣪⢰⠌⢍⡉⠦⡢⢤⢜ ⠛⣡⢋⠶⢳⠦⢐⠲⠴⡑⢖⣏⡢⣆⠟⡹⢞⠱⡶⣠⣌⢛⡐⢆⠱⢐⠅⡠⣠⢴⢬⣨ ⣭⠦⡱⡯⠝⠍⡔⢩⢯⡊⢛⡜⣮⡧⡄⢣⣙⢚⢅⠋⣟⠧⠸⣛⣝⠿⠵⠐⡟⢌⢐⡆ ⢙⠢⣏⡚⢬⠛⢪⣩⣷⡂⡝⠔⡸⠊⣏⠿⣾⣎⢧⣯⣵⡎⢳⢺⠕⢲⡞⠗⠑⢤⠛⠴ ⡧⣌⡫⢙⡰⠈⣗⣭⡄⠟⠅⢪⠊⣅⡃⡄⢂⢔⢕⢉⠖⡣⡝⡢⡤⠓⡎⢣⠗⣈⠣⠎ ⠖⣳⢿⠾⣵⢘⢝⣈⣭⣆⠻⠯⢺⢙⠣⠄⡱⢣⣥⠌⠇⢷⢲⠥⠚⣰⣴⡩⢙⠹⣆⡇ ⣝⡨⣦⠴⢃⠵⡸⢾⣁⡎⢗⠱⢰⣚⢆⢸⣱⠲⡾⡂⣬⣟⡲⢟⡑⣒⠒⡥⡞⣧⢎⡻ ⣃⣥⣯⠵⣅⡣⡲⠑⠰⢇⣩⠅⡇⣶⢎⢰⣒⣭⠵⠊⢳⡜⣈⣵⢣⢲⣜⡨⡽⣝⡣⡂ ⣌⢗⢌⢔⢋⡹⠯⢵⡞⣪⣁⢡⣬⣁⡾⠋⡐⣛⡾⡃⠌⢾⣔⣌⡆⠫⣴⠴⠝⣴⠩⣇ ⢤⢉⡮⣻⡻⣊⢼⡣⢺⠖⣓⠷⠤⠀⢊⢥⡾⡹⣠⡳⠸⡥⡇⣤⡏⣶⠓⡵⣒⡊⢉⢭ ⡁⢶⠺⣷⢢⣢⣊⡘⣣⣎⠽⠍⡇⡞⡌⡴⡷⢮⢻⡕⠼⡃⠄⡚⢩⡶⠫⡭⠊⠸⢛⢼ ⡆⣂⣈⣐⢇⢀⠡⢱⠅⡈⠄⠮⡳⡹⢟⢣⢜⡚⢨⢆⡼⡘⠈⠄⢥⡌⠠⠥⢈⣺⡨⢞ ⣴⠢⣍⢾⠳⣀⣃⡡⠟⡑⠛⣜⡵⡩⣅⠢⢁⣋⠰⢫⢀⣏⣇⠅⣩⡃⢷⠚⢾⣑⡑⠓ ⣣⡃⠮⣮⠷⠼⠨⡹⠊⠀⡢⣰⡿⣐⢵⠢⠜⠓⢶⠏⣲⣳⢑⢚⢸⢬⣶⢿⠻⢶⠟⡿
At this point the chunks start to disappear:
iteration: 16384 LUT: ⠕⠼⠶⣞⢓⢗⠐⡵⢌⠹⡈⡧⣝⣄⠢⣼⣬⣶⢶⡫⠣⣸⡻⢜⣃⠈⢲⠵⣠⡡⡢⠚ ⢒⡊⠰⡢⠍⡅⠥⠄⡩⡠⣌⣾⣩⠼⡱⠵⢭⢕⣈⡣⢡⡏⡂⢛⡙⣔⡾⢄⢜⢌⠨⣑ ⣊⢉⣎⣗⢸⡑⢆⡋⡠⣘⡷⣁⡣⠆⣻⡋⡯⢌⢸⣱⣮⣝⡑⠽⠎⢅⡭⡁⠧⣨⠊⣝ ⣊⡇⣼⠶⣕⣇⢩⢯⠇⠱⣣⠽⢢⡫⢜⡘⡇⣳⣱⢤⠇⣹⢏⣾⡪⠴⠊⢫⡞⡊⢽⡑ ⠆⣎⣠⣕⢭⣛⠨⡶⣧⣾⣾⡝⣓⡷⠰⢚⣣⢵⠇⢲⠣⠺⠒⠗⠈⣑⠱⢶⠡⢂⣝⢙ ⠦⠪⡊⣇⢶⡘⡌⠍⢴⡆⠌⣜⡞⡎⡾⠣⡡⢯⣯⢴⠢⢫⢵⢮⡽⣅⢼⢐⡋⡯⡚⠞ ⣅⢶⡝⡡⠔⠕⠺⠦⡗⡵⡂⡃⢰⢽⣧⡡⣵⡶⡂⠂⡈⡌⣼⢆⢟⣒⡄⠆⡾⡙⣴⢑ ⢏⢔⢈⣴⡠⡴⡏⣇⡰⡾⡢⡅⡤⡨⣂⡴⡿⡥⣠⣭⡨⠘⡦⢏⢞⢋⢬⣓⡅⣑⣮⢈ ⠨⣎⡎⠟⣸⣖⡆⡆⣚⣺⠵⢙⢘⢩⠄⣎⣉⢑⠳⢎⢇⡻⢮⢓⢼⡅⠸⣂⢱⠴⠜⣉ ⣆⠏⠘⢼⡸⣥⠛⠷⢷⣢⠑⢼⢎⠱⣹⠚⠎⣑⢥⠼⣶⠷⣎⠠⡋⣪⡞⢭⡕⠫⠽⣑ ⡫⡫⣭⣫⡨⣾⡚⣻⡾⠺⠥⣐⣄⡜⠞⡅⠲⡲⡐⣮⡡⣉⠬⠃⡩⣂⡀⣄⠪⡲⠷⢃ ⡛⣘⠤⢌⠿⠙⠖⠘⢐⠿⢠⡞⡥⢨⢐⠲⣬⢤⡰⠯⠽⢧⣡⢀⣄⢨⡦⣅⢦⣶⠑⣯ ⢕⢨⠦⣹⢉⠚⣄⣹⣐⢁⣇⣆⣰⠓⡵⢃⣺⢉⣓⢎⠹⠕⡰⢴⢵⢓⣕⡳⠩⠁⢋⣃ ⣧⢸⣢⢌⠎⠞⢢⢷⢺⠗⣍⠿⠈⠓⠌⢫⡩⢓⠣⣒⡙⡦⣁⢝⠭⣨⡲⢳⢂⡑⣋⣪ ⠣⢵⠻⣋⣱⣴⠃⣘⣨⣚⠞⠸⠅⣡⢍⢓⣂⠇⣼⣑⠶⢘⣭⡍⣫⠈⠵⣊⠟⣋⣁⣌ ⣎⠺⡷⠪⡍⡫⣬⡱⢈⣓⢹⣹⡩⡺⠣⣟⡂⠶⡷⣱⡪⢉⢷⠶⢷⡨⡄⠬⡓⡉⣫⣶
iteration: 32768 LUT: ⢲⠈⠕⣀⡚⣪⢙⡗⣮⡽⢔⡡⢃⣶⢨⢔⢻⡶⢑⡯⣐⡪⣟⢺⢄⡡⣃⢜⡌⠙⡱⢬ ⠓⢷⣙⢜⢕⡪⡹⠗⡊⢈⣙⢑⠧⠦⡘⢋⣇⢚⣋⠎⡕⠱⣂⡣⠵⣟⠡⡛⢝⢫⣪⡎ ⠅⣩⠈⡘⢬⠆⡯⡶⢫⣆⣜⣚⡌⣳⣣⢳⡟⣷⠠⠲⣍⣪⡎⢄⠌⢳⣡⡬⠞⣼⣇⠲ ⠗⢖⡆⡟⢡⣾⣍⣉⣙⠶⣫⣓⡑⢪⠋⢣⢻⡘⠝⠮⣇⡐⢽⣬⣚⠣⢸⡟⠿⣆⡩⣁ ⣯⡢⣄⢨⣝⡙⠋⢌⠏⢖⣣⢨⣓⠦⡆⣙⣥⠭⠮⡂⢦⢇⠱⢅⢚⣗⣜⠀⠠⡗⢋⢞ ⠊⡫⡶⢖⢡⡋⣢⣁⢲⣐⣛⡅⣊⢍⡪⠓⠝⣊⢤⣕⠆⢁⣭⣐⢑⡍⢕⠍⣯⣙⣒⣹ ⠥⡑⡭⠹⢼⡌⠚⢓⡫⠐⠑⡡⠅⠀⣠⢻⢞⢄⠬⡐⣒⣱⢞⡰⢓⠹⡧⠾⢽⡵⢭⣛ ⣍⢄⠻⠡⣫⠿⠱⣸⠊⠏⠰⣥⢘⠬⢬⡸⡷⣱⣕⡾⢂⢺⠾⣸⠇⢈⠒⢴⡚⡼⡡⢁ ⡼⢄⠔⡺⣄⣽⡭⢹⡽⣈⢮⢧⠒⡣⣰⣣⣘⣵⠰⢩⠦⣖⢉⡘⢛⠦⢐⠴⢰⡆⠉⠀ ⣯⢢⡙⠞⢖⡒⢮⢁⣡⣒⠈⣧⠞⡮⡄⡰⣐⠌⣛⠶⣼⢸⢿⣖⣼⠼⢨⡄⢊⡩⣅⣠ ⡛⢇⠒⡱⢉⣸⡝⡍⢰⠶⣆⡷⠰⡴⣗⢎⢶⢈⢾⠒⢜⠓⢩⢿⢩⢹⣞⠫⢲⡡⣫⡜ ⣯⠭⡞⢹⠵⣠⢶⢃⡰⣋⢵⢦⢘⣎⠋⢍⠮⣑⢸⣗⣷⣈⠆⢧⣎⢊⢘⡜⡝⢱⠘⣛ ⢯⠶⣿⢞⢼⢙⢴⢮⠕⣂⢂⢍⢕⡜⢁⣉⣰⢧⡄⣉⡔⡡⢅⠡⡍⡟⣧⣺⣡⢜⡏⠋ ⠪⢸⠟⣣⢍⢴⡘⢪⢸⢒⢱⡫⣏⢭⠋⡧⣬⣠⠜⡊⠉⢷⣎⣏⢿⢁⣕⢢⡌⢰⣣⣊ ⡏⠞⣥⠖⠲⣦⢚⡶⡤⠀⡖⢅⣴⡢⢝⢘⠕⠞⣊⡡⠤⡔⣺⡷⣐⣲⠊⣒⢰⣠⠔⣃ ⣙⢇⢥⢜⣞⢌⢓⡔⠃⢖⡺⡧⡔⢕⣜⠨⡖⣃⢘⢅⢅⢎⣱⣲⢤⡇⡝⣋⣵⠂⡿⢣
We can consider it "good" now...
My point so far is
- the design is still "simple" but getting better,
- it can "recover" by itself from catastrophic situations.
- the incoming datastream does not write directly to LUT so it's quite immune (yet not totally if the internal state of the LFSR is known)
- but in turn, the "entropy expansion" time is quite long.
- the system can work as a standalone PRNG, and be seeded by another one.
A LFSR8 would help a lot here.
....
Indeed it effectively helps : the patterns start to "look good" around 5K iterations, no much difference at 10K, so the LFSR8 is clearly a good thing.
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.