Так уж вышло, что для написания кандидатского диссера мне потребовалось плотненько изучить стандарт спутниковой связи DVB-S2 (Digital Video Broadcasting — Setellite, Version 2).
Если вам, уважаемый читатель, интересно как передаются HDTV или SDTV данные через один из самых популярный спутниковых протоколов теле и радио вещания и нет желания/времени читать сам протокол, то прошу под кат.
Схема 1.
Алгоритм DVB-S2 (Digital Video Broadcasting — Sputnik, version 2) предназначен, как не трудно догадаться, для передачи данных с помощью спутника. Cтандарт пришел на смену DVB-S. Его разрабатывает European Telecommunications Standards Institute (ESTI). Да-да, это та же самаяшарашкина контора, которая подарила миру GSM и, если кто знает, TETRA.
Прежде, чем давать описание ужасной картинки сверху, предлагаю сначала «в общих чертах» понять основной принцип передачи данных.
Картинка ниже — грубое упрощение схемы передачи данных, что указана в самом протоколе (см схему 1)
Схема 2.
Первое, что происходит с видео-потоком, вне зависимости от того какой протокол теле- или радиовещания мы используем, это соединение всех каналов вещания в один канал. Как это происходит? Очень просто: дело в том, что пропускная способность спутникового канала существенно больше, чем требуется для одного видео потока. Поэтому рационально использовать так называемое Time Division Multiplexing (переводится как «Мультиплексирование с разделением времени».)
Возможно, вы где-то аббревиатуру TDM уже встречали… Ага! в GSM!.. Почти верно, только там этот принцип назвается TDMA (Time Division Multiple Access).
Предположим у нас 3 канала (см. рис): Красный, Голубой, Жёлтый.Очень хотел взять ОРТ, Дождь и НТВ, но всмомнил, что хабр не место для политики. Каждый поток разбивается на последовательность байт (так называемые таймслоты).
Поток TDM образуется следующим способом: сначала 1й таймслот Красного канала, затем 1й таймслот Синего канала, затем 1й таймслот Жёлтого. После на выход TDM идёт второй таймслот Красного, второй Синего, втрой Жёлтего и так далее.
Схема 3.
Разумеется на практике хотелось бы как-то проверять информацию на наличие ошибок. В DVB-S2 таймслоты называются UP'ами (от User Packet). CRC-8 на первой схеме и есть код обнаружения ошибок.
Вторая фаза в нашей простой схемке — это скремблирование. Смысл скремблирования, как я понимаю, сделать вероятности появления 1 или 0 равновероятными. Это необходимо, так как следующая фаза в нашей простой схемке — Error Correction Codes (ECC) (Коды исправления ошибок). Действительно, кто читал Берликэмпа, может вспомнить, что вся Алгебраическая Теория Кодирования строится на основе априори заданного правила, что 1 равновероятно 0. Конечно, по причине сжатия, наверное скремблирование излишнее, но, видимо, авторы решили его оставить… (кто имеет иную инфу, прошу написать в коменты!)
После ECC, на выходе получаем кодовое слово, которое подаётся на вход модулятору.
После модуляции, моды подаются на лампу бегущей волны (Wave Tube Amplifer, WTA).
Надеюсь в общих чертах понятно.
Теперь, когда кратко мы рассмотрели общую схему (схема 2), будем дальше есть слона по частям. Эта глава про Mode Adaptation (см. схему 1). Протокол DVB-S2 позволяет как самостоятельно осуществить TDM преобразование из различных одиночных входных потоков (Single Input Stream (SIS)), так и принять на вход уже многоканальный поток, который предварительно получен от выхода какого либо иного протокола (Multiple Input Stream (MIS)). Теоретически, если вы Рокфеллер, вы можете вообще не использовать TDM и передавать только один поток… Правда это нерационально и дорого, но стандарт это позволяет, о чём свидетельствует надпись в пунктирном прямоугольничке на схеме. В этом случае нам не нужна ни синхронизация (Input Stream Synchronizer), ни буферизация (Buffer) (пунктирными линиями на схеме 1), ибо в случае отсутствия TDM'а, синхронизировать нечего, а буферизировать бессмысленно.
Merger Slicer — это модуль, который, как нетрудно догадаться по названию, «склеивает» UP-таймслоты между собой.
После Мode Adaptation, как видно их схемы 1 идет Stream Adaptation.
Вот рисунок из стандарта:
Схема 4.
UP-таймслоты представляются в виде единого потока Generic Continous Stream. Затем данный поток «режется» на блоки данных, которые называются Data Field и к каждому Data Field прикрепляется BB (Baseband) заголовок.
Поля заголовка следующие:
После данного разбиения идёт скремблирование с «Псевдо Случайной Бинарной Последовательностью» (Pseudo Random Binary Sequence, PRBS) Кому интересно: Данная последовательность вычисляется благодаря LFSR длины 15, заданный ассоциированным многочленом 1+ x^14 + x^15 и начальным значением: 100101010000000. Те кто понял — я рад, кто не понял — смотри картинку:
Как говорят криптографы, «раскручивая» LFSR получаем выходную последовательность: 10010101000000010111111000000111000001… Минимальная длина последовательности, пока она не зациклится, называется периодом LFSR. Период данного LFSR равен (2^15-1). Вероятность появления 1 и 0 равна 0.5. (На самом деле это утверждение верно не только для рассмотренного LFSR, а для любого LFSR, заполненный не всеми нулями, при условии, что ассоциативный многочлен — примитивен.)
Давать описание кодированию можно кратко, а можно очень долго. Помимо основного стандарта [1] есть стандарт по кодированию [2]. Если у хабрачитателей возникнет интерес, то я напишу отдельную статью, где подробно разберу кодирование в DVB-S2.
Кратко FEC код, как видно на схеме 1 состоит из трёх фаз:
FEC код работает в двух режимах, так называетмые short FECFRAME и normal FECFRAME. Отличие в длине выхода. Кодовый блок LDPC для короткого фрейма 16200 байт, для длинного 64800. Для передачи «полезной» информации (видео, радио) используют нормальные фреймы. Для служебной информацией, для которой совсем критично время, используют короткие фреймы.
Но и это ещё не всё: для короткого фрейма существует 10 режимов с различными скоростями для БЧХ и LDPC кодирования, для нормального 11 вариантов. Итого 21 вариант FEC кода! Кому интересно подробнее — см Table 5a и Table 5b в [2].
Зачем так много вариантов кодирования?..
Дело в том, что есть три режима функционирования спутника:
Начнём с простого: CCM это одинаковое кодирование вне зависимости от того, где находится спутник и какие данные он передаёт. Если помеха увеличилась и это заметили «на земле», то пока не будет послана команда о смене кодирования (если такая команда вообще существует), спутник не будет применять другое кодирование.
VCM кодирование подразумевает различное кодирование для различных типов данных. Ну например если пропадет пару байтов в несжатом видео потоке (хотя обычно видео сжимают, конечно...), то особых проблем не будет, если же исказятся два байта в служебной команде и она будет некорректно воспринята спутником, то это может привести к epic fail…
Самое интересное — это ACM. Данный режим предполагает, что в зависимости от расположения спутника относительно земли, других спутников, времени, наличия/отсутствия дождя,сезонного перелёта чебурашек, спутник по разному кодирует данные.
Стандарт DVB-S2 поддерживает режимы CCM и ACM. Режим VСМ без танцев с бубном не поддерживается.
Режим CCM поддерживается для совместимости, а вот для того, чтобы получить все преимущества ACM, необходимо различное количество возможных форм кодирования! В случае больших помех (дожди, удалённость от земли, помехи от других спутников,чебурашки) скорость кода низкая, зато много ошибок исправляет, в случае слабых помех — скорость выше и, следовательно, выше пропускная способность.
Если на пальцах, то после получения FEC фрейма, данные разбиваются по 2, по 3, по 4 или по 5 бит.
Всё зависит от того, какой тип модуляции вы выберете:
Таким образом в DVB-S2 можно использовать две фазовые модуляции(QPSK или 8PSK) и две амплитудно фазовые(16APSK или 32APSK). Тому, кто ничего не знает про модуляции рекомендую неплохую статью хабраписателя alexxerm. UPDATE (спасибо HounD): так же можно просмотреть эту и эту статьи в википедии.
Схема 5.
Mapping означает, что мы «разбили» последовательность на 2,3,4 или 5 бит.
Однако прежде чем послать сигнал дальше, мы в FL(Physical Layer) вносим определенную синхронизирующую последовательность и опять скремблируем.
После сигнал подаётся на лампу бегущей волны. Альфой на схеме 1 обозначается «коэффициент приподнятого косинуса», по другому «коэфициент сглаживания» или, на англосаксонской мове Roll-off factor .
Вот картинка из в.В.(только здесь вместо альфы — написана бета):
Фильтр, который и осуществляет преобразование «замапированных» данных в моды с определёнными «коэффициентами приподнятого косинуса» называется BB (baseband) Filter(см. схему 1).
(Для тех, кто будет разбирать стандарт: другое название в стандарте "baseband shaping & quadrature modulation", так что не пугайтесь :) )
Собственно «на пальцах» это и есть весь DVB-S2. Я, разумеется, опустил некоторые детали и нюансы, но для тех кому просто любопытно — эти детали быстро вылятят из головы, а кому требуется их освоить — лучше потратить Nцать вечеров и самому почитать стандарты.
Кому тема интересна — в коменты или в личку. Как только будет свободная минутка — обязательно отвечу.
P.S. Жажду критики — прошу в коменты! :)
[1]Digital Video Broadcasting (DVB) User guidelines for the second generation system for Broadcasting, Interactive Services, News Gathering and other broadband satellite applications (DVB-S2) — основной стандарт, в котором обо всём понемногу, а самое главное во второй главе (Referenses) есть ссылки на все остальные стандарты DVB-S2, DVB-S, DSNG, DVB-H и проч.
[2] Digital Video Broadcasting (DVB); Second generation framing structure, channel coding and modulation systems for Broadcasting, Interactive Services, News Gathering and other broadband satellite applications (DVB-S2) — для тех, кому интересно АТК(Алгебраическая теория кодирования), смотреть рекомендую именно этот стандарт
Если вам, уважаемый читатель, интересно как передаются HDTV или SDTV данные через один из самых популярный спутниковых протоколов теле и радио вещания и нет желания/времени читать сам протокол, то прошу под кат.
Схема 1.
I — «Грубая» схема.
Алгоритм DVB-S2 (Digital Video Broadcasting — Sputnik, version 2) предназначен, как не трудно догадаться, для передачи данных с помощью спутника. Cтандарт пришел на смену DVB-S. Его разрабатывает European Telecommunications Standards Institute (ESTI). Да-да, это та же самая
Прежде, чем давать описание ужасной картинки сверху, предлагаю сначала «в общих чертах» понять основной принцип передачи данных.
Картинка ниже — грубое упрощение схемы передачи данных, что указана в самом протоколе (см схему 1)
Схема 2.
Первое, что происходит с видео-потоком, вне зависимости от того какой протокол теле- или радиовещания мы используем, это соединение всех каналов вещания в один канал. Как это происходит? Очень просто: дело в том, что пропускная способность спутникового канала существенно больше, чем требуется для одного видео потока. Поэтому рационально использовать так называемое Time Division Multiplexing (переводится как «Мультиплексирование с разделением времени».)
Возможно, вы где-то аббревиатуру TDM уже встречали… Ага! в GSM!.. Почти верно, только там этот принцип назвается TDMA (Time Division Multiple Access).
Предположим у нас 3 канала (см. рис): Красный, Голубой, Жёлтый.
Поток TDM образуется следующим способом: сначала 1й таймслот Красного канала, затем 1й таймслот Синего канала, затем 1й таймслот Жёлтого. После на выход TDM идёт второй таймслот Красного, второй Синего, втрой Жёлтего и так далее.
Схема 3.
Разумеется на практике хотелось бы как-то проверять информацию на наличие ошибок. В DVB-S2 таймслоты называются UP'ами (от User Packet). CRC-8 на первой схеме и есть код обнаружения ошибок.
Вторая фаза в нашей простой схемке — это скремблирование. Смысл скремблирования, как я понимаю, сделать вероятности появления 1 или 0 равновероятными. Это необходимо, так как следующая фаза в нашей простой схемке — Error Correction Codes (ECC) (Коды исправления ошибок). Действительно, кто читал Берликэмпа, может вспомнить, что вся Алгебраическая Теория Кодирования строится на основе априори заданного правила, что 1 равновероятно 0. Конечно, по причине сжатия, наверное скремблирование излишнее, но, видимо, авторы решили его оставить… (кто имеет иную инфу, прошу написать в коменты!)
После ECC, на выходе получаем кодовое слово, которое подаётся на вход модулятору.
После модуляции, моды подаются на лампу бегущей волны (Wave Tube Amplifer, WTA).
Надеюсь в общих чертах понятно.
II — Мode Adaptation
Теперь, когда кратко мы рассмотрели общую схему (схема 2), будем дальше есть слона по частям. Эта глава про Mode Adaptation (см. схему 1). Протокол DVB-S2 позволяет как самостоятельно осуществить TDM преобразование из различных одиночных входных потоков (Single Input Stream (SIS)), так и принять на вход уже многоканальный поток, который предварительно получен от выхода какого либо иного протокола (Multiple Input Stream (MIS)). Теоретически, если вы Рокфеллер, вы можете вообще не использовать TDM и передавать только один поток… Правда это нерационально и дорого, но стандарт это позволяет, о чём свидетельствует надпись в пунктирном прямоугольничке на схеме. В этом случае нам не нужна ни синхронизация (Input Stream Synchronizer), ни буферизация (Buffer) (пунктирными линиями на схеме 1), ибо в случае отсутствия TDM'а, синхронизировать нечего, а буферизировать бессмысленно.
Merger Slicer — это модуль, который, как нетрудно догадаться по названию, «склеивает» UP-таймслоты между собой.
III — Stream Adaptation
После Мode Adaptation, как видно их схемы 1 идет Stream Adaptation.
Вот рисунок из стандарта:
Схема 4.
UP-таймслоты представляются в виде единого потока Generic Continous Stream. Затем данный поток «режется» на блоки данных, которые называются Data Field и к каждому Data Field прикрепляется BB (Baseband) заголовок.
Поля заголовка следующие:
- MATYPE определяет тип входных данных, SIS или MIS, ACM/CCM режим (об этом позднее) и Roll-off factor
- UPL (User Packet Length) определяет длину UP'a
- DFL(Data Field Length) определяет длину Data Field
- SYNC — это… копия CRC8 байта
- SYNCCD — отступ от второго UP, который в отличие от первого UP полностью вошёл в Data Field (см. схему 4)
- CRC-8 — это ДРУГОЙ проверочный код (не путать с CRC-8 для UP'ов)
После данного разбиения идёт скремблирование с «Псевдо Случайной Бинарной Последовательностью» (Pseudo Random Binary Sequence, PRBS) Кому интересно: Данная последовательность вычисляется благодаря LFSR длины 15, заданный ассоциированным многочленом 1+ x^14 + x^15 и начальным значением: 100101010000000. Те кто понял — я рад, кто не понял — смотри картинку:
Как говорят криптографы, «раскручивая» LFSR получаем выходную последовательность: 10010101000000010111111000000111000001… Минимальная длина последовательности, пока она не зациклится, называется периодом LFSR. Период данного LFSR равен (2^15-1). Вероятность появления 1 и 0 равна 0.5. (На самом деле это утверждение верно не только для рассмотренного LFSR, а для любого LFSR, заполненный не всеми нулями, при условии, что ассоциативный многочлен — примитивен.)
IV — FEC(Forward Error Correction) encding
Давать описание кодированию можно кратко, а можно очень долго. Помимо основного стандарта [1] есть стандарт по кодированию [2]. Если у хабрачитателей возникнет интерес, то я напишу отдельную статью, где подробно разберу кодирование в DVB-S2.
Кратко FEC код, как видно на схеме 1 состоит из трёх фаз:
- БЧХ кодирование
- LDPC (Low Density Parity Check) кодирование
- Перемежение
FEC код работает в двух режимах, так называетмые short FECFRAME и normal FECFRAME. Отличие в длине выхода. Кодовый блок LDPC для короткого фрейма 16200 байт, для длинного 64800. Для передачи «полезной» информации (видео, радио) используют нормальные фреймы. Для служебной информацией, для которой совсем критично время, используют короткие фреймы.
Но и это ещё не всё: для короткого фрейма существует 10 режимов с различными скоростями для БЧХ и LDPC кодирования, для нормального 11 вариантов. Итого 21 вариант FEC кода! Кому интересно подробнее — см Table 5a и Table 5b в [2].
Зачем так много вариантов кодирования?..
Дело в том, что есть три режима функционирования спутника:
- CCM — Constant Coding & Modulation
- VCM — Variable Coding & Modulation
- ACM — Adaptive Coding & Modulation
Начнём с простого: CCM это одинаковое кодирование вне зависимости от того, где находится спутник и какие данные он передаёт. Если помеха увеличилась и это заметили «на земле», то пока не будет послана команда о смене кодирования (если такая команда вообще существует), спутник не будет применять другое кодирование.
VCM кодирование подразумевает различное кодирование для различных типов данных. Ну например если пропадет пару байтов в несжатом видео потоке (хотя обычно видео сжимают, конечно...), то особых проблем не будет, если же исказятся два байта в служебной команде и она будет некорректно воспринята спутником, то это может привести к epic fail…
Самое интересное — это ACM. Данный режим предполагает, что в зависимости от расположения спутника относительно земли, других спутников, времени, наличия/отсутствия дождя,
Стандарт DVB-S2 поддерживает режимы CCM и ACM. Режим VСМ без танцев с бубном не поддерживается.
Режим CCM поддерживается для совместимости, а вот для того, чтобы получить все преимущества ACM, необходимо различное количество возможных форм кодирования! В случае больших помех (дожди, удалённость от земли, помехи от других спутников,
V — Mapping + PL(Physical Layer) Framing.
Если на пальцах, то после получения FEC фрейма, данные разбиваются по 2, по 3, по 4 или по 5 бит.
Всё зависит от того, какой тип модуляции вы выберете:
- QPSK (Quaternary Phase Shift Keying) — по 2 бита
- 8PSK (Eigth Phase Shift Keying) — по 3 бита
- 16APSK (Amplitude-Phase Shift Keying) — по 4 бита
- 32APSK — по 5 бит
Таким образом в DVB-S2 можно использовать две фазовые модуляции(QPSK или 8PSK) и две амплитудно фазовые(16APSK или 32APSK). Тому, кто ничего не знает про модуляции рекомендую неплохую статью хабраписателя alexxerm. UPDATE (спасибо HounD): так же можно просмотреть эту и эту статьи в википедии.
Схема 5.
Mapping означает, что мы «разбили» последовательность на 2,3,4 или 5 бит.
Однако прежде чем послать сигнал дальше, мы в FL(Physical Layer) вносим определенную синхронизирующую последовательность и опять скремблируем.
VI — BB Filter & Modulation
После сигнал подаётся на лампу бегущей волны. Альфой на схеме 1 обозначается «коэффициент приподнятого косинуса», по другому «коэфициент сглаживания» или, на англосаксонской мове Roll-off factor .
Вот картинка из в.В.(только здесь вместо альфы — написана бета):
Фильтр, который и осуществляет преобразование «замапированных» данных в моды с определёнными «коэффициентами приподнятого косинуса» называется BB (baseband) Filter(см. схему 1).
(Для тех, кто будет разбирать стандарт: другое название в стандарте "baseband shaping & quadrature modulation", так что не пугайтесь :) )
Вместо заключения
Собственно «на пальцах» это и есть весь DVB-S2. Я, разумеется, опустил некоторые детали и нюансы, но для тех кому просто любопытно — эти детали быстро вылятят из головы, а кому требуется их освоить — лучше потратить Nцать вечеров и самому почитать стандарты.
Кому тема интересна — в коменты или в личку. Как только будет свободная минутка — обязательно отвечу.
P.S. Жажду критики — прошу в коменты! :)
Рассмотренные в данной статье стандарты
[1]Digital Video Broadcasting (DVB) User guidelines for the second generation system for Broadcasting, Interactive Services, News Gathering and other broadband satellite applications (DVB-S2) — основной стандарт, в котором обо всём понемногу, а самое главное во второй главе (Referenses) есть ссылки на все остальные стандарты DVB-S2, DVB-S, DSNG, DVB-H и проч.
[2] Digital Video Broadcasting (DVB); Second generation framing structure, channel coding and modulation systems for Broadcasting, Interactive Services, News Gathering and other broadband satellite applications (DVB-S2) — для тех, кому интересно АТК(Алгебраическая теория кодирования), смотреть рекомендую именно этот стандарт