Пример #1
0
        sys.exit(1)

    base = int(sys.argv[1])
    power = int(sys.argv[2])
    delta = int(sys.argv[3])

    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