[Перевод] Памяти Соломона Голомба (1932-2016): автора регистра сдвига с линейной обратной связью максимальной длины и полиомино

e65db65d84c94499945ac5e9f6c09bd5.png

Перевод поста Стивена Вольфрама (Stephen Wolfram) «Solomon Golomb (1932–2016)».
Выражаю огромную благодарность Полине Сологуб за помощь в переводе и подготовке публикации

Содержание


 — Наиболее часто используемый математический алгоритм в истории
 — Как я встретил Сола Голомба
 — История Соломона Голомба
 — Регистры сдвига
 — Предыстория регистров сдвига
 — Для чего нужны последовательности, генерируемые регистрами сдвига?
 — Ну и где же эти регистры?
 — Клеточные автоматы и регистры сдвига с нелинейной обратной связью
 — Полиомино
 — Остальная часть истории

Наиболее часто используемый математический алгоритм в истории


Октиллион. Миллиард миллиардов миллиардов. Это очень приблизительная оценка того, сколько раз мобильный телефон или другое устройство сгенерировало бит с помощью регистра сдвига с линейной обратной связью максимальной длины. Думаю, это самый используемый математический алгоритм в истории. Автор — Соломон Голомб, скончавшийся 1 мая, с которым мы были знакомы больше 35 лет.

Основой книги Соломона Голомба «Последовательности регистрового сдвига», опубликованной в 1967 году, были его работы 1950-х гг. А ее содержание живет в каждой из современных систем связи. Прочтите спецификации для 3G, LTE, Wi-Fi, Bluetooth или даже для GPS, — и вы найдете упоминания о многочленах, определяющих последовательности, генерируемые регистрами сдвига, которые эти системы используют для кодирования отправляемых ими данных. Соломон Голомб — человек, который создал эти многочлены.

Кроме того, он играл важную роль в вычислении расстояния до Венеры с использованием радиолокатора, а также в разработке кодировки изображений для отправки с Марса. Он представил миру то, что назвал полиомино (которые позже вдохновили создателей Тетриса — «Tetromino tennis»). Он создал и решил бесчисленное количество математических головоломок и каламбуров. Лет 20 назад я узнал, что он был очень близок к открытию моего любимого правила 30 для клеточных автоматов еще в 1959 году, когда я только родился.

Как я встретил Сола Голомба


Почти всех ученых и математиков, с которыми я знаком, я узнал благодаря моим профессиональным связям. Но только не Сола Голомба. Шел 1981 год, и я, 21-летний физик (ставший немного известным в СМИ потому, что был самым молодым получателем премии МакАртура на первой церемонии награждения) занимался исследованиями в Калифорнийском технологическом институте. В дверь моего кабинета постучались, и вскоре его порог переступила молодая женщина. Уже это было необычно, потому что в те времена там, где занимались теоретической физикой высоких энергий, женщин было безнадежно мало. Хотя я и прожил в Калифорнии несколько лет, я, тем не менее, не покидал пределов университета, а потому оказался плохо подготовлен к всплеску южнокалифорнийской энергии, которая ворвалась ко мне в кабинет. Женщина представилась Астрид и сказала, что посещала Оксфорд и знала кого-то, с кем я был в детском саду. Она объяснила, что ей было поручено собрать сведения об интересных людях в районе Пасадены. Думаю, она считала меня трудным случаем, но, тем не менее, настаивала на разговоре. И однажды, когда я пытался рассказать что-то о том, чем я занимаюсь, она сказала:»Вы должны встретиться с моим отцом. Он уже пожилой человек, но его ум по-прежнему острый, как бритва». И так случилось, что Астрид Голомб, старшая дочь Сола Голомба, познакомила меня с ним.

