if delta > base**power - 1: print 'Delta must be <=', base**power - 1 sys.exit(1) # Generate $GF(q^n)$ for $q=base $n$=power and find our root of unity GFqn = GFpoly(base, power) alpha = nth_root_of_unity(GFqn, base**power - 1) # Calculate the generator polynomial $G(x) = \prod_{i=1}^{\delta}{(x - \alpha^i)}$ Gpoly = Polynomial((GFqn(1),)) for b in range(1, delta): Gpoly *= Polynomial((-(alpha ** b), GFqn(1))) codeword_len = base**power - 1 message_len = base**power - len(Gpoly) # Compute the codeword corresponding to the message [1, 2, ... message_len] message = Polynomial([GFqn(i + 1) for i in range(message_len)]) codeword = message * Gpoly print 'Alpha =', alpha.tonumber() print 'g(x) =', Gpoly print 'Message', message.asvector(), 'maps to', codeword.asvector() print 'message % g(x) =', message % Gpoly print 'codeword % g(x) =', codeword % Gpoly maxErrors = (codeword_len - message_len) // 2 print 'Can detect', codeword_len - message_len, 'errors' print 'Can correct', maxErrors, 'errors'
if delta > base**power - 1: print 'Delta must be <=', base**power - 1 sys.exit(1) # Generate $GF(q^n)$ for $q=base $n$=power and find our root of unity GFqn = GFpoly(base, power) alpha = nth_root_of_unity(GFqn, base**power - 1) # Calculate the generator polynomial $G(x) = \prod_{i=1}^{\delta}{(x - \alpha^i)}$ Gpoly = Polynomial((GFqn(1), )) for b in range(1, delta): Gpoly *= Polynomial((-(alpha**b), GFqn(1))) codeword_len = base**power - 1 message_len = base**power - len(Gpoly) # Compute the codeword corresponding to the message [1, 2, ... message_len] message = Polynomial([GFqn(i + 1) for i in range(message_len)]) codeword = message * Gpoly print 'Alpha =', alpha.tonumber() print 'g(x) =', Gpoly print 'Message', message.asvector(), 'maps to', codeword.asvector() print 'message % g(x) =', message % Gpoly print 'codeword % g(x) =', codeword % Gpoly maxErrors = (codeword_len - message_len) // 2 print 'Can detect', codeword_len - message_len, 'errors' print 'Can correct', maxErrors, 'errors'