MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

Обработка сигналов и изображений\Communications Toolbox

А.Б.Сергиенко. Communications Toolbox - обзор

Пакет расширения Communications предназначен для выполнения в среде MATLAB расчетов, связанных с моделированием телекоммуникационных систем. В первую очередь, функции пакета ориентированы на системы цифровой связи, но имеются и функции аналоговой модуляции и демодуляции.

К возможным областям применения пакета относятся моделирование передачи данных по телефонным сетям (модемные протоколы, VDSL, HDSL, ADSL), радиоканалам (радиотелефоны DECT, сотовые сети GSM) и разнообразным физическим средам компьютерных сетей.

Внимание! Для использования пакета Communications необходимо наличие установленного пакета Signal Processing.

Для разделения функций пакета на смысловые группы в зависимости от их назначения обратимся к обобщенной структурной схеме системы связи, показанной ниже.

Обобщенная структурная схема системы связи

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

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

В процессе прохождения модулированного сигнала через канал связи сигнал подвергается воздействию шумов и помех. Искаженный сигнал поступает на вход приемника.

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

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

В соответствии с этой схемой можно выделить следующие группы функций пакета:

Кроме этих групп, непосредственно связанных со структурной схемой телекоммуникационной системы, в пакете Communications имеется еще несколько групп общих и служебных функций:

 

Функции моделирования и анализа сигналов

Для моделирования телекоммуникационной системы необходимо иметь возможность создавать модели сигналов и шумов. Шумы, очевидно, являются случайными процессами. Случайными являются и сообщения, подлежащие передаче (ведь если сообщение является детерминированным, то есть полностью известным, незачем его и принимать). Различие между полезными и шумовыми случайными процессами заключается в их статистических свойствах.

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

Функция randint позволяет создать матрицу случайных чисел, равномерно распределенных в заданном интервале. Близкой по смыслу, но более гибкой является функция randsrc, которая позволяет задавать алфавит (т.е. множество используемых целых чисел, не обязательно составляющих непрерывный диапазон) и вероятности появления в сообщении отдельных символов этого алфавита.

Функция randerr предназначена для формирования ошибок в цифровом сигнале. Она дает матрицу, в каждой строке которой имеется заданное число случайно расположенных ненулевых элементов.

С помощью функции wgn моделируется дискретный белый гауссовский шум с заданной мощностью. Генерируемый шум может быть вещественным или комплексным.

Для оценки помехоустойчивости системы связи необходимо произвести сравнение исходного (передаваемого) сообщения с сообщением, полученным в результате приема, и определить число ошибок, возникших в процессе передачи, а также вероятность ошибки. Эти действия выполняются функциями symerr и biterr, первая из которых подсчитывает число несовпадающих символах в двух сообщениях, а вторая — число несовпадающих битов в двоичных представлениях этих символов. Кроме числа ошибок, обе функции могут возвращать долю ошибок в общем числе символов (битов) и индикаторы мест возникновения ошибок.

Последние две функции данной группы предназначены для графического отображения сигналов с квадратурной манипуляцией. Функция eyediagram выводит так называемую глазковую диаграмму, а функция scatterplot — диаграмму рассеяния.

Функции кодирования/декодирования источника

Кодирование источника (source coding) предназначено для того, чтобы преобразовать исходную форму сообщения в пригодный для передачи формат. В общем случае это кодирование может включать в себя преобразование измеряемой физической величины в электрический сигнал (по этой причине на структурных схемах систем передачи информации блоки кодирования и декодирования источника иногда называют преобразователями), дискретизацию и квантование, а также устранение избыточности, имеющейся в исходном сообщении.

Пакет Communications содержит функции, выполняющие следующие операции кодирования/декодирования источника:

Неравномерное квантование

Неравномерное квантование осуществляется функцией quantiz. Она позволяет преобразовать произвольные значения входного сигнала в номера уровней квантования и соответствующие квантованные значения. В качестве параметров задаются границы зон квантования и соответствующие этим зонам квантованные значения сигнала.

