[英]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.