Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Цифроовое моделирование системы эффективного кодирования сообщений(объектно-ориентированный подход).doc
Скачиваний:
19
Добавлен:
15.06.2014
Размер:
1.27 Mб
Скачать

5. Порядок выполнения работы

  1. Усвоить теоретические положения.

  2. Построение эффективного кода

  3. Построение имитационных моделей систем цифровой передачи сообщений эффективным кодом.

  4. Исследование систем цифровой передачи сообщений эффективным кодом.

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

  • тип кодируемых сообщений («непрерывный» сигнал случайной формы);

  • длина кодируемой последовательности;

  • параметры нормального распределения помехи, искажающей содержимое разрядов кодового слова (математическое ожидание – МО, среднеквадратическое отклонение – СКО).

При этом варьируются способности (параметры) систем:

  • объем кода;

  • длина блока или L-граммы;

  • средняя расчётная длина кодового слова;

  • величина уровня «0» и «1» и порога квантования;

  • число уровней квантования (для непрерывного сигнала).

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

Внешнее воздействие (параметры нормального распределения помех)

Способности систем цифровой передачи сообщений

Результаты эксперимента

МО

СКО

Предполагаемые параметры нормального распределения

Предполагаемая вероятность искажения разряда

Средняя длина кодового слова

Частота правильной передачи сообщений

Средняя ошибка искажения формы сигнала

Длина блока, L-граммы

Средняя расчётная длина кодового слова

Уровень «0»

Уровень «1»

Величина порога квантования

МО1

СКО1

0

0

0

V

0

0

0

0

0

0

0

0

V

0

0

0

0

0

0

0

0

V

0

0

0

0

0

0

0

0

V

0

0

0

0

0

0

0

0

0

0

0

0

0

V

V

V

V

V

V

0 – постоянный в данном эксперименте параметр;

V – варьируемый в данном эксперименте параметр.

  1. Сформулировать выводы об эффективности работы исследуемых систем.

  2. Построение цифровой модели

Для построения данной цифровой модели и ее исследования необходимо выполнить четыре этапа:

  1. Создать объекты, необходимые в данной цифровой модели;

  2. Настроить ранее созданные объекты для корректной работы;

  3. Соединить в «естественном» порядке объекты, которые должны обрабатывать сигнал;

  4. Передать блоки памяти и таблицы кодовых слов, закрепленные за устройствами, в необходимые для анализа цифровой модели объекты.

    1. Кодирование сигналов

В данной модели «непрерывный» сигнал от источника имитируется множеством значений кусочно-линейной функции, генерируемым методом gklf класса SignalGenerator. Прежде чем формировать сигнал, необходимо создать его модель. Она представлена классом ModelSignal, который, используя метод SetInflectionPoints, принимает два массива: аргументы и соответствующие им значения функции. Далее необходимо задать параметры квантователя. Для этого создаётся настройщик QuantizerTuner, позволяющий получить параметры QuantizerConfig.

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

Теперь необходимо создать квантователь Quantizer, настроив его на соответствующие параметры.

Последним элементом этой цепочки блоков будет Segmentator, который будет принимать значения сигналов и преобразовывать их в уровни квантования. После этого Segmentator по выбранному режиму работы Segmentator.BlockMode() или Segmentator.Lgrammode() будет формировать из уровней квантования блоки или L-граммы. В результате N тактов в памяти объекта образуется цепочка блоков или L-грамм.

Целью вышеперечисленных действий является получение цепочки блоков или L-грамм, с помощью которой нужно «обучить» кодер и декодер сообщений распознавать принятые блоки или L-граммы, или же соответствующие им кодовые слова. Далее необходимо соединить блоки цифровой модели следующим образом.

Экземпляр класса ChainGenerator принимает цепочку блоков или L-грамм для ее передачи экземпляру класса PCoder или ECoder. Он выполняет непосредственно кодирование принимаемых от генератора сообщений двоичными позиционными кодовыми словами (вариант с PCoder) или же кодовыми словами эффективного кода (вариант с ECoder). Для того чтобы эти блоки могли распознавать передаваемые им сообщения, нужно создать экземпляры классов PositionalCoder и Huffman (для приведенных выше случаев соответственно), которые построят таблицы соответствия между кодовыми словами и сообщениями.