Семья Голомб жила в доме, расположенном в горах близ Пасадены. У них было две дочери: Астрид — немного старше меня, честолюбивая голливудская девушка, и Беатрис — примерно моего возраста и научного склада ума. Сестры Голомб часто устраивали вечеринки — как правило, у себя дома. Темы были разные: это и вечеринка в саду и крокет с фламинго и ежами (»победителем станет тот, чей костюм более всего будет соответствовать заявленной теме»), или вечеринка в стиле Стоунхендж с инструкциями, написанными рунами. На этих вечеринках пересекались молодые и не очень люди, в том числе — различные местные светила. И на них, немного в стороне, присутствовал всегда маленький человек с большой бородой, немного похожий на эльфа и носивший всегда темное пальто, — сам Соломон Голомб.

Постепенно я узнал немного о нем. То, что он был вовлечен в »теорию информации». То, что он работал в Университете Южной Калифорнии. То, что у него были различные неопределенные, но, по-видимому, высокоуровневые правительственные и другие связи. Я слышал про регистры сдвига, но практически ничего не знал о них.

Осенью 1982 года я посетил Bell Labs в Нью-Джерси и выступил с докладом о моих последних результатах в области клеточных автоматов. Одной из тем, которые я обсуждал, были «аддитивные» (или «линейные»), клеточные автоматы, а также их поведение с ограниченным числом клеток. Всякий раз, когда клеточный автомат обладает ограниченным числом клеток, его поведение в конечном итоге неизбежно будет повторяться… Однако по мере увеличения размера максимальный период повторения, — скажем, для правила 90 для аддитивного клеточного автомата, — скачет как будто бы совершенно случайным образом: 1, 1, 3, 2, 7, 1, 7, 6, 31, 4, 63, … Однако за несколько дней до выступления я заметил, что эти периоды, кажется, следуют формуле, которая зависит от простых множителей или числа клеток. Но когда я упомянул об этом, кто-то из сидящих далеко поднял руку и спросил:»Не знаете ли вы, работает ли это для n = 37? » В своих экспериментах я не имел дела с этим числом, поэтому я не знал. Но почему кто-то спросил меня об этом?

Того, кто спросил меня, звали Эндрю Одлыжко — он был теоретиком из Bell Labs. Я спросил его:»Что же заставляет вас думать, что с n = 37 может быть связано что-то особенное? ».»Ну, » — сказал он, — »я думаю, что то, что вы делаете, связано с теорией регистров сдвига с линейной обратной связью», и он предположил, что я смотрел книгу Сола Голомба.»Ах, да, » — сказал я, — »я знаю его дочерей…». Эндрю был прав: существует очень элегантная теория аддитивных клеточных автоматов на основе полиномов, аналогичная теории Сола, разработанной для регистров сдвига с линейной обратной связью. Эндрю и я написали неплохо теперь цитируемую статью об этом (это тот редкий случай, когда традиционные математические методы позволяют описать поведение клеточного автомата). А для меня побочным эффектом было то, что я узнал кое-что о том, чем же занимался Соломон Голомб (если вы помните, это все было до появления Интернета).

История Соломона Голомба


Соломон Голомб родился в Балтиморе, штат Мэриленд, в 1932 году. Его семья была родом из Литвы. Его дед был раввином, а отец еще совсем молодым переехал в США и получил степень магистра в области математики, после чего ушел в средневековую еврейскую философию и также стал раввином. Мать Сола происходила из известной русской семьи, изготавливавшей сапоги для царской армии, а затем руководила банком. Сол преуспевал в школе, будучи сильнейшим в дебатах. Воодушевленный отцом, он интересовался математикой и в 17 лет опубликовал статью о простых числах. После окончания средней школы он поступил в Университет Джона Хопкинса, чтобы изучать математику, и едва не попал в квоту на студентов-евреев (так что ему пришлось пообещать, что не уйдет в медицину, и затем Сол, увеличив себе нагрузку вдвое, окончил университет в 1951 году за половину обычного срока обучения).

