Теорія кодування — це вивчення властивостей кодів та їхньої придатності для виконання специфічних задач. Коди використовуються для стиснення даних, криптографії, знаходження і виправлення помилок, передачі та зберігання даних, і від недавнього часу — для мережевого кодування[en]. Коди вивчаються у теорії інформації, електротехніці, математиці і кібернетиці для створення ефективних і надійних методів перетворення даних. Зазвичай процес кодування включає усунення надлишку даних та виправлення або виявлення помилок у даних, що передаються.

Шрифт Брайля — типовий приклад коду, який використовує стиснені дані на певній відстані, щоб компенсувати помилки і втрати часу при читанні[1].

У теорії кодування існують чотири основні методи обробки інформації[2]:

  1. Стиснення даних, або source coding — кодування джерела;
  2. Попередня корекція помилок, або пряма корекція помилок (також використовують термін англ. channel coding);
  3. Криптографічне кодування;
  4. Лінійне кодування.

Кодування джерела спрямоване на стиснення даних для їхньої ефективнішої передачі. Ця практика зустрічається кожен день в Інтернеті, де стиснення даних використовується для зниження навантаження на мережу та з метою зменшення розміру файлу.

Наприклад, стиснення даних Zip робить файли даних меншими для таких цілей, як зменшення Інтернет-трафіку. Стиснення даних та виправлення помилок у такому випадку можуть застосовуватися одночасно.

Виправлення помилок додає додаткові біти даних, щоб зробити передачу даних, присутню на каналі передачі, стійкішою до перешкод. Звичайний користувач не має уявлення щодо багатьох додатків, які використовують кодування каналу. Для запису типового музичного компакт-диску (CD — [сіді́]), пошкодженого подряпинами чи спотвореної пилом використовується код Ріда-Соломона (англ. Cross-interleaved Reed–Solomon coding, CIRC) для корекції інформації, що на ньому. Навіть якщо пошкоджено значний обсяг інформації, зіпсовано кілька секторів дискового носія, то код Ріда — Соломона дозволяє відновити велику частину втраченої інформації. У цьому додатку каналом передачі є сам CD[3][4].

У стільникових телефонах також використовується метод кодування для корекції завмирання і шуму високої частоти передачі радіосигналу.

Модеми даних, телефонні трансляції та «мережі глибокого космосу НАСА» (Deep Space Network National Aeronautics and Space Administration, DSN NASA) використовують канальні методи кодування, щоб отримати біти через, наприклад, турбо-код і LDPC коди[5].

Історія теорії кодування ред.

 
двовимірна візуалізація відстані Геммінга

У 1948 році Клод Шеннон опублікував статтю «Математична теорія зв'язку» у Технічному журналі Bell System (Bell System Technical Journal). Ця робота присвячена питанню, як краще кодувати інформацію, яку відправник хоче передати. У цій фундаментальній праці автор використовував інструменти з теорії ймовірностей, розроблених Норбертом Вінером, які на той час перебували в стадії їх першорядних розрахунків і застосовувалися до теорії комунікації. Шеннон розробив інформаційну ентропію як міру невизначеності в повідомленні в той час, власне — це було винаходом області теорії інформації.

Двійковий код Голея був розроблений в 1949 році. Цей код корекції помилок може виправляти до трьох помилок в кожному з 24-бітному слові і виявити четверту[5]:26.

Річард Геммінг отримав премію Тюрінга в 1968 році за свою роботу в Bell Labs з чисельних методів, систем автоматичного кодування і виявлення помилок і кодів, що виправляють помилки. Він винайшов поняття, відомі як Коди Гемінга, віконна функція, числа Геммінга[en], і відстань Геммінга.

Джерело кодування ред.

Метою кодування джерела є отримання вихідних даних та їх зменшення.

Визначення ред.

Дані можуть розглядатися як випадкова величина:   , де   з'являється з ймовірністю  .

Дані кодуються рядками (слів) в алфавітному порядку  .

Код є функцією  (or   якщо порожній рядок не є частиною алфавіту).

Де   — це кодове слово, пов'язане з  .

Довжина кодового слова записується у вигляді  .

Очікувана довжина коду  .

Конкатенації кодових слів  .

Кодове слово порожнього рядка є самим порожнім рядком:  