Обычно события в канале связи представлены следующими факторами: затуханием амплитуды сигнала, изменением его частотных и динамических характеристик, искажениями сигнала помехами. В данной работе события в канале связи представлены только искажениями сигнала помехой. Сообщение после кодирования будет передаваться через канал связи DataLink. Для того чтобы создать помеху, которая будет искажать входное кодовое слово в данном канале связи, необходимо воспользоваться классом Gauss. Метод этого класса generate представляет собой генерацию псевдослучайных чисел с нормальным гауссовым распределением. Канал связи можно настроить с помощью EnvironmentTuner таким образом, что бы помеха влияла как на каждый разряд кодового слова, так и на любой случайный.

Для декодирования кодовых слов, с выхода канала связи, следует подключить PDecoder или EDecoder в зависимости от поставленной цели. Данным объектам необходимо также передать таблицу соответствия сообщений кодовым словам. Если на входе декодера появилось неизвестное кодовое слово, то он интерпретирует его сообщением, у которого частота появления в передаваемом сигнале больше, чем у других блоков или L-грамм.

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

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

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

Соединение объектов происходит с помощью метода setNext и setNextBlok, при условии, что данный объект реализует интерфейс IBlockConnector и IDeviceConnector. После чего необходимо запустить генератор сигнала с помощью метода execute().

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

После передачи сигнала его необходимо проанализировать. Для этого в цифровой модели существуют следующие средства:

  1. EStatViewer – класс, занимающийся выводом данных об эффективности кода;

  2. EffectiveCodeStatistics – класс, предназначенный для вычисления показателей эффективности кода;

  3. TableViewer – класс, предназначенный для вывода кодирующих таблиц;

  4. PassStatistics – класс, рассчитывает статистические показатели эффективности кода.

Рекомендуется в исходных данных: количество отсчетов, длинна блока или L-грамма, количество сообщений – добиться кратности, чтобы не потерять передаваемые данные из-за несоответствия количества сообщений сумме длин всех сообщений.

    1. Кодирование текстов

Внешняя среда может быть представлена текстовым файлом, определяемым пользователем. В этом случае экземпляр класса Derivedbuilder формирует цепочку блоков или L-грамм MsgChain, в зависимости от переданной Derivedbuilder конфигурации формирования цепочки.

После формирования цепочки блоков или L-грамм необходимо создать среду для приема и передачи данных: кодер (PCoder / ECoder), декодер (PDecoder / EDecoder). Но прежде создаем экземпляр класса PositionalCode / Huffman, который отвечает за создание таблицы кодирования, состоящую из двоичных кодовых слов позиционного кода (кодовых слов эффективного кода), тем самым позволяя по данной таблице «распознавать» поступающие на вход устройства данные.

За последовательную передачу цепочки сообщений отвечает класс ChainGenerator, который обязательно должен стоять первым в цепочке подключенных устройств. Сообщения передаются блоками или L-граммами в «естественной» последовательности (как в файле).

Соединение объектов происходит с помощью метода setNext, при условии, что данный объект реализует интерфейс IDeviceConnector. После чего необходимо запустить генератор сообщений с помощью метода execute().

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

После передачи данных их необходимо проанализировать. Для этого в цифровой модели существуют следующие средства:

  1. EStatViewer – класс, занимающийся выводом данных об эффективности кода;

  2. EffectiveCodeStatistics – класс, предназначенный для вычисления показателей эффективности кода;

  3. TableViewer – класс, предназначенный для вывода кодирующих таблиц;

  4. PassStatistics – класс, рассчитывает статистические показатели эффективности кода.

Рекомендуется в исходных данных: количество отсчетов, длина блока или L-граммы, количество сообщений – добиться кратности, чтобы не потерять передаваемые данные из-за несоответствия количества сообщений сумме длин всех сообщений.