g(x)= (x+A^b)(x+A^(b+1))(x+A^(b+2))...(x+A^(b+N-K-1)),
де А – примітивний елемент поля Галуа, через який визначається вхідний елемент, b – ціле число.
Для прикладу, нехай М = 3, N = 2^3-1 = 7, і K = 5. Тоді повідомлення представляється вектором довжиною 5 цілих символів, що лежать в межах від 0 до 7. Наступна фігура ілюструє можливий вхідний і вихідний сигнали:
Рис.1.5. Приклад обробки сигналу за допомогою кодера Ріда-Соломона
- Selector(Прилад відбору) створює вихідний сигнал на основі відбору та перерозподілу вказаних елементів вхідного векторного сигналу за допомогою вектора елементів вхідного сигналу з індексами 240-243 та 204-239. На виході отримується 40 бітні повідомлення.
- IntegertoBitConverter перетворює вектор вхідного сигналу із десяткових цілих чисел у рамку бітів по 8 біт з одного цілого числа. На виході створюється 320 бітний кадр.
o ConvolutionalEncoder(Згортковий кодер)
Рис.1.6.Згортковий кодер WiMax.
- ConvolutionalEncoder кодує двійкову інформацію перед передачею через канал із шумом. На виході кодера створюється потік інформації, вдвічі більший за вхідний(згортковий код із швидкістюR=1/2). Протягом кодування k вхідних бітів кодуються у n вихідних бітів з подальшою швидкістю k/n потоку кодованих бітів. Кодер складається з регістру зсуву з k*Lланками (L – обмеження довжини коду), куди за один кодовий такт входять k символів, і n суматорів, пов’язаних із відповідними розрядами регістрів. Зв’язок j-го суматора по mod2 описується шляхом задання j-го породжуючого поліному gi=(gi0,gi1,…,gi(m-1)) , де і = 1...k, m- довжина регістра, а наявність коефіцієнтів відповідає наявності з’єднань. Породжуючи поліноми повністю визначають структуру кодера двійкового загорткового коду. Вихідні кодові символи можна представити у вигляді згортки послідовності інформаційних символів і породжуючи поліномів коду, що задають лінійні рекурсивні правила кодування. В перегляді D5 версії IEEEWIMAX 802.16 використовується кодер з обмеженням довжини 7 та породжуючими поліномами g0 = 171oct і g1 = 133oct, що в даній імітаційній моделі задається командою poly2trellis(7 [171 133]). Його будова показана на рис.1.7, де g0 і g1- породжуючіполіноми, а D-ланка затримки.Для програмної побудови кодера першим кроком є представлення вхідної послідовності як поліному. Згортковий кодер представляється у вигляді:
g0 = 1 + D + D2 + D3 + D6
g1 = 1 + D2 + D3 + D5 + D6
Далі згортковий кодер помножує породжуючий поліном на вхідний потік бітів:
A(x) = g0(x) * I(x) = a b c … g
B(x) = g1(x) * I(x) = P Q R … V
Чергуючи обидва виходи згорткового кодера отримаємо E(x) = aPbQcR … gV, що можу бути записано, як:
E(x) = (a0 b0 c0 … g0) + (0P0Q0R … 0V) = A(x2) + x*B(x2)
Тому,
E(x) = A(x2) + x * B(x2) , а A(x2) = g0(x2) * I(x2) і B(x2) = g1(x2) * I(x2)
Далі
E(x) = g0(x2) * I(x2) + x * g1(x2) * I(x2) = I(x2) * (g0(x2) + x * g1(x2)) = I(x2) * G(x), де G(x) = g0(x2) + x * g1(x2)
G(x) = 1 + x2 + x4 + x6 + x12 + x * (1 + x4 + x6 + x10 + x13) = 1 + x + x2 + x4 + x5 + x6 + x7 + x11 + x12 + x13
Рис.1.7. Блок-схема загорткового кодера WiMax.
- Runcture(виколювач) створює вихідний сигнал на основі видалення певних бітів із вхідної послідовності із збереженням усіх інших біт. В даному випадку виколювання відбувається за допомогою функції reshape([1 0 1 0 1;1 1 0 1 0], 10, 1) і отримується 384 вихідні біти.
Для прикладу при виколюванні вектора виколювача [1;0;1;1;1;0] буде видалятися 2 та 6 елементи з вхідної 6-символьної послідовності:
Рис.1.8. Приклад виколювання бітів.
o Interleaver(Перемішувач) реорганізовує порядок вхідних елементів без проведення повторення чи видалення елементів вхідного вектора.
o
Мал.1.9. Перемішувач.
Для прикладу, якщо вхідний вектор [40;32;59;1], а параметр „елементи” перемішувача [4,1,3,2], то буде побудований вихідний вектор [1;40;59;32].
o Modulator
Мал.1.10. Модулятор QPSK.
- BittoIntegerConverter1(Перетворювач біт – ціле десяткове число) перетворює групу із 2 бітів у вихідний сигнал у вигляді цілих чисел. Із кадру довжиною 384 вхідних біт отримується послідовність із 192 цілі десяткові числа.
- GeneralQAMModulatorBaseband(QAM модулятор) модулює вхідний сигнал використовуючи метод квадратурної фазової модуляції(QPSK), що заміняє 2бітову послідовність за допомогою одного символу із відповідною синфазною(I) і квадратурною складовою(Q) з векторних діаграм Грея.
Рис.1.11.Векторна діаграма Грея для QPSK.
o Normalize(Нормалізатор) розкладає комплексний сигналZ після модуляції на real(Z) - i*imag(Z) та перемножує на величину 1/√2:
Рис.1.12. Нормалізатор.
o OFDM Symbols(Формувач OFDMповідомлення) проводить OFDM модуляцію потоку даних в одному частотному каналі. Для цього елементи вхідного потоку інтерпретуються як 192 несучі, що групується по 12 та передається 16 групами на вихідні порти. До них додаються дві групи(27 і 28 несучих), що утворюють захисний інтервал на границі частотного діапазону. В результаті об’єднання груп утворюється вихідний сигнал, над яким проходиться зворотнє швидке перетворення Фур’є та додається циклічний префікс (коефіцієнти 193-256 та 1-256).Утворений сигнал із 320 символів передається через канал зв’язку.
Рис.1.13. OFDM-модулятор.
o OFDM Data(відновлювач даних з OFDM - повідомлення) отримує сигнал після проходження ним каналу зв’язку. Він відкидає циклічний префікс, проводить швидке перетворення Фур’є, об’єднує інформацію в кадри по 256символів, видаляє елементи із 29 до 128 та від 130 до 229. На виході отримується кадр із 192 символів.
Рис.1.14. OFDM-демодулятор.
o Denormalize(Денормалізатор) являється точною копією блока Normalize.
o Demodulator виконує QPSK демодуляцію та перетворює цілі числа до біт з відповідністю 1 число до 2-х біт. На виході отримується рамка із 384 бітів.
o
Рис.1.13. Демодулятор QPSK.
o Deinterleaver(зворотній перемішувач) відновлює початковий порядок бітів, аналогічний послідовності до обробки перемішувачем на передаючій стороні.
Рис.1.14. Зворотній перемішувач.
ViterbiDecoder
Рис.1.15. Декодер Вітербі
- UnipolartoBipolarConverter(перетворювач однополярного коду до двополярного) перетворює вхідний однополярний сигнал до двополярного вихідного сигналу. Так вхідний сигнал містить значення одиниць та нулів, в той час як вихідний 1 та -1.
- InsertZero(Блок додавання нулів) будує вихідний вектор на основі додавання нулів до вхідної послідовності для розширення її із 384 до 640 бітів. Відбувається вставка 4 нулів на кожні 6 символів згідно алгоритму reshape([1 0 1 0 1;1 1 0 1 0], 10, 1). Для прикладу, додавання нулів із початковим вектором [1,0,1,1,1,0] цього блоку буде виглядати наступним чином:
Рис.1.16. Приклад роботи блоку додавання нулів.
- ViterbiDecoder(Декодер Вітербі) використовує алгоритм Вітербі для декодування кодованої вхідної інформації. Ідея алгоритму Вітербі полягає в тому, що в декодері відтворюють всі можливі шляхи послідовних змін стану сигналу, порівнюючи при цьому кодові символи із прийнятими аналогами із каналу зв’язку, і на основі аналізу помилок між прийнятими і потрібними символами вибирають оптимальний шлях. Декодування по методу Вітербі являє собою алгоритм пошуку найкращого, максимально правдоподібного шляху на графі – решіточній діаграмі коду. До складу декодеру Вітербі входять три основні блоки:
· гілкового метричного обчислення(BMC);
· додавання-порівняння і відбору(FCS);
· зворотного декодування (TBD).
Рис.1.17. Блок-схема декодера Вітербі.
Як приклад, побудова BMC для 1/2 швидкості та nsdec = 3 буде наступною:
Рис.1.18. Будова блоку гілкового метричного обчислення(BMC).
ACS складову в загальному вигляді відображає наступний рисунок:
Рис.1.19. Будова блоку додавання-порівняння і відбору(FCS).
o BlockDecoder
Рис.1.20. Блочний декодер.
- BittoIntegerConverter2(Перетворювач біт – ціле десяткове число2) перетворює послідовність з 8 бітів в одне ціле десяткове число.