Властивості ред.

  1.   є несингулярною[en], якщо ін'єкційна.
  2.   є однозначно декодованою[en], якщо ін'єкційна.
  3.   відбувається миттєвою якщо   не є префіксом[en]   (і навпаки).

Правило ред.

Ентропія джерела є мірою інформації. В основному, вихідні намагаються зменшити надмірність інформації, присутню в джерелі, і являють собою джерело з меншою кількістю бітів, які несуть більше інформації.

Стиснення даних, яке явно намагається мінімізувати середню довжину повідомлень, відповідно до певної стандартної моделі ймовірностей називається ентропійним кодуванням.

Різні методи, які використовують схеми кодування джерела, намагаються досягти межі ентропії джерела. C(x) ≥ H(x), де H(x) є ентропією джерела (швидкість), і C(x) — це бітрейт після стиснення. Зокрема, жодна схема кодування джерела не може бути кращою, ніж ентропія джерела.

Приклад ред.

Факсимільний зв'язок використовує простий код довжини серії. Джерело кодування видаляє всі зайві дані для передавача, знижуючи пропускну здатність, необхідну для передачі.

Канальне кодування ред.

Додаткові відомості: Виявлення та виправлення помилок

Мета теорії кодування каналу полягає у тому, щоб знайти коди, які швидко передаються, містять багато дійсних кодових слів і можуть виправити або принаймні виявити багато помилок. Хоча вони не є взаємовиключними, продуктивність кодування у цих сферах є компромісом. Таким чином, для різних областей застосування відповідно оптимальними є і різні коди. Необхідні властивості канального коду в основному залежать від ймовірності помилок, що відбуваються під час передачі.

У звичайному компакт-диску, погіршення якості інформації, що зберігається на ньому, в основному відбувається завдячуючи пилу або подряпинам. Компакт-диски використовують поперечно перемежоване кодування Ріда — Соломона для розповсюдження даних на диску. Отже, коди використовуються з чергуванням. Дані розкидані по всьому диску. Хоча це і не дуже прийнятний код, код з простим повтором[6] може слугувати зрозумілим прикладом[3].

На прикладі, якщо взяти блок бітів даних (що представляє звук) і відправити його три рази. У приймальнику ми отримаємо біт з трьома повтореннями частинами і приймемо більшість звуку. Суть цього прикладу полягає в тому, що біти не просто надсилаються по порядку, а у їх чергуванні. Блок бітів даних спочатку ділиться на 4 менші блоки. Потім відбувається проходження циклу по блоку і відправляється один біт з першого, потім другого і т. д. Це робиться три рази, щоб розподілити дані по поверхні диска. У контексті коду з простим повтором це може виявитися неефективним. У випадку, коли використовується цей метод чергування існують більш потужні коди, які ефективніші для виправлення помилки «сплеску» (burst), подряпин або пилової плями.

Наприклад космічний зв’язок у глибині космосу обмежений тепловим шумом приймача, сигнал якого радше безперервний, ніж переривчастий. Подібно до цього, модеми з вузькосмуговим діапазоном частот обмежені шумом, що присутній в телефонній/стільниковій мережі, а також змодельовані практичніше щодо безперервного сигналу[5]:26. Натомість у стільникових телефонів присутнє швидке затухання сигналу. Використовувані високі частоти можуть спричинити швидке згасання сигналу, навіть якщо приймач переміщений на кілька сантиметрів. Знову ж таки, існує клас канальних кодів, призначених для боротьби із згасанням сигналу[5]:26[4]:21.

Лінійні коди ред.

Термін алгебраїчна теорія кодування позначає підполе теорії кодування, де властивості кодів виражаються алгебраїчними термінами, а потім досліджуються далі. Теорія алгебраїчного кодування в основному поділяється на два основних типи кодів[4]:22.

Алгебраїчна теорія кодування в основному ділиться на два основних типи кодів:

  1. Блоки лінійних кодів;
  2. Згорткові коди.

Вона аналізує наступні три головні властивості коду:

  • довжина кодового слова;
  • загальна кількість дійсних кодових слів;
  • мінімальна відстань між двома дійсними кодовими словами, використовуючи в основному відстань Геммінга, а іноді і інші відстані, як відстані Лі[en].

Блоки лінійних кодів ред.

