Разработка программного имитатора цифрового канала связи с применением помехоустойчивого кодирования

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

одящего с кодера. Возвращаемое значение - удачное (true), неудачное (false) завершение операции.

 

function nonulation;

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;:= true;;

 

Функция frequlation осуществляет частотную модуляцию битов. Входные параметры time - время которого вычисляется значение модулированного сигнала, speed - скорость передачи в канале связи, amplitude - амплитуда модулированного сигнала, carrier1, carrier2- две частоты модуляции, coder - тип кодирования, capacity - разрядность кода, приходящего с кодера. Возвращаемое значение - удачное (true), неудачное (false) завершение операции.

 

function frequlation;

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);bit = 1 then_res.amplitude := amplitude * sin(2 * PI * carrier2 *

(time - gl.last_time) + gl.last_phase);.last_phase := 2 * PI * carrier2 *

(time - gl.last_time) + gl.last_phase;.last_time := time;else_res.amplitude := amplitude * sin(2 * PI * carrier1 *

(time - gl.last_time) + gl.last_phase);.last_phase := 2 * PI * carrier1 *

(time - gl.last_time) + gl.last_phase;.last_time := time;;

Result := true;;

 

Функция amdemod осуществляет детектирование амплитудно-модулированного сигнала. Входные параметры: isignal - массив дискретов модулированного сигнала. osignal - массив дискретов демодулированного сигнала, N - количество дискретов, dfreq частота дискретизации, freq_cut - частота среза.

 

procedure amdemod;(isignal, N, osignal, tailcov, dfreq, freq_cut);(osignal, length(tailcov2), tailcov2);:= Copy(tailcov);(detecter_propertion.gain, osignal, N);;

Функция fmdemod осуществляет детектирование частотно-модулированного сигнала. Входные параметры: isignal - массив дискретов модулированного сигнала. osignal - массив дискретов демодулированного сигнала, N - количество дискретов, dfreq частота дискретизации, freq_cut1, freq_cut2 - частоты модуляции.

 

procedure fmdemod;(isignal, N, osignal, tailcov3, dfreq, freq_cut1, freq_cut2);(osignal, min(length(tailcov4), N), tailcov4);:= Copy(tailcov3);(osignal, osignal, N, dfreq, detecter_propertion.lpfdetectfreq);;

 

Функция detect осуществляет детектирование демодулированного сигнала. Входные параметры beforedetect - массив дискретов демодулированного сигнала, afterdetect - массив детектированных битов, detecttime - модельное время детектирования, detectlevel - уровень детектирования, bpsec - скорость передачи в канале, condunit - период дискретизации, st - текущее модельное время, capacity - разрядность кода, inv - инвертировать биты.

 

procedure detect;,:real;

N,,,:AlglibInteger;

begin:= trunc(detecttime * bpsec);:= detecttime - N / bpsec;(afterdetect, N);:= st - t;:= 1 / bpsec;:= 0;:= 0;j 0.5 * i theninv then[j] := 0[j] := 1;inv then[j] := 1[j] := 0;;_res.code := (Int64(detect_res.code) or (Int64(afterdetect[j]) shl (capacity - bcnt - 1)));bcnt = capacity - 1 then:= 0;_savetofile;(detect_res.code);_res.code := 0;else(bcnt);

inc(j);;;

 

Функция demodcode осуществляет демодулирование и детектирование модулированного сигнала. Входные параметры detect_cnt - количество детектируемых, за одну итерацию битов, condunit -период дискретизации. Возвращаемое значение - удачное (true), неудачное (false) завершение операции.

 

function demodcode;

var:TReal1DArray;:TInteger1DArray;,_discret :AlglibInteger;:boolean;,:real;:Boolean;_init;:= 0;:= detect_cnt;N * condunit < 1 / channel_propertion.speed then:= ceil(1 / (channel_propertion.speed * condunit));_init;_deletefile;(beforedetect, N);true don_discret := 0 to N - 1 domodulator_propertion.nmodulator of

: readflag := ampulation(t, channel_propertion.speed, modulator_propertion.mamplitude,_propertion.mfrequency,_propertion.ncoder + 1, capacity);

: readflag := frequlation(t, channel_propertion.speed, modulator_propertion.mamplitude,_propertion.mfrequency, modulator_propertion.mfrequency2,_propertion.ncoder + 1, capacity);

: readflag := nonulation(t, channel_propertion.speed, modulator_propertion.mamplitude,_propertion.ncoder + 1, capacity);readflag := true;;readflag then:= white_noise(noise_propertion.mean, noise_propertion.stddev);[n_discret] := mod_res.amplitude + res2;:= n_discret;;;:= t + condunit;;N = 0 then;modulator_propertion.nmodulator of

:(beforedetect, beforedetect, N, 1 / condunit, detecter_propertion.lpfdetectfreq);:= false;;

:(beforedetect, beforedetect, N, 1 / condunit,_propertion.mfrequency, modulator_propertion.mfrequency2);:= modulator_propertion.mfrequency < modulator_propertion.mfrequency2;;

::= false;:= false;;(beforedetect, afterdetect, condunit * N,_propertion.detectlevel * modulator_propertion.mamplitude,_propertion.speed, condunit, t, capacity, inv);not readflag then;

end;:= readflag;;

 

Функция nlineartf осуществляет моделирование прохождение сигнала через нелинейный элемент. Входные параметры: isignal - массив дискретов входного сигнала, osignal - массив дискретов выходного сигнала, N - количество дискретов.

 

procedure nlineartf;:AlglibInteger;:= 0;(osignal, N);i svolt) then[i] := isignal[i] - svoltif (isignal[i] < -svolt) then[i] := -(isignal[i] + svolt)[i] := 0;(i);;

end;

 

Функция amdetect осуществляет демодулирование амплитудно-модулированного сигнала. Входные параметры: isignal - массив дискретов модулированного сигнала, osignal - массив дискретов демодулированного сигнала, N - количество дискретов, dfreq - частота дискретизации, freq_m - частота среза.

 

procedure amdetect;(isignal, N, osignal, 0.2);(1.0, osignal, 2 * N - 1, osignal, dfreq, freq_m, 1);:= Copy(osignal, N, N - 1);(osignal, N);

end;

 

Функция fmdetect осуществляет демодулирование частотно-модулированного сигнала. Входные параметры: isignal - массив дискретов модулированного сигнала, osignal - массив дискретов демодулированного сигнала, N - количество дискретов, dfreq - частота дискретизации, freq_m1, freq_m2 - частоты модуляции.

procedure fmdetect;(freq_m1 > freq_m2) then(1.0, isignal, 2 * N - 1, osignal, dfreq, (freq_m1 + freq_m2) / 2, 10)(1.0, isignal, 2 * N - 1, osignal, dfreq, (freq_m1 + freq_m2) / 2, 10);:= Copy(osignal, N, N - 1);(osignal, N);;

 

Функция amplifier осуществляет усиление сигнала. Входные параметры: k - коэффициент усиления, signal - массив дискретов модулированного сигнала, osignal - массив дискретов демодулированного сигнала, N - количество дискретов.

 

procedure amplifier;j:AlglibInteger;:= 0;j < N do[j] := k * signal[j];(j);

end;

end;

&nbs