Программная модель помехоустойчивого кодирования
Курсовая работа, 15 Декабря 2010, автор: пользователь скрыл имя
Описание
Цель исследования: на основе теоретического анализа изучить механизм действия помехоустойчивого кодирования.
Объект исследования: код Шеннона – Фано.
В соответствии с целью работы были определены следующие задачи исследования:
1. Изучить основные типы кодов помехоустойчивого кодирования;
2. Исследовать один из выбранных кодов (код Шеннона - Фано)
3. Реализовать код Шеннона – Фано на языке программирования Pascal.
Содержание
Введение……………………………………………………………………………3
Глава 1.
1.1 Основные принципы. Типы кодов …………………………………………...5
1.2 Линейные блочные коды………………………………………………..7
1.2.1 Код с проверкой на четность……………………………………….9
1.2.2 Порождающая матрица линейного блочного кода …………………12
1.2.3 Синдром и обнаружение ошибок ……………………………………16
1.2.4 Синдромное декодирование линейных блочных кодов …………18
1.2.5 Вес и расстояние Хемминга. Способность кодов обнаруживать и исправлять ошибки ………………………………………………………………21
1.3 Циклические коды……………………………………………………..26
1.3.1 Кодирование с использованием циклических кодов……………..27
1.3.2 Вычисление синдрома и исправление ошибок в циклических кодах………………………………………………………………………………32
1.3.3 Неалгебраические методы декодирования циклических кодов …..34
1.4 Сверточные коды……………………………………………………..38
1.4.1 Кодирование с использованием сверточных кодов ………………..39
1.4.2 Синдромное декодирование сверточных кодов………………….43
1.4.3 Декодирование сверточных кодов. Алгоритм Витерби …………46
Глава 2
2.1 Коды Шеннона – Фано (Теоритическая часть)……………………..50
2.2 Описание Кода Шеннона – Фано……………………………………55
Заключение ……………………………………………………………………….56
Литература………………………………………………………………………..57
Приложение1……………………………………………………………………..58
Работа состоит из 1 файл
курсовая.doc
— 877.00 Кб (Скачать документ)Среднее значение длины кодового обозначения здесь равно 2,686, т.е. на одну букву текста приходится в среднем 0,895 двоичных знаков, что всего на 1,5% больше значения дв.зн./букву.
В случае еще большей
разницы в вероятностях букв А
и Б приближение к минимально возможному
значению Н дв.зн./букву может несколько
менее быстрым, но оно проявляется не менее
наглядно. Так, при р(А) = 0,89 и р(Б)
= 0,11 это значение равно – 0,89 log0,89 – 0,11
log0,11 ≈ 0,5 дв.зн./букву, а равномерный код
(равносильный применению кода Шеннона
– Фано к совокупности двух имеющихся
букв) требует затраты одного двоичного
знака на каждую букву – в два раза больше.
Нетрудно проверить, что применение кода
Шеннона – Фано к всевозможным двухбуквенным
комбинациям здесь приводит к коду, в котором
на каждую букву приходится в среднем
0,66 двоичных знаков, применение к трехбуквенным
комбинациям - 0,55, а к четырехбуквенным
блокам - в среднем 0,52 двоичных знаков
– всего на 4% больше минимального значения
0,50 дв.зн./букву.[2]
2.2 Описание Кода Шеннона – Фано.
Программа состоит из 6 частей.
Более подробно описание программы смотри Приложение 1.
Части программы:
1)Раздел описании переменных, массивов.
2)Описание файлов, связывание файла с переменной и обращение к файлу. Ввод строки
3)
Отделение символов и их
4) Сортировка по количеству вхождений в строку.
5) Сам код. На против верхней части проставляем 0, напротив нижней части 1.С последующим проделыванием с остальными частями то же самое. Складываем первые части со второй. Сортируем, меняя местами.
6)
Вывод файла. Закрытие файла.
Заключение
До появления работ Шеннона и Фано, кодирование символов алфавита при передаче сообщения по каналам связи осуществлялось одинаковым количеством бит, получаемым по формуле Хартли. С появлением этих работ начали появляться способы, кодирующие символы разным числом бит в зависимости от вероятности появления их в тексте, то есть более вероятные символы кодируются короткими кодами, а редко встречающиеся символы - длинными (длиннее среднего).
Так как развитие кодов, контролирующих ошибки, первоначально стимулировалось задачами связи, терминология теории кодирования проистекает из теории связи. Коды используются для защиты данных в памяти вычислительных устройств и на цифровых лентах и дисках, а также для защиты от неправильного функционирования или шумов в цифровых логических цепях. Коды используются также для сжатия данных, и теория кодирования тесно связана с теорией планирования статистических экспериментов.
Во многих системах связи имеется ограничение на передаваемую мощность. Коды, контролирующие ошибки, являются замечательным средством снижения необходимой мощности, так как с их помощью можно правильно восстановить полученные ослабленные сообщения. Передача в вычислительных системах обычно чувствительна даже к очень малой доле ошибок, так как одиночная ошибка может нарушить программу вычисления. Кодирование, контролирующее ошибки, становится в этих приложениях весьма важным. Для некоторых носителей вычислительной памяти использование кодов, контролирующих ошибки, позволяет добиться более плотной упаковки битов. Другим типом систем связи является система с многими пользователями и разделением по времени, в которой каждому из данного числа пользователей заранее предписаны некоторые временные окна (интервалы), в которых ему разрешается передача. Длинные двоичные сообщения разделяются на пакеты, и один пакет передается в отведенное временное окно. Из-за нарушения синхронизации или дисциплины обслуживания некоторые пакеты могут быть утеряны. Подходящие коды, контролирующие ошибки, защищают от таких потерь, так как утерянные пакеты можно восстановить по известным пакетам.
Список литературы
- Банкет В.Л., Дорофеев В.П. Цифровые методы в спутниковой связи. - М.: Радио и связь, 1988.
- Вернер М.О. Основы кодирования. Учебник для ВУЗов. Москва: Техносфера, 2004.
- Гуткин Л.С. Проектирование радиосистем и радиоустройств. - М.: Радио и связь, 1986.
- Зюко А.Г., Коробов Ю.Ф. Теория передачи сигналов. - М.: Сов. радио, 1972.
- Калинин А.Н., Черенков Е.П. Распространение радиоволн и работа радиолиний. - М.: Радио и связь, 1971.
- Кларк Дж., Кейн Дж. Кодирование с исправлением ошибок в системах цифровой связи. – М.: Радио и связь, 1987.
- Коржик В.И., Финк Л.М., Шелкунов К.Н.. Расчет помехоустойчивости систем передачи дискретных сообщений. - М.: Радио и связь, 1981.
- Кузьмин И.В. Основы теории информации и кодирования. - Минск: Вышэйш. шк., 1986.
- Лезин Ю.С. Введение в теорию и технику радиотехнических систем. - М.: Радио и связь, 1986.
- Мордухович Л.Г., Степанов А.Г. Системы радиосвязи (курсовое проектирование). - М.: Радио и связь, l987.
- Пенин П.И. Системы передачи цифровой информации. - М.: Сов. радио, 1976.
- Пестряков В.Б., Кузенков В.Д. Радиотехнические системы. - М.: Радио и связь, 1988.
- Радиотехнические системы/ Под ред. Ю.М. Казаринова - М.: Сов. радио, 1968.
- Справочник по радиорелейной связи/ Под peд. С.В. Бородича - М.: Радио и связь, 1981.
- Тепляков И.П., Рощин Б.В. Радиосистемы передачи информации. - М.: Радио и связь, 1982.
- Хемминг Р.В. Теория информации и теория кодирования. - М.: Радио и связь, 1983.
- Чердынцев В.А. Радиотехнические системы. – Минск: Вышэйш. шк., 1988.
Приложение 1
uses crt;
var {Раздел описания переменных и массивов}
c:char;
s,s1,s2:string;
i,n,j,j1:byte;
a:array [1..255] of byte;
str:array [1..255] of string[9];
st:array [1..255] of string[100];
f,f1,f2:text;
begin clrscr;
assign(f,’Cod.txt’); assign(f1,’Bukv.txt’); assign(f2,’1&0.txt’);
rewrite(f);rewrite(f1);
writeln('Введите строку');readln(s);{Ввод строки}
s2:=s; {присвоение s2 =s}
while length(s) <> 0 do {цикл до конца строки}
begin
s1:=s1+s[1];
for i:=1 to length(s) do {Идем до конца строки}
if (s1[length(s1)] = s[i])and(pos(s1[length(s1)],s) <> 0) then
begin
inc(n);delete(s,pos(s1[length(
end;
a[length(s1)]:=n;n:=0;{
end;
for j:=1 to 10 do {Сортировка массива}
for i:=1 to length(s1) do
begin
if (a[i] > a[i-1])and(i<>1) then
begin {меняем местами символы по количеству вхождений}
n:=a[i];a[i]:=a[i-1];a[i-1]:=
c:=s1[i];s1[i]:=s1[i-1];s1[i-
end;
if (a[i] < a[i+1])and(i<>0) then
begin
n:=a[i];a[i]:=a[i+1];a[i+1]:=
c:=s1[i];s1[i]:=s1[i+1];s1[i+
end;
end;{составляем собственно код}
for i:=1 to length(s1) do {Идем до конца строки}
st[i]:=s1[i]; {st присваиваем s1}
i:=length(s1); {I количество символов в строке}
while length(s1) <> length(st[1]) do {Пока количество символов s1 не равно st1 будем выполнять}
begin
for n:=1 to length(st[i]) do {n=1 идем до конца строки}
begin
j:=pos(st[i][n],s1); {j присваивается sti n в строке s1}
if a[i] > a[i-1] then str[j]:='1'+str[j] {Первому символу присваеваем 1 а остальным 0}
else str[j]:='0'+str[j];
end;
for n:=1 to length(st[i-1]) do
begin
j:=pos(st[i-1][n],s1);
if a[i] > a[i-1] then str[j]:='0'+str[j]
else str[j]:='1'+str[j];
end;
a[i-1]:=a[i]+a[i-1];a[i]:=0; {Складываем первичную часть со второй}
st[i-1]:=st[i-1]+st[i];st[i]:=
for j1:=i downto 1 do
begin
if (a[j1] > a[j1-1])and((j1-1) <> 0) then
begin
n:=a[j1];a[j1]:=a[j1-1];a[j1-
s:=st[j1];st[j1]:=st[j1-1];st[
end;
end;
end;
for i:=1 to length(s2) do
begin
write(f2,str[pos(s2[i],s1)],' ');{Вывод в файл}
write(str[pos(s2[i],s1)],' ');
end;
for i:=1 to length(s1) do
begin
write(f1,s1[i],' ');
write(f,str[i],' ');
end;
close(f);close(f1);close(
end.