Блоки лінійних кодів мають властивість лінійності[en], тобто сума будь-яких двох кодових слів також кодове слово, і вони застосовуються до вихідних бітів в блоках, звідси і назва лінійних блокових кодів. Є блокові коди, які не є лінійними, але це важко довести, що код є хорошим без цієї властивості. Блоки лінійних кодів наведені їх символами алфавітів (наприклад, двійковими або трійковими) та параметрами (n,m,dmin), де

  1. n — довжина кодового слова, в символах,
  2. m — це число вихідних символів, які будуть використовуватися для кодування відразу,
  3. dmin — мінімальна відстань Геммінга для коду[4].

Є багато типів лінійних блокових кодів, такі як:

  1. Циклічні коди (наприклад, коди Геммінга)
  2. Біт парності
  3. Поліноміальні коди[en] (наприклад, коди БЧХ (BCH))
  4. Коди Ріда-Соломона
  5. Алгебраїчно-геометричні коди[en]
  6. Коди Ріда-Мюллера[en]
  7. Ідеальні коди[en]

Блок коди тісно пов'язані з проблемою «Задача про пакування куль», до якої була привернута увага багатьох математиків та спеціалістів у цій сфері протягом багатьох років. У двох вимірах, це легко візуалізувати. Взявши купу монет однакового діаметру на столі і зсовуючи їх до купи, в результаті має скластися картина шестикутника у вигляді бджолиних стільників. Але блокові коди залежать від більшого числа вимірів, які не можуть легко бути візуалізованими. «Потужний» (24,12) код Голея, який використовується для далекого космічного зв'язку використовує 24 вимірювання. При використанні як двійкового коду (який, як правило, є) розміри відносяться до довжини кодового слова, як визначено вище.

Теорія кодування використовує N-мірну модель сфери. Наприклад, скільки монет однакового розміру можуть бути укладені в коло на столі, або в 3-х вимірах, скільки кульок певного діаметру можуть бути упаковані в кулю, діаметром із нашу Землю. Інші міркування передбачають вибір коду. Наприклад, при укладці шестикутної тари в обмежений простір прямокутної коробки залишиться порожній обшар в кутах. Із збільшенням корисного об'єму, відсоток порожнього простору стане все меншим. Але за умови, що тара, яка поміщена в середину прямокутної коробки прийме об'єм максимально наближений до об'єму коробки, — по аналогії «корисного об'єму» поєднання кодів буде мати значення «досконалих» кодів. Єдиними нетривіальними та корисними досконалими кодами є коди Геммінга на відстань-3 із параметрами, що задовольняють умову: (2r — 1, 2r — 1 – r, 3); а також [23,12,7] двійковий і [11,6,5] трійковий коди Голея[7][8].

Іншою властивістю коду є кількість сусідів, яку може мати одне кодове слово[9]. Знову ж, розглянемо копійки, як приклад. Спочатку укладаємо монети в прямокутну решітку — кожна копійка матиме 4 суміжних сусіда (і 4 у кутах, що знаходяться далі). У шестикутнику кожна копійка матиме 6 суміжних сусідів. За умови збільшення площі прямокутної решітки, кількість найближчих сусідів дуже швидко збільшиться. В результаті значно зросте і кількість способів для утворення шуму, яка змусить приймач обирати сусіда (отже, помилка). Це фундаментальне обмеження блокових кодів, та й взагалі всіх кодів. Можливо, важче спричинити помилку одному сусіду, але кількість сусідів може бути досить великою, тому загальна ймовірність помилки зростає, від чого зазнає втрат цільність і суть коду як такого[9].

Властивості лінійних блокових кодів використовуються в багатьох областях застосування, в тому числі й додатках. Наприклад, властивість унікальності синдрому-лінійки лінійних блокових кодів використовується у формуванні решітки, одному з найвідоміших кодів формування[en][7][8]. Ця ж властивість використовується в сенсорних мережах для розподіленого кодування джерела.

Згорткові коди ред.

Додаткові відомості: Згорткове кодування

Ідея згорткового коду полягає в тому, щоб кожен символ кодового слова був зваженою сумою різних символів вхідного повідомлення. Це схоже на згортку, яка використовується у лінійних інваріантних до часу системах, для пошуку вихідних даних системи, коли відомі вхідні та імпульсні характеристики.

Отже, як правило, знаходимо вихідні дані системного згорткового кодера, який є згорткою вхідного біта, всупереч положенню згорткового кодера, реєстру.

