Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теорія побудови і кодування просторових k-значних структур [на укр. яз.].doc
Скачиваний:
5
Добавлен:
02.05.2014
Размер:
18.53 Mб
Скачать

4.3. Синтез алгоритмівk-значного кодування/декодування

Для аналізу та моделювання шляхів побудови і процесів роботи CIRC-кодера/декодера синтезовано [5, 132] два комплекси програм: перший – для кодування в складі головної програми, що дістала позначення KODPER (рис. 4.2) та підпрограм GALUA, KOD1, KOD2, RAND2, SUMQ, RSYS2, SUMP; інший – для декодування під керуванням програми MODC5 (рис. 4.3.) підпрограмами SINDR, DSINDR, KORR1, KORR2, KORR22, KORR3, KORR4. Перший та другий комплекси використовують також спільні підпрограми IADD, IADD2, POIND.

Рис. 4.2. Структурна схема програмних засобів двокаскадного CIRC-кодера (CIRC-encoder)

Рис. 4.3. Структурна схема програмних засобів двокаскадного CIRC-декодера (CIRC-decoder)

Процес кодування здійснюється під керуванням основної програми KODPER. У цій програмі визначаються: розмір М1 = 32 блоки інформаційних символів під час кодування на етапі С1 та мінімальне число блоків KB = 108 і, відповідно, на етапі С2 – M2 = 28 та KB2 = 28; число блоків, що пройшло етапи кодування С1 та С2 – KP = 4 (може бути довільним, основне обмеження – це величина оперативної пам’яті ЕОМ). У подальшому обчислюється число блоків, що підлягає кодуванню на етапі С1: КР1 = KB1 + KP та на етапі С2: KP1 = KB2 + KP.

Кодування та декодування здійснюються в скінченному полі ґалуа GF(28), що згенероване згідно з модулем многочлена F(x) = x8 + x4 + x3 + x2 + 1 підпрограмою GALUA. Спочатку в підпрограмі задається примітивний елемент = 00000010 (як вектор ІХ) і вектор ІР, що складається зі степенів коефіцієнтів поліному F(x): для прикладу = 00011101, а також формуються перший елемент масиву IPL(1, j), що дорівнює та останній елемент поля IPL(256, j), який дорівнює нулю.

Остаточний масив IPL(256, 8) – це масив усіх елементів поля ґалуа, отриманий у результаті роботи підпрограми GALUA і сформований згідно з наступною процедурою з примітивним елементом. Кожний наступний елемент поля, починаючи з другого та закінчуючи 255-м, отриманий із попереднього зсувом одиниці на один символ уліво. Наприклад, якщо перший елемент <00000010> (він же примітивний), то другий – <00000100>, третій – <00001000> тощо. Останній символ завжди нульовий і якщо після останнього зсуву вліво перший дорівнює 1, то після зсуву до даного елемента необхідно додати за модулем 2 елемент IР. Додавання за mod 2 здійснюється підпрограмою IADD. Заключний результат роботи підпрограми записується у файл KOD OUT. Слід зазначити, що елементи поля ґалуа можна отримати як степені примітивного елемента , наприклад, елемент = <11011111>. Наш масив побудований таким чином, що перший індекс дорівнює показникові степені примітивного елемента:=IPL(I, j), причому =IPL(255, j) = <00000001>, a 0 = IPL(256, j) = <00000000>.

У процесі кодування/декодування СIRC-кодом усі обчислення здійснюються з показниками степенів примітивного елемента за винятком додавання за mod 2, але після додавання відразу ж відновлюється показник степені суми з допомогою підпрограми POIND.

Перейдемо до процедур формування блоків КР2 інформаційних символів, тобто масиву IW2(KP2, M2). Формується він поблочно з допомогою підпрограми KOD2, тобто етап кодування С2 виконується підпрограмою KOD2. У підпрограмі матриця рішення системи (4.4) закладена у вигляді масиву KOEF(4, 4).