Оттуда он отправился в Гарвард в аспирантуру по математике. Однако до этого он поработал летом в Glenn L. Martin Company — аэрокосмической компании, основанной в 1912 году, которая в 1920-е годы переехала в Балтимор из Лос-Анджелеса и стала оборонным подрядчиком, что в конечном итоге вылилось в Lockheed Martin. В Гарварде Сол специализировался на теории чисел, и, в частности, на вопросах характеризации множеств простых чисел. Но каждое лето он возвращался в Martin Company. Как он рассказывал позже, в Гарварде »вопрос о том, имело ли какое-либо практическое приложение то, чему там учили и учились, нельзя было даже произносить вслух, не говоря уже о его обсуждении». Но в Martin Company он обнаружил, что чистая математика, которую он знал, — даже простые числа, — действительно имеет практическое применение, в том числе и регистр сдвига.

В первое лето его работы на Martin Company Сол был закреплен за группой теории управления. Во второе лето он был помещен в группу по изучению связи. А в июне 1954 года случилось так, что его начальник побывал на конференции, где услышал о странном поведении сдвига регистра с линейной обратной связью, и он спросил Сола, сможет ли он заняться этими исследованиями. Вскоре Сол понял, что эту тему можно исследовать с помощью полиномов над конечными полями. Весь следующий год он делил свое время между аспирантурой в Гарварде и консалтингом для Martin Company, а в июне 1955 года он написал свой окончательный доклад — »Последовательности со случайными свойствами», который стал основополагающим для теории регистра сдвига.

Сол любил математические головоломки, и в процессе обдумывания головоломки с организацией костяшек домино на шахматной доске он изобрел то, что назвал впоследствии «полиомино». Он выступил с докладом о них в ноябре 1953 г. в Гарвардском математическом клубе, опубликовал о них статью (его первая исследовательская работа) и выиграл математическую премию Гарварда за работу с ними.

3af2a7196f8fe2b198a5e1fccc265822.png

В июне 1955 года Сол уехал на год в Университет Осло на программу Fulbright Fellowship — отчасти для того, чтобы поработать с некоторыми выдающимися теоретиками, отчасти для того, чтобы выучить норвежский, шведский и датский языки (и изучить некоторые рунические рукописи) и пополнить свою коллекцию языковых навыков. За время своего пребывания в Осло он закончил длинную статью о простых числах и успел попутешествовать по Скандинавии, а в Дании встретил молодую женщину по имени Бо (Bodil Rygaard), — она была родом из большой семьи и родилась в сельской местности, известной только своим торфяным мхом, но умудрилась попасть в университет и изучала философию. Сол и Бо, судя по всему, поладили, и спустя несколько месяцев поженились.

Когда в июле 1956 г. они вернулись в США, Сол дал несколько интервью, а затем поступил на работу в JPL — лабораторию реактивного движения, которая отделилась от Калифорнийского технологического института и занималась военными разработками. Сол был включен в группу по коммуникациям в качестве старшего инженера-исследователя. Это было тогда же, когда люди из лаборатории были готовы запустить спутник. Однако правительство не позволяло им, опасаясь, что это будет выглядеть как военные действия. Все изменилось в октябре 1957 года, когда Советский Союз запустил свой спутник якобы в рамках Международного геофизического года. Удивительно, но США потребовалось всего 3 месяца для того, чтобы запустить Эксплорер-1. JPL много сделала для запуска спутника, и группу Сола (где у него работали технические специалисты над реализацией регистрового сдвига в электронном виде) бросили на создание детекторов радиации; во время этой работы Сол смог вернуться ненадолго в Гарвард, чтобы сдать итоговые экзамены на получение степени PhD.

Это было время сосредоточения сил вокруг JPL и космической программы. В мае 1958 года была сформирована новая группа обработки информации, которую возглавил Сол, и в том же месяце родился первый его ребенок — Астрид. Сол продолжил свое исследование последовательностей, генерируемых регистрами сдвига применительно к радиоуправлению ракетами, устойчивому к заклиниванию. В мае 1959 года появилась вторая дочь Сола, которую назвали Беатриче (хорошая последовательность: А, Б…). Осенью 1959 года Сол взял академический отпуск в MIT, где он познакомился с Клодом Шенноном и рядом других светил MIT и занимался теориями информации и алгебраических кодов.