С помощью функции lloyds можно оптимизировать параметры квантования. Эта функция подбирает границы зон и квантованные значения на основе тестового набора входных отсчетов, минимизируя среднеквадратическую ошибку квантования. Для оптимизации используется алгоритм Ллойда.

Логарифмическое и экспоненциальное преобразования

При кодировании речевых сигналов искажения сигналов с малым уровнем оказываются значительно заметнее на слух, чем искажения сигналов с большим уровнем. К тому же речевой сигнал имеет сравнительно большой пикфактор, то есть пиковый уровень сигнала значительно превышает его среднеквадратическое значение, а значит, большие выбросы случаются редко. Это позволяет использовать нелинейное квантование, при котором шаг квантования для больших (по модулю) значений сигнала больше, чем для малых. Таким образом, индекс квантования (номер квантованного уровня) нелинейно зависит от входного сигнала, эта нелинейная зависимость представляет собой кусочно-линейную аппроксимацию логарифмического закона. Для восстановления сигнала используется обратное преобразование, при котором кусочно-линейно аппроксимируется экспоненциальная функция.

Данный способ кодирования/декодирования применяется при импульсно-кодовой модуляции (ИКМ) в аппаратуре телефонных станций (Рекомендация ITU-T G.711).

Логарифмическое преобразование позволяет сжать динамический диапазон сигнала и уменьшить количество двоичных разрядов, необходимых для его представления. При использовании параметров кодирования, указанных в уже упоминавшейся Рекомендации ITU-T G.711, это позволяет уменьшить требуемую скорость передачи данных в полтора раза (12-разрядное двоичное число после логарифмического преобразования представляется восемью разрядами).

В пакете Communications указанные преобразования (оба — и логарифмическое, и экспоненциальное) осуществляются функцией compand. Она позволяет реализовать оба используемых на практике варианта преобразования — так называемые законы A и m (A-law и m -law), несколько различающиеся способом формирования кусочно-линейной аппроксимации.

Дифференциальная импульсно-кодовая модуляция (ДИКМ)

Еще один способ уменьшить скорость передачи данных, необходимую при передаче речевых сигналов — использовать тот факт, что речевой сигнал изменяется во времени довольно плавно. Благодаря этому можно довольно точно предсказывать сигнал, формируя линейную комбинацию предыдущих его значений. Остаточная ошибка предсказания оказывается малой, и для ее квантования можно использовать меньшее число уровней. Эта идея лежит в основе метода дифференциальной импульсно-кодовой модуляции (ДИКМ) (differential pulse code modulation, DPCM).

Функция dpcmenco производит дифференциальное кодирование сообщения, при этом задаются коэффициенты предсказывающего фильтра и параметры квантования ошибки предсказания. Функция dpcmdeco восстанавливает исходное сообщение.

Чтобы минимизировать искажения сообщения, возникающие в процессе дифференциального кодирования и декодирования, необходимо правильно выбрать параметры ДИКМ — коэффициенты предсказывающего фильтра, границы зон квантования и квантованные уровни. Сделать это позволяет функция dpcmopt, которая подбирает указанные параметры, минимизируя среднеквадратическую ошибку квантования для тестовой последовательности отсчетов.

Функции помехоустойчивого кодирования/декодирования

Идея помехоустойчивого кодирования заключается в том, что к передаваемому сообщению добавляются избыточные символы. Эти избыточные символы связаны определенными математическими соотношениями с символами сообщения. Цель внесения избыточности — сделать возможные кодированные сообщения как можно больше отличающимися друг от друга. Для измерения степени этого отличия используется кодовое расстояние — минимальное число символов, которыми различаются два кодированных сообщения (для некодированных сообщений кодовое расстояние, естественно, равно 1). От кодового расстояния зависит корректирующая способность кода, то есть возможность обнаруживать и/или исправлять с его помощью некоторые из произошедших искажений. При декодировании кода с кодовым расстоянием d0 можно обнаружить ошибки кратности (d0 – 1) и исправить ошибки кратности ((d0 – 1)/2).

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

Блочные коды

Пакет поддерживает работу с произвольными линейными блочными кодами. Имеется также дополнительная поддержка нескольких более узких классов кодов — циклических кодов, кодов Боуза—Чоудхури—Хоквингема (БЧХ), кодов Хэмминга и кодов Рида—Соломона.

Функции высокого уровня encode и decode осуществляют, соответственно, кодирование и декодирование сообщения с использованием блочного кода. Тип используемого кода задается в числе параметров функций.

Линейный блочный код в общем случае описывается порождающей матрицей (generator matrix). Кодирование блока (вектора) производится путем его умножения на порождающую матрицу. Помимо порождающей, существует проверочная матрица кода (parity-check matrix). Она может использоваться для обнаружения ошибок — при отсутствии ошибок умножение кодированного блока на проверочную матрицу должно давать нулевой вектор. Преобразование порождающей матрицы в проверочную и обратно осуществляется функцией gen2par.

Если умножение кодированного блока на проверочную матрицу не дает нулевого вектора, то полученный результат (его называют синдромом — syndrome) позволяет определить, какие именно символы были искажены в процессе передачи. Если код является двоичным (то есть символы могут принимать только значения 0 и 1), это позволяет исправить ошибки. Декодирование линейного блочного кода, таким образом, можно осуществить с помощью таблицы, в которой для каждого значения синдрома указан соответствующий вектор ошибок. Создать такую таблицу на основании проверочной матрицы кода позволяет функция syndtable.

Функция gfweight позволяет определить кодовое расстояние для линейного блочного кода по его порождающей или проверочной матрице.

Циклические коды
Циклические коды — это подкласс линейных кодов, обладающие тем свойством, что циклическая перестановка символов в кодированном блоке дает другой возможный кодированный блок того же кода.
Для работы с циклическими кодами в пакете Communications имеются две функции. Задав число символов в кодируемом и закодированном блоках, с помощью функции cyclpoly можно получить порождающий полином циклического кода. Далее, использовав этот полином в качестве одного из параметров функции cyclgen, можно получить порождающую и проверочную матрицы для данного кода.

Коды БЧХ
Коды БЧХ являются одним из подклассов циклических блочных кодов. Для работы с ними функции высокого уровня вызывают специализированные функции bchenco (кодирование) и bchdeco (декодирование). Кроме того, функция bchpoly позволяет рассчитывать параметры или порождающий полином для двоичных кодов БЧХ.

Коды Хэмминга
Коды Хэмминга являются одним из подклассов циклических блочных кодов. Порождающий полином для кодов Хэмминга неприводим и примитивен, а длина кодированного блока равна 2m – 1. Порождающая и проверочная матрицы для кодов Хэмминга генерируются функцией hammgen.

Коды Рида—Соломона
Коды Рида—Соломона являются одним из подклассов циклических блочных кодов. Это единственные поддерживаемые пакетом Communications коды, которые работают не с однобитовыми, а с многобитовыми символами.
Для работы с кодами Рида—Соломона функции высокого уровня вызывают специализированные функции rsenco (кодирование) и rsdeco (декодирование). Кроме того, функции rsencode и rsdecode позволяют использовать при кодировании и декодировании экспоненциальный формат данных, а функции rsencof и rsdecof осуществляют кодирование и декодирование текстового файла.
Наконец, функция rspoly генерирует порождающие полиномы для кодов Рида—Соломона.

Сверточные коды

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

Декодирование сверточного кода производится по алгоритму Витерби функцией vitdec. Поддерживаются мягкое и жесткое декодирование.

В версии 2.0 пакета Communications по сравнению с предыдущими версиями сильно изменен формат представления сверточных кодов — теперь они описываются наглядной таблицей переходов (см. описания функций poly2trellis и istrellis). Также существенно изменена реализация мягкого декодирования сверточных кодов.

Функции модуляции/демодуляции

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

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

