+----------------+-----------------+--------------+ | Pulse duration | arithmetic code | huffman code | +----------------+-----------------+--------------+ | 167 cycles | 0.31886 | 11 | | 217 cycles | 0.22645 | 01 | | 267 cycles | 0.16083 | 101 | | 317 cycles | 0.11422 | 100 | | 367 cycles | 0.08112 | 000 | | 417 cycles | 0.05761 | 0011 | | 467 cycles | 0.04091 | 0010 | +----------------+-----------------+--------------+ mean cycles per bit, arithmetic code = 101.3 mean cycles per bit, huffman code = 102.9
+----------------+-----------------+--------------+ | Pulse duration | arithmetic code | huffman code | +----------------+-----------------+--------------+ | 150 cycles | 0.39979 | 0 | | 230 cycles | 0.24517 | 10 | | 310 cycles | 0.15035 | 110 | | 390 cycles | 0.09220 | 1110 | | 470 cycles | 0.05654 | 11111 | | 550 cycles | 0.03468 | 111101 | | 630 cycles | 0.02127 | 111100 | +----------------+-----------------+--------------+ mean cycles per bit, arithmetic code = 113.4 mean cycles per bit, huffman code = 116.2
+----------------+-----------------+--------------+ | Pulse duration | arithmetic code | huffman code | +----------------+-----------------+--------------+ | 150 cycles | 0.41389 | 0 | | 230 cycles | 0.25856 | 10 | | 320 cycles | 0.15230 | 110 | | 416 cycles | 0.08660 | 1110 | | 516 cycles | 0.04810 | 11111 | | 618 cycles | 0.02640 | 111101 | | 724 cycles | 0.01415 | 111100 | +----------------+-----------------+--------------+ mean cycles per bit, arithmetic code = 117.9 mean cycles per bit, huffman code = 119.7
+----------------+-----------------+--------------+ | Pulse duration | arithmetic code | huffman code | +----------------+-----------------+--------------+ | 180 cycles | 0.38997 | 0 | | 270 cycles | 0.24352 | 10 | | 360 cycles | 0.15207 | 110 | | 450 cycles | 0.09497 | 1110 | | 540 cycles | 0.05930 | 11110 | | 630 cycles | 0.03703 | 111111 | | 720 cycles | 0.02313 | 111110 | +----------------+-----------------+--------------+ mean cycles per bit, arithmetic code = 132.5 mean cycles per bit, huffman code = 136.4
Cool stuff. I remember that I did some similar research back then.
You limited your research to 7 different pulse lengths. Depending on the shortest pulse and the spacing, this may not be the optimal solution. E.g. for the last, conservative approach, I am pretty sure that a lower number of pulse lengths would give a better result.
Also, what sample data did you base your pattern distribution on? E.g uncompressed data must result into pretty different values depending on the content and very different than compressed one. For the latter, all bits and combinations should have about the same probability.
With random data all shouldn't arithmetic data be 0.5 for single bits and 0.25 for two bit combinations? How did you get to these different values? I am sure I am missing something (again).