На тот момент он уже проделал определенную работу по теории кодирования в области биологии. Несмотря на то, что цифровая природа ДНК была обнаружена Джимом Уотсоном и Фрэнсисом Криком еще в 1953 году, до сих пор не было ясно, как именно последовательности из четырех возможных пар оснований кодируют 20 аминокислот. В 1956 году Макс Дельбрюк — бывший советник Уотсона на постдоке в Калифорнийском Технологическом — консультировался по этому вопросу с сотрудниками Лаборатории реактивного движения. Сол и двое его коллег проанализировали идею Фрэнсиса Крика и придумали «коды без запятых», в которых перекрывающиеся тройки пар оснований могут кодировать аминокислоты. Анализ показал, что таким образом могут быть закодированы ровно 20 аминокислот. Это было одно из самых удивительных объяснений; но, к сожалению, биология на самом деле работает не так (в биологии используется более простое кодирование, при котором некоторые из 64 возможных троек ничего не представляют).

Помимо биологии Сол также занимался физикой. Его последовательности, генерируемые регистрами сдвига, пригодились для вычисления дальности с помощью радара (используется в GPS); также Сол был назначен ответственным за то, чтобы найти расстояние до Венеры. И так получилось, что в начале 1961 года, когда Солнце, Венера и Земля выстроились наиболее удачно, Сол с помощью 85-футовой радиоантенны Голдстоун, расположенной в пустыне Мохаве, получил радиолокационный сигнал от Венеры и уточнил имеющиеся у нас данные о расстояниях Земля-Венера и Земля-Солнце.

Учитывая интерес Сола к языкам, кодированию и космосу, неудивительно, что он заинтересовался инопланетянами. В 1961 году он написал статью для ВВС под названием »Краткое пособие по внеземной лингвистике», и в течение следующих нескольких лет написал несколько статей по этой теме для более широкой аудитории. Он сказал: «в отношении контакта с инопланетянами существует 2 основные проблемы: одна из них — проблема обнаружения взаимоприемлемого канала. Другая — более философская проблема (семантическая, этическая и метафизическая), состоящая в поиске надлежащего предмета для дискуссии. Проще говоря, сначала нам требуется найти общий язык, а потом мы должны подумать, что сказать». Далее он со свойственным ему юмором продолжал:»Естественно, мы не должны рассказывать им слишком много, пока не узнаем, достаточно ли благородные у них намерения. Правительство, несомненно, создаст Космическое Разведывательное Управление (КРУ) для мониторинга внеземного разума. Будут приняты экстремальные меры безопасности. Как однажды отметил Герберт Уэллс [или это был эпизод из Сумеречной зоны?], что, даже если инопланетяне скажут нам со всей откровенностью, что их единственная цель — «служить человечеству», мы должны выяснить, желают ли они послужить нам в запеченном или в жареном виде.»

Во время своей работы в лаборатории JPL Сол также преподавал в близлежащих университетах: Калифорнийском технологическом институте, Университете Южной Калифорнии и в университете Лос-Анджелеса. Осенью 1962 года, после изменения ситуации в лаборатории (и, возможно, потому, что он хотел проводить больше времени со своими маленькими детьми), он решил стать профессором на полный рабочий день. Он получил предложения от всех трех университетов. Он хотел пойти туда, где он мог бы работать свободно. Ему сказали, что в Калифорнийском технологическом институте »никто кроме Нобелевских лауреатов не имеет никакого влияния», а в Лос-Анджелесе »такая бюрократия, что никто и ни на что не может повлиять». В результате Сол выбрал университет Южной Калифорнии даже несмотря на его низкую репутацию. Весной 1963 года он приступил к работе в качестве профессора электротехники в конечном итоге проработал там 53 года.

Регистры сдвига