Двадцять чотири інформаційні символи генеруються випадковим чином, тобто з допомогою підпрограми RAND2 утворюється масив IN(24) як масив показників степенів відповідних інформаційних символів. Генерування псевдовипадкових чисел, рівномірно розподілених у проміжку здійснюється підпрограмоюRAND2(I, N, S). Обчислення вільних членів системи (4.2) здійснюється підпрограмою SUMQ. У цій підпрограмі задаються інформаційні символи Wі (див. рис. 4.1) як масив INDEX(24) і визначаються вільні члени Ti у вигляді масиву IN(4).

Розв’язує систему рівнянь (4.2), згідно з виразом (4.4), підпрограма RSYS2. На завершення своєї роботи підпрограма KOD2 формує блок IN(28) даних із 28 cимволів, серед яких 4 перевірні Q-символи IND(4) вставлені посередині блока, що підлягає передачі.

Перед тим, як перейти до наступного етапу С1 кодування, здійснюється перемежування П2, тобто з масиву IW2(220, 28) утворюється масив IW12(112, 28). Розміри масиву задані початковими значеннями, виходячи з наведених співвідношень:

Другий етап кодування C1 реалізовано в підпрограмі KOD1 (див. рис. 4.2). У ній матриця з елементів поля системи (4.7) задана у вигляді масиву KOEF (4). Вносимі в підпрограму інформаційні символи IN(28), отримані в результаті першого етапу С2 кодування, передаються у підпрограму SUMP для створення масиву IND(4) вільних членів Vі системи.

Наступний крок алгоритму – розв’язок системи (4.7) із використанням описаної підпрограми та формування масиву IN(32) закодованих символів. Із останніх організовується масив IW11(112, 32), що є остаточним результатом роботи кодерів С1 та С2 і перемежувача П2.

Для імітації роботи декодера з пошуку та виправлення помилок формується масив, що записується в окремий файл під назвою MODIN, який зчитується в основній програмі в такому порядку: номер блока, в який вносяться помилки (NB = 1, ..., KP1), число помилок у блоці (KO = 1,...,4), номер символу (III = 1,...,32), помилка (IW11)NB, III(1,...,256), перемикач (KIN=1, для продовження введення). Якщо KIN  1, то у файл KODOUT записується масив закодованих символів із помилками IW11(J, I), J = 1, KP1; I = 1, M1. На цьому перший комплекс програм завершує роботу. Його вихідний файл KODOUT буде служити вхідним для комплексу програм декодування. Зазначимо, що в першому комплексі використовуються також програми, що здійснюють обчислення в полі ґалуа: IADD2, IADD та POIND.

Тепер перейдемо до розгляду процесу декодування, що здійснюється під керуванням головної програми MODC2 із допомогою другого комплексу програм, зв’язки між підпрограмами якого показано на рис. 4.3. Суть процесу декодування полягає у визначенні синдромів помилок зі співвідношення (4.1), яке можна зобразити у вигляді:

або n = 28.

Обчислення синдромів на першому (С1) та на другому (С2) етапах декодування здійснюються однією підпрограмою SINDR. Крім того, для виявлення місцезнаходження помилок (локаторів помилок) із допомогою підпрограми DSINDR обчислюються додаткові синдроми A1 = S0S2 + S1S1; A2 = S1S2 + S0S3; A3 = S1S3 + S2S2. За наявності помилок вони коректуються з допомогою підпрограм KORR1, KORR2, KORR22, KORR3, KORR4. Зауважимо, що в разі обчислення 4-х синдромів можна визначити місце та виправити не більше ніж дві помилки або тільки виправити не більше ніж чотири помилки [52]. При цьому на етапі С1 декодування визначається місце й виправляється одна чи дві помилки. Якщо помилок більше ніж дві, то для такого блока даних встановлюється прапорець. На другому етапі С2 декодування коду РС(28, 24) із допомогою прапорців можна знайти місце помилки й скоректувати 1, 2, 3 чи 4 помилки.