Фундаментально, згорткові коди пропонують більш високий рівень захисту від шуму, ніж еквівалентний блок коду. У багатьох випадках, вони зазвичай пропонують велику простоту реалізації над блоком коду рівної потужності. Кодер, як правило, проста схема, яка має стан пам'яті і якась логіка зворотного зв'язку, як правило, XOR-шлюзу. Декодер може бути реалізований в програмному забезпеченні або в прошивці.

Алгоритм Вітербі є оптимальним алгоритмом, який використовується для декодування згорткових кодів. Є спрощення, щоб знизити обчислювальне навантаження, воно полягає у пошуку лише найбільш вірогідних шляхів. Незважаючи на те, що такі спрощення не є оптимальними, завдяки їхньому застосуванню є хороші результати в умовах низького рівня шуму.

Згорткові коди використовуються в модемах голосового зв'язку (V.32, V.17, V.34) та в GSM мобільних телефонів, а також супутникових і військових пристроях зв'язку[5]:26.

Криптографічне кодування ред.

Криптографія або криптографічне кодування має практичне застосування і займається вивченням методів для безпечного спілкування[en] в присутності третіх осіб, так званих супротивників[10]. У більш загальному сенсі, йдеться про побудову і аналіз протоколів, що блокують діяльність супротивників[11], різні аспекти безпеки інформації, такі як конфіденційність, цілісність, автентифікація та невідмовність[12], що є головним для сучасної криптографії та інформаційної безпеки. Сучасна криптографія тісно пов'язана із дисциплінами: математика, інформатика та електротехніка. До застосувань криптографії належать банкомати, комп'ютерні паролі та електронна комерція.

Криптографія до теперішнього часу була фактично синонімом шифрування, перетворенням інформації з читабельного стану в очевидну нісенітницю. Так, наприклад, автор зашифрованого повідомлення поділився технікою декодування, необхідною для відновлення вихідної інформації, лише із передбачуваними одержувачами, тим самим завадивши небажаним особам робити те саме. З часів Першої світової війни і появою комп'ютерів методи, використовувані для виконання криптології стають все більш складними, а їх застосування — все більш поширеним.

Сучасна криптографія в значній мірі ґрунтується на математичній теорії і практиці інформатики; криптографічні алгоритми розроблені навколо припущень обчислювальної твердості[en], що ускладнює порушення таких алгоритмів на практиці будь-яким супротивником. Теоретично можливо зламати таку систему, але це неможливо зробити будь-якими відомими практичними засобами. Ці схеми тому називаються обчислювально безпечними; теоретичні досягнення, наприклад, вдосконалення цілочисельних алгоритмів факторизації і більш швидкі обчислювальні технології вимагають постійного адаптування цих рішень. Звісно ж існують теоретично безпечні інформаційно-захищені схеми[en], які, очевидно, неможливо зламати навіть при необмеженій обчислювальній потужності — прикладом є одноразовий блокнот, але ці схеми складніше реалізувати, ніж найбільш теоретично порушувані, але все ж обчислювально безпечні механізми.

З точки зору теорії кодування блокове симетричне шифрування — це кодування блоку вхідного повідомлення M за допомогою, як правило, ненадлишкового коду, обраного з множини можливих відповідно до значення ключа шифрування. У свою чергу обчислення коду автентифікації повідомлень або електронного цифрового підпису є кодуванням блоку вхідного повідомлення M за допомогою надлишкового коду, обраного з множини можливих відповідно до значення ключа.

Лінійне кодування ред.

Лінійний код (або цифрова модуляція смуги частот, або цифровий спосіб передачі базової смуги) — це код, обраний для використання в системі зв'язку[en] з метою передачі основної смуги частот[en]. Лінійне кодування часто використовується для цифрової передачі даних.

Лінійне кодування є цифровим сигналом, який буде передаватися за допомогою дискретної частотно-часової послідовності сигналу, який є оптимально налаштованим для конкретних властивостей фізичного каналу (і приймальних пристроїв). Схема хвильова форма напруги або струму, який використовується для представлення 1 і 0 цифрових даних по лінії передачі називається кодуванням лінії. Поширеними типами кодування ліній є однополярне[en], полярне[en], біполярне[en] та манчестерське кодування.

В електроніці, акустиці і суміжних областях науки, хвильова форма сигналу є формою його графіка в залежності від функції часу, незалежно від її величини часу і магнітудної шкали, а також від будь-якого зсуву в часі.