Прежде чем продолжить рассказ о жизни Сола, я должен объяснить, что такое регистр сдвига с линейной обратной связью (LFSR). Основная идея довольно проста. Представьте себе ряд квадратов, каждый из которых содержит 1 или 0 (скажем, черный или белый). В чистом регистре сдвига все происходящее сводится к смещению всех значений на один шаг влево, при этом крайнее левое значение теряется, а новое значение берется справа. Идея регистра сдвига с обратной связью заключается в том, что значение, которое сдвинулось, определяется (или «подается обратно») в зависимости от значений других положений в регистре сдвига. В регистре линейного сдвига с обратной связью значения из «ответвлений» в определенных позициях в регистре объединяются по модулю 2 (так что 1⊕1 = 0 вместо 2), или применяется XOR («исключающее или»).

e83004c383694c98c4ae189a6eb83f7c.png

Вот что происходит через некоторое время:

0f5f281001394d5e77a3f7f275146ef8.png

Как вы видите, регистр сдвига всегда сдвигает биты влево,  а другие биты добавляются справа согласно простому правилу. Последовательность битов кажется случайной,  хотя, как показано на рисунке,  она в конечном итоге повторяется. Сол Голомб нашел элегантный математический способ анализа таких последовательностей и того, как они повторяются.

Если регистр сдвига имеет размер n, то у него есть 2n возможных состояний (соответствующих всем возможным последовательностям 0 и 1 при длине n). Поскольку правила для регистра сдвига детерминированы, любое данное положение должно всегда прийти к другому такому же положению. А это означает, что максимально возможное число шагов, которое регистр сдвига может пройти, прежде чем шаги начнут повторяться, равно 2n (на самом деле 2n — 1, так как положение со всеми 0 не может эволюционировать во что-нибудь еще).

В приведенном выше примере, регистр сдвига имеет размер 7 и повторится ровно через 27 — 1 = 127 шагов. Но какие регистры сдвига — с какими расположениями ответвлений — будут производить последовательности максимальной длины? Это вопрос Соломон Голомб начал исследовать летом 1954 года. И его ответ был прост и элегантен.

Регистр сдвига приведенный выше имеет ответвления в положениях 7, 6 и 1. Сол представил это алгебраически, используя многочлен х7 + х6 + 1. Он показал тогда, что генерируемая последовательность будет максимальной длины, если этот многочлен »неприводим по модулю 2»; поэтому он не может быть факторизован, что делает его аналогом простого числа среди многочленов;, а наличие некоторых других свойств делает его «примитивным многочленом». На сегодняшний день это легко проверить с помощью системы Mathematica и языка Wolfram Language:

ba3a8658db14bc17190373e1fae61627.png

Тогда, в 1954 году, Сол должен был делать всё это вручную; он составил довольно длинную таблицу примитивных многочленов, соответствующих регистрам сдвига, которые выдавали последовательности максимальной длины:

d65fc21ec97061a584c802d08223f6c7.png

Предыстория регистров сдвига


Идея поддержания оперативной памяти посредством »линий задержки», которые передают цифровые импульсы, восходит к началу эпохи ЭВМ. К концу 1940-х годов такие линии задержки применялись в цифровом виде с помощью ряда вакуумных трубок и назывались »регистры сдвига». Пока не ясно, когда были созданы первые регистры сдвига с обратной связью. Возможно, это было в конце 1940-х годов. Однако это событие до сих пор окутано тайной, потому что впервые они были использованы в военной криптографии.

Основная идея криптографии — изменение осмысленных сообщений таким образом, чтобы их нельзя было распознать; при этом, если вы знаете ключ, вы сможете воссоздать зашифрованное сообщение. Так называемые потоковые шифры работают по принципу создания длинных последовательностей как бы случайных элементов, и декодируются с помощью приемника, самостоятельно генерирующего ту же последовательность элементов.

Регистры сдвига с линейной обратной связью ценились в криптографии из-за длинных периодов повтора. Однако математический анализ, который Сол использовал, чтобы найти эти периоды, дает понять, что такие регистры сдвига не годятся для безопасной криптографии. Однако в начале они казались неплохими (особенно в сравнении с последовательными положениями ротора в Энигме); ходили упорные слухи, что на этой основе строились советские военные криптосистемы.

