Разработка программного имитатора цифрового канала связи с применением помехоустойчивого кодирования
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
одящего с кодера. Возвращаемое значение - удачное (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