Інші застосування теорії кодування ред.

Іншим завданням теорії кодування є розробка кодів, які допомагають синхронізації. Код може бути спроектований таким чином, щоб зсув фази можна було легко виявити і виправити, а також, щоб кілька сигналів могли надсилатися по одному каналу[13].

Крім того: застосування кодів, що використовується в деяких системах мобільного зв'язку, є множинним доступом з кодовим поділом каналів (англ. code-division multiple access, CDMA). Кожному телефону присвоюється кодова послідовність, яка випадково некорельована з кодами інших телефонів. Під час передачі, кодове слово використовується для модуляції бітів даних, що є голосовим повідомленням. В свою чергу у приймачі виконується процес демодуляції для відновлення вхідних даних. Властивості цього класу кодів дозволяє багатьом користувачам (з різними кодами), використовувати одночасно один і той же радіоканал. Для приймача, сигнали інших користувачів будуть з'являтися на демодуляторі тільки як сторонній шум низького рівня[13].

Ще один загальний клас кодів — це автоматичний повторний запит[en] (англ. Automatic repeat request, ARQ) коду. У цих кодах відправник додає надлишок інформації кожного повідомлення (електронного листа) для перевірки помилок, як правило, шляхом додавання контрольних бітів. Якщо контрольні біти не узгоджуються з рештою повідомлення, коли воно надходить, одержувач попросить відправника повторно передати повідомлення. Усі мережеві протоколи, крім найпростіших, глобальної мережі (англ. Wide Area Network, WAN) використовують автоматичний повторний запит. Загальні протоколи включають SDLC, TCP (протокол керування передачею), міжнародне сімейство протоколів X.25 і багато інших[13].

Групове тестування ред.

Групове тестування[en] використовує коди по-іншому. Наприклад, у великій групі однакових зовні елементів, внутрішні якості візуально не розрізнені (дефектні вироби чи заражені зразки, представлені до тестових досліджень). Ідея групового тестування полягає у тому, щоб визначити, які елементи є «несхожими», використовуючи якомога менше тестів. Походження цієї проблеми — ще за часів Другої світової війни, коли ВПС США потребували перевірки своїх солдатів на сифіліс. Вперше вивчене Робертом Дорфманом у 1943 році, групове тестування — це відносно нова область прикладної математики, яка може бути застосована до широкого кола практичних застосувань і є активною сферою досліджень сьогодні.

Аналогове кодування ред.

Інформація кодується аналогічно і в нейронних мережах мозку, і в аналоговій обробці сигналів та аналоговій електроніці. Аспекти аналогового кодування включають в себе аналогову корекцію помилок, стиснення аналогових даних і аналогове шифрування[14]:46[15][16].

Нейронне кодування ред.

Нейронне кодування є полем нейробіології, пов'язаним з тим, як представлена сенсорна та інша інформація в головному мозку у мережі нейронів. Основною метою вивчення нейронного кодування є: охарактеризувати відносини між подразником та реакцією нейронів індивіда, та окремими або ансамблевими нейронними відповідями, а також — взаємозв'язки між електричною активністю нейронів в ансамблі. Вважається, що нейрони можуть кодувати цифрову і аналогову інформацію, і що нейрони слідують принципам теорії інформації та її стиснення[17], і виявлення та виправлення помилок в сигналах[18], які надсилаються по всьому мозку і ширше нервової системи[19].

Дивиться також ред.