Еще в 2001 году, когда я работал над историческими заметками для моей книги Новый вид науки, мы с Солом долго говорили по телефону о сдвигах регистра. Сол сказал мне, что, когда он начинал, он ничего не знал о криптографической работе по регистрам сдвига. Он сказал, что сотрудники лаборатории Белла, лаборатории Линкольна и Лаборатории реактивного движения начали работать над регистрами сдвига примерно в то же время, что и он; однако ему удалось продвинуться немного дальше, что он и отметил в своем отчете от 1955 года.

В течение последующих лет Сол постепенно узнавал о различных предшественниках своих работ из литературы, посвященной чистой математике. Уже в 1202 году Фибоначчи говорил о том, что теперь называют числами Фибоначчи и которые генерируются рекуррентным соотношением (которое может рассматриваться как аналог регистра сдвига с линейной обратной связью, работающего с произвольными целыми числами, а не с нулями и единицами). Существуют также небольшие работы начала 1900-х по цикличности 0 и 1, однако первым крупномасштабным исследованием стала работа Ойстена Оре из Университета Осло. У Оре был студент по имени Маршалл Холл, который консультировал предшественника Агентства национальной безопасности в конце 1940-х гг. — вероятно, по теме регистров сдвига. Однако все, что он делал, было засекречено, и поэтому он договорился с Солом, чтобы тот опубликовал историю регистров сдвига с линейной обратной связью; Сол посвятил свою книгу Маршаллу Холлу.

Для чего нужны последовательности, генерируемые регистрами сдвига?


Я много раз замечал, что системы, определяемые простыми правилами, в конечном итоге имеют много вариантов приложений; регистры сдвига также следуют этой закономерности. И современное оборудование, и программное обеспечение напичкано регистрами сдвига: в обычном мобильном телефоне, вероятно, их десяток или два, реализованных, как правило, на аппаратном уровне, а иногда — и в программном обеспечении (когда я пишу здесь «регистр сдвига», я имею в виду регистр сдвига с линейной обратной связью — LFSR).

В большинстве случаев используются те регистры сдвига, которые дают последовательности максимальной длины (иначе известные как »М-последовательности»). Причины, по которым они используются, как правило, связаны с некоторыми их свойствами, которые обнаружил Сол. Они всегда содержат одинаковое количество 0 и 1 (хотя на самом деле всегда есть ровно одна дополнительная 1). Впоследствии Сол показал, что им также свойственно одинаковое количество последовательностей 00, 01, 10 и 11 — и для больших блоков тоже. Это свойство »баланса» это само по себе уже очень полезно, — к примеру, если тестировать все возможные комбинации битов в качестве входных данных.

Однако Сол обнаружил еще одно, даже более важное свойство. Замените каждый 0 в последовательности на 1, затем умножьте каждый элемент в сдвинутой версии последовательности на соответствующий элемент оригинала. Сол показал, что при сложении эти элементы всегда будут равны нулю (кроме случаев, когда никакого сдвига нет вообще). То есть последовательность не имеет никакой корреляции со сдвинутыми версиями самой себя.

Эти свойства будут верны для любой достаточно длинной случайной последовательности из 0 и 1. Удивительно, что для последовательностей максимальной длины эти свойства всегда верны. Последовательности имеют некоторые черты хаотичности, однако на самом деле они вовсе не хаотичны: они имеют вполне определенную, организованную структуру.

Именно эта структура, свойственная регистрам сдвига с линейной обратной связью, делает их непригодными для серьезной криптографии. Но они прекрасно подходят для базовой «перестановки элементов» и дешевой криптографии и активно используются для этих целей. Часто стоит задача просто «отбелить» сигнал (как в «белом шуме»). Иногда нужно передавать данные с длинными последовательностями 0. Но электроника в таком случае может запутаться, если «молчание» будет слишком долгим. Можно избежать этой проблемы через скремблинг исходных данных путем объединения его с последовательностью, генерируемую регистром сдвига. Именно это было сделано с Wi-Fi, Bluetooth, USB, цифровым TV, интернетом и т. д.

