Разработка программного имитатора цифрового канала связи с применением помехоустойчивого кодирования
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
°емое значение - удачное (true), неудачное (false) завершение операции.
function adc;
var_bit :Byte;_levels:Int64;_level :Int64;_height:real;_signal :real;_signal :real;:real;_dis :real;curdiscret > adc_propertion.messagev then:= false;;;_levels := Int64(1) shl adc_propertion.capacity;_dis := 1 / adc_propertion.dfrequency;
//дискретизация:= curdiscret * period_dis;_res.discret := signal_propertion.signal(signal_propertion.amplitude,_propertion.frequency, discret);_signal := signal_propertion.maxvalue;_signal := signal_propertion.minvalue;_height := (max_signal - min_signal) / (Int64(quant_levels));
// квантование
// оцифровывание_bit := adc_propertion.capacity;_level := Int64(1) shl (n_bit);((adc_res.discret - min_signal) / level_height < Int64(n_level) - 1) or
((adc_res.discret - min_signal) / level_height > Int64(n_level)) do(adc_res.discret - min_signal) / level_height 0 then_bit := n_bit - 1;;_res.level := Int64(n_level) - 1;_savetofile;:= true;;
Функция evencoder осуществляет кодирование оцифрованного значения уровня с АЦП по алгоритму проверки чётности. Входные параметры: capacity - разрядность кода, приходящего с АЦП.
procedure evencoder;
var_bit :Cardinal;_res.evencode := adc_res.level shl 1;n_bit := 0 to capacity - 1 do_res.evencode := coders_res.evencode xor getbitfromint(adc_res.level, n_bit);;_savetofile(1);;
Функция evendecoder осуществляет декодирование кода по алгоритму проверки чётности. Входные параметры: capacity - разрядность кода, code - декодируемый код.
evendecoder;_bit :Cardinal;_res.level := code shr 1;_res.end_error := 0;_res.full_error := 0;_res.error := False;n_bit := 0 to capacity - 1 do_res.end_error := decoders_res.end_error xor getbitfromint(code, n_bit);;decoders_res.end_error > 0 then_res.error := True;_res.full_error := decoders_res.end_error;;_savetofile();;
Функция hammcoder осуществляет кодирование оцифрованного значения уровня с АЦП по алгоритму Хэмминга 1-х. Входные параметры: capacity - разрядность кода, приходящего с АЦП.
procedure hammcoder;
var, k :Cardinal;_count :Cardinal;_index :Cardinal;_bit :Cardinal;_byte :Cardinal;_count := coders_res.hcapacity - capacity;:= 0;:= 0;_index := 1;_byte := 0;_res.hammcode := 0;n_bit := 0 to coders_res.hcapacity - 1 do(n_bit = check_index - 1) then:= k + 1;_index := Int64(1) shl k;_res.hammcode := int64(coders_res.hammcode) or
(Int64(getbitfromint(adc_res.level, i)) shl n_bit);:= i + 1;getbitfromint(coders_res.hammcode, n_bit) = 1 then_byte := check_byte xor (n_bit + 1);;;_index := 1;:= 0;n_bit := 0 to checkbit_count - 1 do_res.hammcode := int64(coders_res.hammcode) or (Int64((check_byte shr k) and 1) shl (check_index - 1));:= k + 1;_index := Int64(1) shl k;;_savetofile(2);;
Функция hammdecoder осуществляет декодирование кода по алгоритму Хэмминга 1-х. Входные параметры: capacity - разрядность кода, code - декодируемый код, checkbit_count - количество проверочных бит.
procedure hammdecoder;:Cardinal;_index :Cardinal;_index :Cardinal;_bit :Cardinal;_code :Int64;_res.end_error := 0;_res.full_error := 0;_res.error := False;_code := code;_res.level := 0;n_bit := 0 to capacity - 1 do_res.full_error := decoders_res.full_error xor (getbitfromint(right_code, n_bit) * (n_bit + 1));;decoders_res.full_error > 0 then_res.error := True;decoders_res.full_error > capacity then_res.full_error := 0;(decoders_res.full_error > 0) then(right_code, decoders_res.full_error - 1);:= 0;_index := 1;_index := 0;_res.end_error := decoders_res.full_error;n_bit := 0 to capacity - 1 do(n_bit = check_index - 1) thendecoders_res.end_error = check_index then_res.end_error := 0;:= k + 1;_index := Int64(1) shl k;decoders_res.end_error = n_bit + 1 then_res.end_error := info_index + 1;_res.level := int64(decoders_res.level) or
(Int64(getbitfromint(right_code, n_bit)) shl info_index);(info_index);;;
decoder_savetofile();;
Функция xdiv осуществляет деление полиномов по модулю два. Входные параметры: P - делимое, G - делитель, Plen, Glen, длины полиномов. Возвращает остаток от деления по модулю два.
function xdiv;
var
Psh :Byte;
Gsh :Byte;:Byte;_bit :Byte;
Psh := max(Glen - Plen, -1) + 1;:= max(Plen - Glen, 1) - 1;
Pbit := Plen + Psh - 1;:= Int64(P) shl Psh;:= Int64(G) shl Gsh;n_bit := 1 to Psh do:= Int64(Int64(G) shl 1);(getbitfromint(G, Pbit) = 1) then:= Int64(G) xor P;;;:= Int64((Int64(G) shr (Gsh + Psh)));
end;
Функция wcrctail осуществляет составление таблицы для производящего полинома. Входные параметры: polinom - производящий полином.
procedure wcrctail;
var
polinomInt :Int64;
tail :Int64;:Byte;_bit :Byte;:= getintfrombin(getbinfromstr(polinom));:= polinomcap(polinom);(poltailf, combinepath(curuser.profdir, 2, [curuser.userl, curuser.crctailf]));(poltailf);n_bit := 1 to 64 do:= xdiv(polinomInt, Int64(1) shl (n_bit - 1), pollen, n_bit);(poltailf, tail);;(poltailf);(poltailf, '');
end;
Функция crccoder осуществляет кодирование оцифрованного значения уровня с АЦП по алгоритму циклического кодирования 1-х. Входные параметры: capacity - разрядность кода, приходящего с АЦП, polinom - производящий полином.
procedure crccoder;_count:Byte;:Int64;:Int64;:Byte;_count := coders_res.ccapacity - capacity;:= getintfrombin(getbinfromstr(polinom));:= polinomcap(polinom);:= xdiv(polinomInt, adc_res.level shl checkbit_count,, coders_res.ccapacity);_res.crccode := Int64(adc_res.level) shl checkbit_count;_res.crccode := Int64(coders_res.crccode) or messageInt;_savetofile(3);;
Функция crcdecoder осуществляет декодирование кода по алгоритму циклического кодирования 1-х. Входные параметры: capacity - разрядность кода, code - декодируемый код, checkbit_count - количество проверочных бит, polinom - производящий полином.
procedure crcdecoder;:Int64;:Int64;:Byte;:= getintfrombin(getbinfromstr(polinom));:= polinomcap(polinom);_res.error := False;:= xdiv(polinomInt, code, pollen, capacity);messageInt > 0 then_res.error := True;_res.full_error := rcrcdigit(messageInt, capacity);_res.level := code;_res.end_error := 0;(decoders_res.full_error > 0) then(decoders_res.level, decoders_res.full_error - 1);_res.end_error := decoders_res.full_error;decoders_res.end_error > checkbit_count then_res.end_error := decoders_res.end_error - checkbit_count_res.end_error := 0;;_res.level := decoders_res.level shr checkbit_count;_savetofile();;
Функция ampulation осуществляет амплитудную модуляцию битов. Входные параметры time - время которого вычисляется значение модулированного сигнала, speed - скорость передачи в канале связи, amplitude - амплитуда модулированного сигнала, carrier - несущая частота, coder - тип кодирования, capacity - разрядность кода, приходящего с кодера. Возвращаемое значение - удачное (true), неудачное (false) завершение операции.
function ampulation;
var:real;:Cardinal;:byte;:= 1 / speed;:= trunc(time / bitlen);mod_res.n_discret <> (whole div capacity) then_res.n_discret := whole div capacity;not coders.coder_readfromfile(mod_res.n_discret, coder) then:= false;;;;:= getbitfromint(code_res.code, capacity - whole mod capacity - 1);_res.amplitude := bit * amplitude * sin(2 * PI * carrier * time);:= true;;
Функция nonulation реализует режим без модуляции. Входные параметры time - время которого вычисляется значение сигнала, speed - скорость передачи в канале связи, amplitude - амплитуда сигнала, coder - тип кодирования, capacity - разрядность кода, прих