Пакет Communications содержит функции для реализации аналоговой и цифровой модуляции и демодуляции. При аналоговой модуляции входным сигналом является непрерывная функция, при цифровой — последовательность символов. Модулированный сигнал может представляться либо в вещественном виде (passband simulation), либо в виде комплексной огибающей (baseband simulation). Соответственно приведенной классификации имеется 8 функций:

  • amod — аналоговая модуляция, вещественный выходной сигнал;
  • amodce — аналоговая модуляция, выходной сигнал в виде комплексной огибающей;
  • ademod — аналоговая демодуляция, вещественный входной сигнал;
  • ademodce — аналоговая демодуляция, входной сигнал в виде комплексной огибающей;
  • dmod — цифровая модуляция, вещественный выходной сигнал;
  • dmodce — цифровая модуляция, выходной сигнал в виде комплексной огибающей;
  • ddemod — цифровая демодуляция, вещественный входной сигнал;
  • ddemodce — цифровая демодуляция, входной сигнал в виде комплексной огибающей;

Функциями пакета поддерживаются следующие виды аналоговой модуляции:

  • амплитудная модуляция;
  • амплитудная модуляция с подавленной несущей;
  • однополосная модуляция;
  • частотная модуляция;
  • фазовая модуляция;
  • квадратурная модуляция.

При цифровой модуляции возможны следующие ее виды:

  • амплитудная манипуляция;
  • частотная манипуляция;
  • минимальная частотная манипуляция;
  • фазовая манипуляция;
  • квадратурная манипуляция.

Цифровая модуляция и демодуляция включают в себя две стадии. При модуляции цифровое сообщение сначала преобразуется в аналоговый модулирующий сигнал с помощью функции modmap, а затем осуществляется аналоговая модуляция. При демодуляции сначала получается аналоговый демодулированный сигнал, а затем он преобразуется в цифровое сообщение с помощью функции demodmap.

Наконец, три последних функции этой группы предназначены для работы с конкретными сигнальными созвездиями квадратурной манипуляции. Функции qaskenco и qaskdeco производят кодирование и декодирование сообщения с использованием “квадратного” созвездия, а функция apkconst позволяет вывести на экран изображение “концентрического” созвездия.

Моделирование каналов связи

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

Данная группа функций пакета Communications в данный момент представлена лишь одной функцией awgn, которая позволяет добавить к сигналу аддитивный белый нормальный шум, реализовав при этом заданное отношение сигнал/шум. При этом мощность сигнала, знать которую необходимо для расчета требуемого уровня шума, может задаваться в явном виде либо измеряться автоматически.

Специальные фильтры

В системах связи используется большое количество фильтров разнообразного назначения. В основном потребности расчета фильтров в MATLAB удовлетворяются средствами пакетов Signal Processing и Filter Design, поэтому пакет Communications содержит лишь функции для расчета двух типов специализированных фильтров.

Функция hilbiir выполняет расчет рекурсивного фильтра, аппроксимирующего преобразование Гильберта. Фильтр Гильберта вносит на всех частотах одинаковый фазовый сдвиг, равный 90° , сохраняя при этом неизменными амплитуды всех спектральных составляющих. Этот фильтр используется функцией аналоговой модуляции amod при одном из способов формирования сигнала с однополосной модуляцией. Кроме того, преобразование Гильберта используется для расчета мнимой части комплексного аналитического сигнала, обладающего односторонним спектром.

Функция rcosine выполняет расчет фильтра с косинусоидальным сглаживанием амплитудно-частотной характеристики (raised cosine filter), широко используемого для формирования спектра сигнала при квадратурной манипуляции. Благодаря отсутствию скачков амплитудно-частотной характеристики импульсная характеристика такого фильтра убывает значительно быстрее, чем импульсная характеристика идеального фильтра нижних частот, поэтому ее усечение по длине вызывает значительно меньше искажений в частотной области. Для расчетов вызываются две функции более низкого уровня: rcosfir (нерекурсивный вариант) и rcosiir (рекурсивный вариант).

Функция rcosflt повышает частоту дискретизации сигнала в целое число раз, осуществляя интерполяцию с использованием фильтра с косинусоидальным сглаживанием АЧХ. С помощью этой функции можно реализовать формирование спектра при квадратурной манипуляции (функция цифровой модуляции dmod формирования спектра не производит).

