Регистр сдвига с линейной обратной связью?

В последнее время я неоднократно сталкивался с концепцией LFSR, которую я нахожу весьма интересной из-за ее связи с различными областями, а также увлекательной сама по себе. Мне потребовалось некоторое усилие, чтобы понять, последняя помощь была действительно хорошей страницей , намного лучше, чем (поначалу) загадочная статья в википедии . Итак, я хотел написать небольшой код для программы, которая работала бы как LFSR. Точнее, это как-то показало, как работает LFSR. Вот самое чистое, что я смог придумать после некоторых более длительных попыток (Python):

def lfsr(seed, taps):
    sr, xor = seed, 0
    while 1:
        for t in taps:
            xor += int(sr[t-1])
        if xor%2 == 0.0:
            xor = 0
        else:
            xor = 1
        print xor
        sr, xor = str(xor) + sr[:-1], 0
        print sr
        if sr == seed:
            break

lfsr('11001001', (8,7,6,1))      #example

Я назвал «xor» вывод функции XOR, что не очень правильно. the ...

В последнее время я неоднократно сталкивался с концепцией LFSR, которая мне показалась весьма интересной из-за ее связи с различными областями, а также увлекательной сама по себе. Мне потребовалось некоторое усилие, чтобы понять, последняя помощь была действительно хорошей страницей , намного лучше, чем (поначалу) загадочная статья в википедии . Итак, я хотел написать небольшой код для программы, которая работала бы как LFSR. Точнее, это как-то показало, как работает LFSR. Вот самое чистое, что я смог придумать после некоторых более длительных попыток (Python):

def lfsr(seed, taps):
    sr, xor = seed, 0
    while 1:
        for t in taps:
            xor += int(sr[t-1])
        if xor%2 == 0.0:
            xor = 0
        else:
            xor = 1
        print xor
        sr, xor = str(xor) + sr[:-1], 0
        print sr
        if sr == seed:
            break

lfsr('11001001', (8,7,6,1))      #example

Я назвал «xor» вывод функции XOR, что не очень правильно. the ...

В последнее время я неоднократно сталкивался с концепцией LFSR, которая мне показалась весьма интересной из-за ее связи с различными областями, а также увлекательной сама по себе. Мне потребовалось некоторое усилие, чтобы понять, последняя помощь была действительно хорошей страницей , намного лучше, чем (поначалу) загадочная статья в википедии . Итак, я хотел написать небольшой код для программы, которая работала бы как LFSR. Точнее, это как-то показало, как работает LFSR. Вот самое чистое, что я смог придумать после некоторых более длительных попыток (Python):

def lfsr(seed, taps):
    sr, xor = seed, 0
    while 1:
        for t in taps:
            xor += int(sr[t-1])
        if xor%2 == 0.0:
            xor = 0
        else:
            xor = 1
        print xor
        sr, xor = str(xor) + sr[:-1], 0
        print sr
        if sr == seed:
            break

lfsr('11001001', (8,7,6,1))      #example

Я назвал «xor» вывод функции XOR, что не очень правильно. последней подсказкой была эта действительно хорошая страница , намного лучше, чем (поначалу) загадочная запись в википедии . Итак, я хотел написать небольшой код для программы, которая работала бы как LFSR. Точнее, это как-то показало, как работает LFSR. Вот самое чистое, что я смог придумать после некоторых более длительных попыток (Python):

def lfsr(seed, taps):
    sr, xor = seed, 0
    while 1:
        for t in taps:
            xor += int(sr[t-1])
        if xor%2 == 0.0:
            xor = 0
        else:
            xor = 1
        print xor
        sr, xor = str(xor) + sr[:-1], 0
        print sr
        if sr == seed:
            break

lfsr('11001001', (8,7,6,1))      #example

Я назвал «xor» вывод функции XOR, что не очень правильно. последней подсказкой была эта действительно хорошая страница , намного лучше, чем (поначалу) загадочная запись в википедии . Итак, я хотел написать небольшой код для программы, которая работала бы как LFSR. Точнее, это как-то показало, как работает LFSR. Вот самое чистое, что я смог придумать после некоторых более длительных попыток (Python):

def lfsr(seed, taps):
    sr, xor = seed, 0
    while 1:
        for t in taps:
            xor += int(sr[t-1])
        if xor%2 == 0.0:
            xor = 0
        else:
            xor = 1
        print xor
        sr, xor = str(xor) + sr[:-1], 0
        print sr
        if sr == seed:
            break

lfsr('11001001', (8,7,6,1))      #example

Я назвал «xor» вывод функции XOR, что не очень правильно. Однако это просто показано, как он проходит через возможные состояния, на самом деле вы заметили, что регистр представлен строкой. Не очень логичной связности.

Это можно легко превратить в красивую игрушку, за которой можно смотреть часами (по крайней мере, я мог: -)

def lfsr(seed, taps):
    import time
    sr, xor = seed, 0
    while 1:
        for t in taps:
            xor += int(sr[t-1])
        if xor%2 == 0.0:
            xor = 0
        else:
            xor = 1
        print xor
        print
        time.sleep(0.75)
        sr, xor = str(xor) + sr[:-1], 0
        print sr
        print
        time.sleep(0.75)

Тогда меня осенило, какой в ​​этом смысл при написании программного обеспечения? Я слышал, что он может генерировать случайные числа; это правда? как? Итак, было бы неплохо, если бы кто-нибудь мог:

  • объяснить, как использовать такое устройство при разработке программного обеспечения
  • , придумать какой-то код, чтобы поддержать пункт выше или как мой, чтобы показать разные способы сделать это, в любой язык

Кроме того, поскольку вокруг этой части логики и цифровых схем не так много дидактических материалов, было бы неплохо, если бы здесь новички (вроде меня) могли лучше понять эту вещь , или лучше, чтобы понять, что это такое и как это может быть полезно при написании программного обеспечения. Надо было сделать это вики сообщества?

Тем не менее, если кому-то хочется поиграть в гольф ... добро пожаловать.

8
задан Nas Banov 19 September 2010 в 03:19
поделиться