繁体   English   中英

如何打印具有给定错误概率的列表的二进制数(Python)

[英]How to print a binary number of a list with a given probability of error (Python)

如果我有一个二进制数列表(0 和 1)。 我需要以概率 p 打印这些数字(p = 1-通道中的错误概率)。

如果错误概率 = 0.2 (p=0.8) 并且序列为 101010101010,则解决方案将类似于 101011101000 ...


Per = float(input("Introduzca probabilidad de error: "))
while Per > 1 or Per < 0:
    print("P.error ha de tener un valor comprendido entre 0 y 1/2")
    Per = float(input("Introduzca probabilidad de error: "))

q = 1 - Per
import random

entrada = int(input("Introduzca manualmente secuencia de bits: "),2)
bits = [int(x) for x in bin(entrada)[2:]]

您可以遍历这些位,并在每一步生成 0 到 1 之间的随机值。如果您的随机值小于 q,则将正确的位添加到新列表 bits_con_error 中。 如果您的随机值高于 q,则使用 randint(0, 1) 添加随机生成的 1 或 0

Per = float(input("Introduzca probabilidad de error: "))
while Per > 1 or Per < 0:
    print("P.error ha de tener un valor comprendido entre 0 y 1/2")
    Per = float(input("Introduzca probabilidad de error: "))

q = 1 - Per
import random

entrada = int(input("Introduzca manualmente secuencia de bits: "),2)
bits = [int(x) for x in bin(entrada)[2:]]

bits_con_error = []
for bit in bits:
    if random.random() < q:
        bits_con_error.append(bit)
    else:
        bits_con_error.append(random.randint(0, 1))
print(bits_con_error)

或者如果通道中的错误应该翻转位,而不是随机生成一个新位,您可以使用bits_con_error.append(int(not bit))

尝试这个:

import random
tot = len(entrada)
approx= round(Per*tot)

temp = list(entrada)
entrada = list(entrada)
for i in random.sample(range(0,tot),approx):
  if entrada[i]=='1':
    entrada[i]='0'
  else:
    entrada[i]='1'

count = 0
for i in range(len(entrada)):
  if(temp[i]!=entrada[i]):
    count+=1

entrada =''.join(entrada)
print('modified entrada is : ',entrada)
print('error after modification is : ',round(count/len(entrada),3),' approximately..')

输出:

modified entrada is :  000111001011
error after modification is :  0.167  approximately..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM