Por que os bits em bytes são igualmente distribuídos?

0

Tirei os primeiros 1mil bits de um arquivo de vídeo aleatório e, em seguida, para cada byte, mapei cada bit para uma lixeira, por exemplo

c_b = ''.join(format(ord(b), '08b') for b in c)
bin1.append(c_b[0])

Então contou:

bin1_counted = Counter(bin1)

e os resultados foram:

Counter({'0': 646491, '1': 603686})
Counter({'0': 642133, '1': 608044})
Counter({'0': 644298, '1': 605879})
Counter({'0': 641961, '1': 608216})
Counter({'0': 641778, '1': 608399})
Counter({'0': 640538, '1': 609639})
Counter({'0': 641531, '1': 608646})

Mostra claramente uma distribuição igual. Mas eu esperava que alguém pudesse me explicar por que isso é assim, considerando minha suposição de que o primeiro bit em cada byte deveria ter muito mais do 0que 1porque estou pensando que é provável que deva haver algum tipo de distribuição de sino de todos os bytes ', ou seja, eu esperava que o primeiro / segundo bit de cada byte tivesse muito mais, 0pois os caracteres podem ser representados antes de chegar a 64?

Tjorriemorrie
fonte
O que você quer dizer com "caracteres" em um arquivo de vídeo?
choroba 25/05
1
Se você estivesse vendo texto, talvez visse um padrão, mas os dados de vídeo compactados não usariam o conjunto de caracteres ASCII. Utilizaria toda a gama de bits disponíveis para garantir que os dados de saída não tenham apenas espaço "desperdiçado".
Mokubai
Eu esperava ver 8 resultados, existem 7. O que estou perdendo?
Kamil Maciorowski 25/05
@KamilMaciorowski Acabei de errar ao copiar a última linha #
Tjorriemorrie 25/05
@choroba este python lang lê assim ord(b), '08b') for b in c. Eu tenho que ord()cada próximo personagem?
Tjorriemorrie

Respostas:

4

Isso não é surpreendente, dado o tipo de dados que você está vendo.

Um fluxo de vídeo consiste em dados muito altamente compactados.
Olhando para os bytes brutos, eles aparecem como dados aleatórios quase perfeitos.
Essa é uma propriedade básica de dados com alta compactação (alta entropia).

E dados aleatórios quase perfeitos têm uma distribuição aleatória quase perfeita dos bits, o que significa que cada bit individual tem uma distribuição igual.

Se você fizer o mesmo em um grande arquivo de texto ASCII, verá que o bit mais significativo (2 ^ 7) não aparecerá (ou apenas algumas vezes no máximo) e mais alguns aparecerão com MUITO altas frequências .
Isso ocorre porque o ASCII tem uma distribuição muito distorcida com os valores mais usados ​​agrupados em alguns pequenos subconjuntos dentro do intervalo 0..255.

Tonny
fonte
Obrigado, eu provavelmente deveria saber que a alta compressão deve causar isso. Só queria ter certeza disso.
Tjorriemorrie 25/05