Робота основної програми MODC2 починається зі завдання розмірів блока інформаційних символів для декодування С1 – М1 = 32 та для C2 – M2 = 28. Із файла KODOUT зчитується масив IPL(256, 8) елементів поля ґалуа GF(28), а також блок символів із того ж вхідного файла та перевіряється ознака кінця масиву вхідних даних (у нашому випадку це число 999, яке записується у файл KODOUT після масиву IW11(112, 32). Якщо виявлено кінець даних, програма MODC2 завершує свою роботу.

У подальшому, із допомогою підпрограми SINDR, обчислюються та аналізуються синдроми за наведеною далі схемою. Якщо всі синдроми дорівнюють нулю, то помилок у даному блоці символів немає і програма MODC2 переходить до зчитування наступного блока символів. В іншому разі обчислюємо додаткові синдроми з допомогою підпрограми DSINDR.

Якщо всі додаткові синдроми дорівнюють нулю, то наявна одна помилка. Її місцеперебування визначається і вона виправляється підпрограмою KORR1 після чого зчитується наступний блок. Якщо додаткові синдроми не дорівнюють нулю, то робиться припущення про наявність двох помилок і викликається підпрограма KORR2. У цій підпрограмі спочатку розраховуються локатори помилок, тобто місце розташування помилкового символу в блоці.

Якщо локатори перебувають у проміжку , то наявні дві помилки, які в цій же підпрограмі витираються і алгоритм переходить до зчитування наступного блока. Якщо локаторів >32 чи <1, то робимо висновок, що помилок >2 і даному блоку інформаційних символів присвоюється значення прапорця, що дорівнює одиниці.

Якщо ж частина додаткових синдромів дорівнює нулю, а частина ні, то також робиться висновок про те, що помилок >2 і присвоюється прапорець, який дорівнює одиниці. Цей процес продовжується доти, доки не буде зчитано 109 блоків. Після закінчення формується масив IW12(109, 28). Розмір блока – 28 символів, оскільки після декодування С1 перевірні символи відкидаються.

Переходимо тепер до деперемежування ДП2 та декодування С2. За наявності масиву IW12, новий блок даних формується так:

IN(I) = IW12(4(M2 – I) + 1, I), I = 1, ..., M2; M2 = 28.

Для цього блока даних обчислюємо синдроми з допомогою тієї ж підпрограми SINDR. Якщо всі синдроми нульові, то помилок немає і починається перевизначення масиву IW12 таким чином: другий блок стає першим, третій – другим, ..., 109-й – 108-м тощо. Аналогічно перевизначається масив прапорців і здійснюється перехід до наступного блока даних, який після декодування С1 стає 109-м блоком масиву IW12. Виконується деперемежування й декодування С2.

Слід пам’ятати, що перед перевизначенням масивів IW12 та FLAG із блока інформаційних символів відкидаються перевірні Q-символи і блок записується у вихідний файл OUTR.

Якщо синдроми ненульові, то визначаємо місцеперебування помилок із допомогою деперемежування масиву прапорців. Локатори заносимо в масив KOL.

Якщо помилок більше ніж чотири, то вважаємо весь блок помилковим і відкидаються Q-символи (див. рис. 4.1), а блок записується у вихідний файл. Якщо ж помилок немає, то процедура виглядає аналогiчно. Якщо помилок 1, 2, 3 чи 4, то викликаються вiдповiдно пiдпрограми KORR1, KORR22, KORR3 чи KORR4. Пiсля стирання помилок також вiдкидаються Q-символи й записується блок у файл OUTR, продовжується процес перевизначення масивiв i декодування нових блокiв даних й алгоритм декодування переходить до аналiзу та декодування нового блока даних Wі.

Соседние файлы в предмете Дипломная работа (подготовка и защита)