Побочный эффект скремблинга регистра сдвига — более сложное декодирование, что используется иногда для повышения безопасности (в технологии DVD для кодирования данных используется комбинация регистров сдвига с длиной 16 и 24 бита; многие GSM телефоны используют комбинацию из трех регистров сдвига для кодирования всех сигналов).

В GPS также используются последовательности регистра сдвига. Каждый GPS спутник непрерывно передает последовательность, генерируемую регистром сдвига, длиной 10 бит. По полученной части последовательности приемник может точно определить, в какое время принятый им сигнал был отправлен с конкретного спутника. И затем, путем сравнения задержки времени от различных спутников, приемник может триангулировать свое положение (существует также режим GPS, использующий регистр сдвига длиной 1024 бита).

e7044ee562cc2c4bf917c341713da154.png

Совершенно по-другому регистры сдвига используются для обнаружения ошибок. Скажем, некто передает блоки битов, и для каждого из них существует небольшая вероятность ошибки. Простой способ проверить единичную ошибку — включить »бит четности», который сообщает, какое количество 1 (нечетное или четное количество) должно быть в блоке битов. Можно также применять CRC (циклические проверки избыточности), которые могут искать большее количество ошибок, и вычисляются они путем подачи данных в регистр сдвига с линейной обратной связью. Есть также коды коррекции ошибок, которые позволяют не только обнаружить, но и исправить определенное количество ошибок, и некоторые из них также могут быть вычислены посредством последовательностей, генерируемых регистрами сдвига — и Сол Голомб использовал версии этих кодов, называемых коды Рида-Соломона, для кодирования видео для космического корабля на Марс.

Сфера применения последовательностей, генерируемых регистрами сдвига, становится все шире. Существует довольно экзотический пример использования последовательностей, генерируемых регистрами сдвига, к фазовому дрожанию часов в компьютере — разложение частоты, на которой процессор потенциально может генерировать радиочастотные помехи (выберите «Enable Spread Spectrum» в BIOS).

Одно самых известных применений последовательностей регистра сдвига — CDMA телефоны (множественный доступ с кодовым разделением). Сотовые телефоны получили свое название потому, что они работают в «клетках», и все телефоны определенной клетки соединены с определенной башней. Но как различные мобильные телефоны в «клетке» не мешают друг другу? В первых системах каждый телефон просто «согласовывал» с башней использование несколько иной частоты. Позже стали использовать различные срезы времени (TDMA — множественный доступ с разделением каналов по времени). А CDMA в качестве разумной альтернативы использует последовательности регистра сдвига максимальной длины.

Идея заключается в том, чтобы все телефоны работали на одной и той же частоте, но каждый телефон кодировал свой сигнал, используя (в простейшем случае) разные варианты последовательностей, генерируемых регистрами сдвига. Согласно результатам Сола, разные варианты сдвига не коррелируют между собой, а потому сигналы мобильных телефонов не интерферируют. Так работает большинство сетей 3G.

Сол создал математическую основу для всего этого, а также перезнакомил друг с другом ряд ключевых фигур. Еще в 1959 году он познакомился с Ирвином Джейкобсом, который недавно получил докторскую степень в Массачусетском технологическом институте. Также он был знаком с Энди Витерби, который работал в Лаборатории реактивного движения. Сол познакомил их, и в 1968 году они основали компанию под названием Linkabit, работавшую над системами кодирования (в основном для военных целей).

В 1985 году Джейкобс и Витерби основали еще одну компанию под названием Qualcomm. Сначала дела у них шли не особенно хорошо, но к началу 1990-х годов, когда они начали производить компоненты для развертывания CDMA в сотовых телефонах, компания начала стремительно расти.

Ну и где же эти регистры?


Удивительно, что большинство людей никогда не слышали о регистрах сдвига и при этом взаимодействуют с ними всякий раз, когда пользуются современными системами связи, вычислительной техникой и т. д. Здесь несложно запутаться, учитывая, что за разными названиями и аббревиатурами оказываются те же последовательности регистров сдвига с линейной обратной связью (PN, псевдошум, M-, FSR, LFSR последовательности, MLS, SRS, PRBS, и т. д.).

