2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Реадизация свёрточного кодера
Сообщение03.11.2011, 16:47 
Аватара пользователя
Здравствуйте!

Передо мной стоит задачка, реализовать свёрточный кодер.(самый обычный кодер из стандарта 802.11.а)

Дано:

Функциональная схема:
Изображение

Два образующий поленома: $g_{0} = 133_{8}, g_{1} = 171_{8}$

Темп кодирования:$ R = 1/2$

Разрядность: $k = 7$


Хочу реализовать это на СИ.

У меня есть поток бит, нужно получить из них кодированную последовательность.

Помогите пожалуйста ссылками, или кодом(если доводилось встречать такое). Сам конечно-же искал, то ничего полезного не обнаружил.

 
 
 
 Re: Реадизация свёрточного кодера
Сообщение04.11.2011, 10:40 
Аватара пользователя
Кажется нашёл то что мну нужно написанное на языке Паскаль(если не ошибаюсь). Помогите перевести в си цикл while :)


код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
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.



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

 
 
 
 Re: Реадизация свёрточного кодера
Сообщение04.11.2011, 12:29 
Аватара пользователя
Всё почти разобрался, только вот что делают эти две строчки?

Используется синтаксис Pascal
 FOut^.WriteBit( RegCoder^.ModReg(Reg1, 0) );
  FOut^.WriteBit( RegCoder^.ModReg(Reg2, 0) );

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group