Демонстрационный пример

Демонстрационная программа для 16-ти разрядной версии, показывающая интегральный пример использования дополнительных процедур и позволяющая осуществить кодирование данных несистематическим сверточным кодером с R=1/2. Аналогичный пример для 32 разрядной версии приведен в электронном приложении.

Несистематический сверточный кодер (171,133)

program KodDemo;
{$F+,R+}
uses StrBit16;
var NameIs, NameRez : String;
FIn, FOut : PBitFile;
Reg1, Reg2, RegCoder: PStr_bit;
i : integer; PrBit : byte;
begin
Writeln('Пpогpамма генерации кодированного сигнала СК с R=1/2');
write('Введите имя файла c обрабатываемыми данными : ');
readln(NameIs);
Write('Имя файла результата: '); Readln(NameRez);
FIn := New(PBitFile, Init(8192,4096)); {Выделение памяти}
FOut := New(PBitFile,Init(8192,4096)); {Выделение памяти}
FIn^. OpenBitFile (NameIs, btOpenRead); {Открытие файла}
FOut^.OpenBitFile(NameRez, btCreate);
{ Задание регистров СК с R=1/2 }
Reg1 := New(PStr_Bit,Init(7)); Reg1^.Init_Sim('1111001');
Reg2 := New(PStr_Bit,Init(7)); Reg2^.Init_Sim('1011011');
RegCoder := New(PStr_Bit,Init(7)); RegCoder^.Init_1;
PrBit := Fin^.ReadBit;
while PrBit < 2 do begin
RegCoder^.BitDisplase(PrBit);
FOut^.WriteBit( RegCoder^.ModReg(Reg1, 0) );
FOut^.WriteBit( RegCoder^.ModReg(Reg2, 0) );
PrBit := Fin^.ReadBit;
end;
FIn^.CloseBitFile; {Закрытие обрабатываемых файлов}
FOut^.CloseBitFile;
Dispose(FIn,Done); Dispose(FOut,Done); {Освобождение памяти}
Dispose(Reg1,Done); Dispose(Reg2,Done);
writeln('конец обpаботки');
end.

Обратите внимание на метод организации цикла последовательного чтения бит файла с помощью цикла While,   позволяющего выполнить обработку всего объема данных файла и одновременно отследить правильность считывания данных с носителя.

Битовая переменная RegCoder  имитирует работу регистра сдвига. Процедура BitDisplase  обеспечивает сдвиг данных в регистре, а процедура ModReg  вычисляет результат сложения по модулю 2 бит данных, находящихся в регистре на позициях, заданных битовыми переменными Reg1  и Reg2.