Если рассматривать мобильные телефоны, то использование в них последовательностей, генерируемых регистрами сдвига, менялось на протяжении многих лет, — то увеличиваясь, то уменьшаясь. 2G сети основаны на TDMA, так что для кодирования своих данных не используют последовательности, генерируемые регистрами сдвига, однако до сих пор часто используют CRC (циклический избыточный код) для проверки блоков данных. 3G сети — крупнейшие пользователи CDMA, так что последовательности, генерируемые регистрами сдвига, задействованы в передаче каждого бита. 4G сети обычно используют сочетание времени и частоты слотов, не включающих последовательности регистров сдвига, хотя CRC еще используются: например, чтобы взаимодействовать с целостными данными, когда частотные окна перекрывают друг друга. 5G имеет более сложную структуру — с множеством антенн, динамически адаптирующихся для использования оптимального времени и частоты слотов. Однако половина их каналов, как правило, выделяется для «пилот-сигналов», которые используются для выведения локальной радиосреды; в их основе также лежат последовательности, генерируемые регистрами сдвига.

При производстве электроники обычно стараются достичь наиболее высокой скорости передачи данных при минимальных энергозатратах, позволяющих битам преодолевать шумовой порог. И, как правило, этот путь приводит к автоматизации обнаружения ошибок, —, а значит, к использованию CRC (циклического избыточного кода) и, следовательно, последовательностей, генерируемых сдвиговым регистром. Это касается практически всех видов шин внутри компьютера (PCIe, SATA и т. д.): обеспечивающих взаимодействие частей центрального процессора, или получение данных с устройств, или подключение к дисплею с HDMI. В случае с дисками или с памятью CRC и другие коды, основанные на последовательностях, генерируемых регистрами сдвига, также практически повсеместно используются для работы на максимальной скорости.

Регистры сдвига настолько вездесущи, что практически невозможно оценить, сколько бит ими генерируется. Существует примерно 10 миллиардов компьютеров, чуть меньше — телефонов, и огромное количество устройств во встроенным IoT («интернетом вещей»). Почти у каждого автомобиля в мире (а их больше миллиарда!) — около 10 встроенных микропроцессоров.

На какой частоте работают регистры сдвига? В системах связи есть базовая несущая частота в герцовом диапазоне, а также «скорость передачи элементов сигнала», которая говорит о том, как быстро осуществляется множественный доступ (речь идет о CDMA) в диапазоне МГц. С другой стороны, в шинах внутри компьютеров все данные передаются с помощью регистров сдвига — с наилучшей скоростью передачи в герцовом диапазоне.

Существует по крайней мере 10 миллиардов линий связи, работающих по крайней мере 1/10 миллиарда секунд (около 3-х лет), которые используют по меньшей мере 1 миллиард битов из сдвиговых регистров каждую секунду, что означает, что на сегодняшний день алгоритм Сола был использован по крайней мере октиллион раз.

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

Однако есть «алгоритмические идеи», которые остаются непонятными для всех, кроме дизайнеров микропроцессоров. Когда Бэббидж делал свою разностную машину (см. статью на Хабре «Распутывая историю Ады Лавлейс (первого программиста в истории)»), переносы стали большой помехой в выполнении арифметических операций (на самом деле, о регистре сдвига с линейной обратной связью можно думать как о системе, которая делает что-то вроде арифметических вычислений, но не осуществляет перенос). Существуют «деревья распространения сигнала переноса», оптимизирующие перенос. Есть также маленькие хитрости (вроде «алгоритма Бута»,» деревьев Уоллеса» и т. д.), которые уменьшают количество битовых операций, необходимых для создания «внутренностей» арифметики. Но, в отличие от регистров сдвига с линейной обратной связью, единой алгоритмической идеи, которая использовалась бы практически где угодно, просто не существует; поэтому я думаю, что максимально длинные последовательности, генерируемые ре

© Habrahabr.ru