bin=BinaryStrings() #transforme un vecteur a coefficient dans F_2 en une suite de bits def VecttoBin(L): bin=BinaryStrings() Lbin=bin('') for i in range(L.ncols()): if L[0,i]==0: Lbin=Lbin*bin('0') else: Lbin=Lbin*bin('1') return Lbin #transforme une suite de bits en un vecteur a coefficients dans F_2 def BintoVect(m): bin=BinaryStrings() length=len(m) L=zero_matrix(Integers(2),1,length) for i in range(length): if m[i]==bin('1'): L[0,i]=1 return L #Transforme un caractere ASCII en le mot de 7 bits correspondant def ord_bin(s): N=ord(s) bin=BinaryStrings() x,y=bin('0'),bin('1') P=bin('') while N>0: if N%2==0: P=x*P else: P=y*P N=(N-N%2)/2 return x^(7-len(P))*P #Transforme un mot de 7 bits en le caractere ASCII correspondant def chr_bin(B): N=0 for i in range(7): if b[i]==bin('1'): N=N+2^(6-i) return chr(N) #transforme une suite de caracteres en la suite de mots de 7 bits correpsondante def codage(s): bin=BinaryStrings() m=bin('') for i in range(len(s)): m=m*ord_bin(s[i]) return m #transforme une suite de mots de 7 bits en la suite de caracteres correspondante def decodage(m): ch='' bin=BinaryStrings() for i in range(len(m)//7): b=m[7*i:7*(i+1)] N=0 for j in range(7): if b[j]==bin('1'): N=N+2^(6-j) ch=ch+chr(N) return ch #transforme une suite de caracteres en la suite de mots de 7 bits correspondant, puis en modifiant chaque bit avec une probabilité P def canal_imparfait(s,P): bin=BinaryStrings() m=bin('') for i in range(len(s)): m=m*ord_bin(s[i]) n=bin('') for i in range(len(m)): if random()0: if N%2==0: P=x*P else: P=y*P par=par+1 N=(N-N%2)/2 if par%2==0: return x^(7-len(P))*P*x else: return x^(7-len(P))*P*y #transforme une suite de caracteres en la suite de mots de 8 bits correpsondante def codage_etendu(s): bin=BinaryStrings() m=bin('') for i in range(len(s)): m=m*ord_bin_etendu(s[i]) return m #transforme une suite de caracteres en la suite de mots de 8 bits correspondant, puis en modifiant chaque bit avec une probabilité P def canal_imparfait_etendu(s,P): bin=BinaryStrings() m=bin('') for i in range(len(s)): m=m*ord_bin_etendu(s[i]) n=bin('') for i in range(len(m)): if random()