Функция hank2sys преобразует матрицу Ханкеля в описание рекурсивной дискретной системы. Такое преобразование может использоваться для построения рекурсивной системы с заданной импульсной характеристикой (в частности, эта функция используется функцией hilbiir для расчета рекурсивного фильтра Гильберта).

Функции вычислений в конечных полях (полях Галуа)

Полем называется множество элементов, обладающее следующими свойствами.

  1. Для элементов поля определены операции сложения и умножения, причем результаты этих операций должны принадлежать этому же множеству.
  2. Для операций сложения и умножения выполняются обычные правила ассоциативности (a + (b + c) = (a + b) + c), коммутативности (a + b = b + a и a x b = b x a) и дистрибутивности (a x (b + c) = a x b + a x c).
  3. Для каждого элемента a должны существовать обратный элемент по сложению (–a) и, если a не равно нулю, обратный элемент по умножению (a –1).
  4. Поле должно содержать аддитивную единицу — элемент 0, такой что a + 0 = a для любого элемента поля a.
  5. Поле должно содержать мультипликативную единицу — элемент 1, такой что a x 1 = a для любого элемента поля a.

Например, существуют поля вещественных чисел, рациональных чисел, комплексных чисел. Эти поля содержат бесконечное число элементов. Очевидно, не существует поля целых чисел, так как обратный элемент по умножению не принадлежит множеству целых чисел.

Конечные поля (поля Галуа) — это поля, содержащие конечное число элементов. Они применяются в теории передачи сообщений, и особенно в теории помехоустойчивого кодирования. Пакет Communications содержит довольно большое (около двадцати) число функций, реализующих вычисления в конечных полях. Это, в частности, функции сложения (gfadd, gfplus), вычитания (gfsub), умножения элементов (gfmul) и полиномов (gfconv), деления элементов (gfdiv) и полиномов (gfdeconv), фильтрации (gffilter), решения систем линейных уравнений (gflineq), поиска минимальных полиномов (gfminpol), проверки полиномов на неприводимость и примитивность (gfprimck), поиска примитивных полиномов (gfprimfd), определения ранга матрицы (gfrank), поиска корней полиномов (gfroots), генерации циклотомических классов (gfcosets), вывода элементов в полиномиальной форме (gfpretty), поиска примитивных полиномов заданной степени (gfprimdf), преобразования полиномиальных представлений (gfrepcov) и минимизации их длины (gftrunc), а также преобразования форматов представления элементов (gftuple).

Вспомогательные функции

К этой группе относятся функции, не связанные непосредственно с моделированием систем связи, а осуществляющие вспомогательные операции.

Несколько функций связаны с преобразованием представления чисел. Функция de2bi преобразует десятичные числа в векторы их двоичного представления, содержащие нули и единицы, а функция bi2de осуществляет обратное преобразование. Функция oct2dec преобразует восьмеричные числа (представленные в десятичной записи с использованием цифр 0…7) в десятичные.

Две функции связаны с представлением структуры сверточного кода в виде таблицы переходов. Функция istrellis проверяет, является ли переданный ей параметр корректной таблицей переходов, а функция poly2trellis преобразует полиномиальное представление сверточного кода в таблицу переходов.

Функция marcumq вычисляет обобщенную Q-функцию Маркума. В частности, с ее помощью можно рассчитать интегральную функцию распределения для закона Рэлея—Райса (по этому закону распределена огибающая узкополосного случайного сигнала при наличии детерминированной составляющей).

В документации пакета в данную категорию включены две функции, строго говоря, не принадлежащие пакету Communications, а входящие в ядро MATLAB. Это функция ошибок erf и функция erfc, дополняющая ее до единицы. Эти две функции позволяют, в частности, рассчитывать функцию распределения для гауссовых случайных величин.

Наконец, функция vec2mat позволяет преобразовать вектор в матрицу с заданным числом столбцов, располагая содержимое вектора по строкам матрицы и при необходимости дополняя последнюю строку нулями.


Поиск по сайту:

Система Orphus

Яндекс.Метрика