Примітки ред.

  1. Refreshing Refreshable Braille Displays (англ.). doi:10.1109/TOH.2015.2423492. Процитовано 01.09.2020.
  2. Джеймс Ірвін, Девід Харл «Data Communications and Networks» [Архівовано 17 грудня 2019 у Wayback Machine.]. 2002., ст. 18., параграф «2.4.4 Типи кодування». Цитата: «Існують чотири типи кодування»
  3. а б News, A. B. C. Answer Geek: Error Correction Rule CDs. ABC News (англ.). Архів оригіналу за 28 липня 2020. Процитовано 31 серпня 2020.
  4. а б в г NILKESH PATRA And SILA SIBA SANKAR (2007). DATA REDUCTION BY HUFFMAN CODING AND ENCRYPTION BY INSERTION OF SHUFFLED CYCLIC REDUNDANCY CODE (PDF) (англ.). Department of Electronics & Communication Engineering National Institute of Technology Rourkela. Архів оригіналу (PDF) за 29 березня 2022. Процитовано 02.09.20.
  5. а б в г д A CASE STUDY ON THE COMMUNICATIONS SUBSYSTEM FOR CUBESAT (PDF) (англ.). Fortaleza - Brazil. June 2014. Архів оригіналу (PDF) за 25 березня 2022. Процитовано 02.09.20. {{cite web}}: |first= з пропущеним |last= (довідка)
  6. Кодування, декодування: простий повтор, інверсний та манчестерський код | Радіоелектроніка (ru-RU) . Архів оригіналу за 9 серпня 2020. Процитовано 2 вересня 2020.
  7. а б Terras, Audrey (1999). Fourier Analysis on Finite Groups and Applications (англ.). Cambridge University Press. ISBN 0-521-45718-1. Архів оригіналу за 28 червня 2014. Процитовано 5 червня 2016.
  8. а б Blahut, Richard E. (2003). Algebraic Codes for Data Transmission (англ.). Cambridge University Press. ISBN 0-521-55374-1. Архів оригіналу за 28 червня 2014. Процитовано 5 червня 2016.
  9. а б Christian Schlegel, Lance Perez. Trellis and Turbo Coding (англ.). Dalhousie University. Процитовано 08.09.2020.
  10. Rivest, Ronald L. (1990). "Cryptology". У J. Van Leeuwen (ред.). Handbook of Theoretical Computer Science (англ.). Т. 1. Elsevier.
  11. Белларе, Міхір; Рогавей, Філіп (21 вересня 2005). Введення. Введення в сучасній криптографії. с. 10.
  12. Менезес, А.Дж; Ван Ошоот, П.С.; Ванстоун, С.А. Довідник з прикладної криптографії. ISBN 0-8493-8523-7. Архів оригіналу за 7 березня 2005. Процитовано 5 червня 2016.
  13. а б в E, Richard Hamming, Claude. 8 Coding Theory Discrete Mathematics: A Concept-based Approach. - ppt download. slideplayer.com. Процитовано 9 вересня 2020.
  14. Brian Chen, Gregory W. Wornell (JULY 1998). Analog Error-Correcting Codes Based on Chaotic Dynamical Systems (PDF) (англ.). IEEE TRANSACTIONS ON COMMUNICATIONS, VOL. 46, NO. 7. Архів оригіналу (PDF) за 27 вересня 2001. Процитовано 09.09.2020.
  15. Hvala, Franc Novak Bojan; Klavžar, Sandi (1999). On Analog Signature Analysis. Proceedings of the conference on Design, automation and test in Europe. ISBN 1-58113-121-6.
  16. Shujun Li; Chengqing Li; Kwok-Tung Lo; Guanrong Chen (April 2008). Cryptanalyzing an Encryption Scheme Based on Blind Source Separation (PDF). IEEE Transactions on Circuits and Systems I. 55 (4): 1055—63. arXiv:cs/0608024. doi:10.1109/TCSI.2008.916540. Архів оригіналу (PDF) за 28 березня 2021. Процитовано 9 вересня 2020.
  17. Тропп, С.Дж (1990). Spike час прибуття: Високоефективна схема кодування для нейронних мереж. У Екміллер, Р.; Хартманн, Г.; Хауске, Г. (ред.). Паралельна обробка даних в нейронних системах і комп'ютерах (PDF). Північна Голландія. с. 91—94. ISBN 978-0-444-88390-2. Архів оригіналу (PDF) за 27 березня 2014. Процитовано 30 червня 2013.
  18. Гедеон, T.; Паркер, A.E.; Дімітров, A.Г. (Весна 2002). Спотворення інформації та нейронного кодування. Канадський журнал прикладної математики. 10 (1): 10. CiteSeerX: 10.1.1.5.6365. Архів оригіналу за 17 листопада 2016. Процитовано 5 червня 2016.
  19. Штібер, M. (Липень 2005). Спайк синхронізації точність нейронної корекції помилок: локальна поведінка. Нейронне Обчислення. 17 (7): 1577—1601. arXiv:q-bio/0501021. doi:10.1162/0899766053723069. Архів оригіналу за 15 грудня 2019. Процитовано 5 червня 2016.

Посилання ред.