\doxysection{Convolutional coding} \label{group__conv}\index{Convolutional coding@{Convolutional coding}} \doxysubsection*{Files} \begin{DoxyCompactItemize} \item file \textbf{ conv.\+h} \begin{DoxyCompactList}\small\item\em Osmocom GMR-\/1 convolutional coding header. \end{DoxyCompactList}\item file \textbf{ conv.\+c} \begin{DoxyCompactList}\small\item\em Osmocom GMR-\/1 convolutional coding implementation. \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsection*{Enumerations} \begin{DoxyCompactItemize} \item \mbox{\label{group__conv_gaf0fd132530ce2b394bad052c7242590e}} enum {\bfseries osmo\+\_\+conv\+\_\+term} \end{DoxyCompactItemize} \doxysubsection*{Functions} \begin{DoxyCompactItemize} \item \mbox{\label{group__conv_gaa1382de36811cc10f218b877cad5c2d5}} int \textbf{ osmo\+\_\+conv\+\_\+get\+\_\+input\+\_\+length} (const struct \textbf{ osmo\+\_\+conv\+\_\+code} $\ast$code, int len) \item \mbox{\label{group__conv_ga278e64b79e6b589c835a0c401fde3660}} int \textbf{ osmo\+\_\+conv\+\_\+get\+\_\+output\+\_\+length} (const struct \textbf{ osmo\+\_\+conv\+\_\+code} $\ast$code, int len) \item \mbox{\label{group__conv_ga729a0ee108fb0f830aef9652acb1f998}} void \textbf{ osmo\+\_\+conv\+\_\+encode\+\_\+init} (struct \textbf{ osmo\+\_\+conv\+\_\+encoder} $\ast$encoder, const struct \textbf{ osmo\+\_\+conv\+\_\+code} $\ast$code) \item \mbox{\label{group__conv_gacd456a6e66cd06364000d83b9d4a9c5f}} void \textbf{ osmo\+\_\+conv\+\_\+encode\+\_\+load\+\_\+state} (struct \textbf{ osmo\+\_\+conv\+\_\+encoder} $\ast$encoder, const \textbf{ ubit\+\_\+t} $\ast$input) \item \mbox{\label{group__conv_ga15d88c910f3072194278d42582162872}} int \textbf{ osmo\+\_\+conv\+\_\+encode\+\_\+raw} (struct \textbf{ osmo\+\_\+conv\+\_\+encoder} $\ast$encoder, const \textbf{ ubit\+\_\+t} $\ast$input, \textbf{ ubit\+\_\+t} $\ast$output, int n) \item \mbox{\label{group__conv_gac54f3af7b08df20b530694ee3a660918}} int \textbf{ osmo\+\_\+conv\+\_\+encode\+\_\+flush} (struct \textbf{ osmo\+\_\+conv\+\_\+encoder} $\ast$encoder, \textbf{ ubit\+\_\+t} $\ast$output) \item \mbox{\label{group__conv_ga928c04825469cc3481be1717d69534d6}} int \textbf{ osmo\+\_\+conv\+\_\+encode} (const struct \textbf{ osmo\+\_\+conv\+\_\+code} $\ast$code, const \textbf{ ubit\+\_\+t} $\ast$input, \textbf{ ubit\+\_\+t} $\ast$output) \item \mbox{\label{group__conv_ga8d62497e9411049141f699d67068b1ab}} void \textbf{ osmo\+\_\+conv\+\_\+decode\+\_\+init} (struct \textbf{ osmo\+\_\+conv\+\_\+decoder} $\ast$decoder, const struct \textbf{ osmo\+\_\+conv\+\_\+code} $\ast$code, int len, int start\+\_\+state) \item \mbox{\label{group__conv_ga5b03fc1ff68f02690c1e6536f4a44562}} void \textbf{ osmo\+\_\+conv\+\_\+decode\+\_\+reset} (struct \textbf{ osmo\+\_\+conv\+\_\+decoder} $\ast$decoder, int start\+\_\+state) \item \mbox{\label{group__conv_ga118b5aec8b6ad0eb45f0cb2bc96525af}} void \textbf{ osmo\+\_\+conv\+\_\+decode\+\_\+rewind} (struct \textbf{ osmo\+\_\+conv\+\_\+decoder} $\ast$decoder) \item \mbox{\label{group__conv_gac5eaa9e63f2f78c65070dfdbd8f8cd88}} void \textbf{ osmo\+\_\+conv\+\_\+decode\+\_\+deinit} (struct \textbf{ osmo\+\_\+conv\+\_\+decoder} $\ast$decoder) \item \mbox{\label{group__conv_ga8c0b5474a256cc21ba605bf2594468bc}} int \textbf{ osmo\+\_\+conv\+\_\+decode\+\_\+scan} (struct \textbf{ osmo\+\_\+conv\+\_\+decoder} $\ast$decoder, const \textbf{ sbit\+\_\+t} $\ast$input, int n) \item \mbox{\label{group__conv_gad6eea080a67fdcecfc6d108d07d37c3c}} int \textbf{ osmo\+\_\+conv\+\_\+decode\+\_\+flush} (struct \textbf{ osmo\+\_\+conv\+\_\+decoder} $\ast$decoder, const \textbf{ sbit\+\_\+t} $\ast$input) \item \mbox{\label{group__conv_gad2d7bb7224a7362c048f3c147c09c106}} int \textbf{ osmo\+\_\+conv\+\_\+decode\+\_\+get\+\_\+best\+\_\+end\+\_\+state} (struct \textbf{ osmo\+\_\+conv\+\_\+decoder} $\ast$decoder) \item \mbox{\label{group__conv_ga123033117643f7c2ea610cbc21cfeeb7}} int \textbf{ osmo\+\_\+conv\+\_\+decode\+\_\+get\+\_\+output} (struct \textbf{ osmo\+\_\+conv\+\_\+decoder} $\ast$decoder, \textbf{ ubit\+\_\+t} $\ast$output, int has\+\_\+flush, int end\+\_\+state) \item \mbox{\label{group__conv_ga8eb8fcdfe0d49890927a6ce7bfc921dc}} int \textbf{ osmo\+\_\+conv\+\_\+decode} (const struct \textbf{ osmo\+\_\+conv\+\_\+code} $\ast$code, const \textbf{ sbit\+\_\+t} $\ast$input, \textbf{ ubit\+\_\+t} $\ast$output) \item \mbox{\label{group__conv_ga609c3f0603a35f2a5c3b55ab4ef30d42}} int \textbf{ osmo\+\_\+conv\+\_\+decode\+\_\+acc} (const struct \textbf{ osmo\+\_\+conv\+\_\+code} $\ast$code, const \textbf{ sbit\+\_\+t} $\ast$input, \textbf{ ubit\+\_\+t} $\ast$output) \end{DoxyCompactItemize} \doxysubsection*{Variables} \begin{DoxyCompactItemize} \item \mbox{\label{group__conv_ggaf0fd132530ce2b394bad052c7242590ea255ffa13977bc3a7513d90485123e7c2}} \textbf{ CONV\+\_\+\+TERM\+\_\+\+FLUSH} \item \mbox{\label{group__conv_ggaf0fd132530ce2b394bad052c7242590eadd3d6c82aa9a0be1f38479f89d6c1b04}} \textbf{ CONV\+\_\+\+TERM\+\_\+\+TRUNCATION} \item \mbox{\label{group__conv_ggaf0fd132530ce2b394bad052c7242590ea63bb13a152bdb0b61594e10aabe990c1}} \textbf{ CONV\+\_\+\+TERM\+\_\+\+TAIL\+\_\+\+BITING} \item \mbox{\label{group__conv_gad9e7ba139d8b88117361ce2c069b3ac1}} const struct \textbf{ osmo\+\_\+conv\+\_\+code} {\bfseries gmr1\+\_\+conv\+\_\+k5\+\_\+12} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 5, rate 1/2 convolutional code. \end{DoxyCompactList}\item \mbox{\label{group__conv_gae46510aefce08ef3158790186b00a404}} const struct \textbf{ osmo\+\_\+conv\+\_\+code} {\bfseries gmr1\+\_\+conv\+\_\+k5\+\_\+13} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 5, rate 1/3 convolutional code. \end{DoxyCompactList}\item \mbox{\label{group__conv_gad0dab5050f72518f948d10b78ee21b2d}} const struct \textbf{ osmo\+\_\+conv\+\_\+code} {\bfseries gmr1\+\_\+conv\+\_\+k5\+\_\+14} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 5, rate 1/4 convolutional code. \end{DoxyCompactList}\item \mbox{\label{group__conv_ga70b8d0dc1e500ff3a1986315e6551a27}} const struct \textbf{ osmo\+\_\+conv\+\_\+code} {\bfseries gmr1\+\_\+conv\+\_\+k5\+\_\+15} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 5, rate 1/5 convolutional code. \end{DoxyCompactList}\item \mbox{\label{group__conv_ga6e7732168c9ecb6ad0b14ed8001c4588}} const struct \textbf{ osmo\+\_\+conv\+\_\+code} {\bfseries gmr1\+\_\+conv\+\_\+k6\+\_\+14} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 6, rate 1/4 convolutional code. \end{DoxyCompactList}\item \mbox{\label{group__conv_gaa9043b27694a4c4438b18f7cd60950cd}} const struct \textbf{ osmo\+\_\+conv\+\_\+code} {\bfseries gmr1\+\_\+conv\+\_\+k9\+\_\+12} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 9, rate 1/2 convolutional code. \end{DoxyCompactList}\item \mbox{\label{group__conv_ga647389b5ecf36c9770b4ecfd57c11fe0}} const struct \textbf{ osmo\+\_\+conv\+\_\+code} {\bfseries gmr1\+\_\+conv\+\_\+k9\+\_\+13} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 9, rate 1/3 convolutional code. \end{DoxyCompactList}\item \mbox{\label{group__conv_ga0aaad5b737b08f90b906fbd369df8ccc}} const struct \textbf{ osmo\+\_\+conv\+\_\+code} {\bfseries gmr1\+\_\+conv\+\_\+k9\+\_\+14} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 9, rate 1/4 convolutional code. \end{DoxyCompactList}\item \mbox{\label{group__conv_ga622aa845f1ef3258a750b0da2df27d13}} const struct \textbf{ osmo\+\_\+conv\+\_\+code} {\bfseries gmr1\+\_\+conv\+\_\+tch3} \begin{DoxyCompactList}\small\item\em GMR-\/1 TCH3 speech tail-\/biting convolutional code. \end{DoxyCompactList}\item const struct \textbf{ osmo\+\_\+conv\+\_\+code} \textbf{ gmr1\+\_\+conv\+\_\+k5\+\_\+12} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 5, rate 1/2 convolutional code. \end{DoxyCompactList}\item const struct \textbf{ osmo\+\_\+conv\+\_\+code} \textbf{ gmr1\+\_\+conv\+\_\+k5\+\_\+13} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 5, rate 1/3 convolutional code. \end{DoxyCompactList}\item const struct \textbf{ osmo\+\_\+conv\+\_\+code} \textbf{ gmr1\+\_\+conv\+\_\+k5\+\_\+14} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 5, rate 1/4 convolutional code. \end{DoxyCompactList}\item const struct \textbf{ osmo\+\_\+conv\+\_\+code} \textbf{ gmr1\+\_\+conv\+\_\+k5\+\_\+15} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 5, rate 1/5 convolutional code. \end{DoxyCompactList}\item const struct \textbf{ osmo\+\_\+conv\+\_\+code} \textbf{ gmr1\+\_\+conv\+\_\+k6\+\_\+14} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 6, rate 1/4 convolutional code. \end{DoxyCompactList}\item const struct \textbf{ osmo\+\_\+conv\+\_\+code} \textbf{ gmr1\+\_\+conv\+\_\+k9\+\_\+12} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 9, rate 1/2 convolutional code. \end{DoxyCompactList}\item const struct \textbf{ osmo\+\_\+conv\+\_\+code} \textbf{ gmr1\+\_\+conv\+\_\+k9\+\_\+13} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 9, rate 1/3 convolutional code. \end{DoxyCompactList}\item const struct \textbf{ osmo\+\_\+conv\+\_\+code} \textbf{ gmr1\+\_\+conv\+\_\+k9\+\_\+14} \begin{DoxyCompactList}\small\item\em GMR-\/1 constraint length 9, rate 1/4 convolutional code. \end{DoxyCompactList}\item const struct \textbf{ osmo\+\_\+conv\+\_\+code} \textbf{ gmr1\+\_\+conv\+\_\+tch3} \begin{DoxyCompactList}\small\item\em GMR-\/1 TCH3 speech tail-\/biting convolutional code. \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsection{Detailed Description} \doxysubsection{Variable Documentation} \mbox{\label{group__conv_gad9e7ba139d8b88117361ce2c069b3ac1}} \index{Convolutional coding@{Convolutional coding}!gmr1\_conv\_k5\_12@{gmr1\_conv\_k5\_12}} \index{gmr1\_conv\_k5\_12@{gmr1\_conv\_k5\_12}!Convolutional coding@{Convolutional coding}} \doxysubsubsection{gmr1\_conv\_k5\_12} {\footnotesize\ttfamily const struct \textbf{ osmo\+\_\+conv\+\_\+code} gmr1\+\_\+conv\+\_\+k5\+\_\+12} {\bfseries Initial value\+:} \begin{DoxyCode}{0} \DoxyCodeLine{= \{} \DoxyCodeLine{ .N = 2,} \DoxyCodeLine{ .K = 5,} \DoxyCodeLine{ .len = 0, } \DoxyCodeLine{ .next\_output = gmr1\_conv\_k5\_12\_next\_output,} \DoxyCodeLine{ .term = CONV\_TERM\_FLUSH, } \DoxyCodeLine{ .next\_state = gmr1\_conv\_k5\_next\_state,} \DoxyCodeLine{\}} \end{DoxyCode} GMR-\/1 constraint length 5, rate 1/2 convolutional code. \mbox{\label{group__conv_gae46510aefce08ef3158790186b00a404}} \index{Convolutional coding@{Convolutional coding}!gmr1\_conv\_k5\_13@{gmr1\_conv\_k5\_13}} \index{gmr1\_conv\_k5\_13@{gmr1\_conv\_k5\_13}!Convolutional coding@{Convolutional coding}} \doxysubsubsection{gmr1\_conv\_k5\_13} {\footnotesize\ttfamily const struct \textbf{ osmo\+\_\+conv\+\_\+code} gmr1\+\_\+conv\+\_\+k5\+\_\+13} {\bfseries Initial value\+:} \begin{DoxyCode}{0} \DoxyCodeLine{= \{} \DoxyCodeLine{ .N = 3,} \DoxyCodeLine{ .K = 5,} \DoxyCodeLine{ .len = 0, } \DoxyCodeLine{ .term = CONV\_TERM\_FLUSH, } \DoxyCodeLine{ .next\_output = gmr1\_conv\_k5\_13\_next\_output,} \DoxyCodeLine{ .next\_state = gmr1\_conv\_k5\_next\_state,} \DoxyCodeLine{\}} \end{DoxyCode} GMR-\/1 constraint length 5, rate 1/3 convolutional code. \mbox{\label{group__conv_gad0dab5050f72518f948d10b78ee21b2d}} \index{Convolutional coding@{Convolutional coding}!gmr1\_conv\_k5\_14@{gmr1\_conv\_k5\_14}} \index{gmr1\_conv\_k5\_14@{gmr1\_conv\_k5\_14}!Convolutional coding@{Convolutional coding}} \doxysubsubsection{gmr1\_conv\_k5\_14} {\footnotesize\ttfamily const struct \textbf{ osmo\+\_\+conv\+\_\+code} gmr1\+\_\+conv\+\_\+k5\+\_\+14} {\bfseries Initial value\+:} \begin{DoxyCode}{0} \DoxyCodeLine{= \{} \DoxyCodeLine{ .N = 4,} \DoxyCodeLine{ .K = 5,} \DoxyCodeLine{ .len = 0, } \DoxyCodeLine{ .term = CONV\_TERM\_FLUSH, } \DoxyCodeLine{ .next\_output = gmr1\_conv\_k5\_14\_next\_output,} \DoxyCodeLine{ .next\_state = gmr1\_conv\_k5\_next\_state,} \DoxyCodeLine{\}} \end{DoxyCode} GMR-\/1 constraint length 5, rate 1/4 convolutional code. \mbox{\label{group__conv_ga70b8d0dc1e500ff3a1986315e6551a27}} \index{Convolutional coding@{Convolutional coding}!gmr1\_conv\_k5\_15@{gmr1\_conv\_k5\_15}} \index{gmr1\_conv\_k5\_15@{gmr1\_conv\_k5\_15}!Convolutional coding@{Convolutional coding}} \doxysubsubsection{gmr1\_conv\_k5\_15} {\footnotesize\ttfamily const struct \textbf{ osmo\+\_\+conv\+\_\+code} gmr1\+\_\+conv\+\_\+k5\+\_\+15} {\bfseries Initial value\+:} \begin{DoxyCode}{0} \DoxyCodeLine{= \{} \DoxyCodeLine{ .N = 5,} \DoxyCodeLine{ .K = 5,} \DoxyCodeLine{ .len = 0, } \DoxyCodeLine{ .term = CONV\_TERM\_FLUSH, } \DoxyCodeLine{ .next\_output = gmr1\_conv\_k5\_15\_next\_output,} \DoxyCodeLine{ .next\_state = gmr1\_conv\_k5\_next\_state,} \DoxyCodeLine{\}} \end{DoxyCode} GMR-\/1 constraint length 5, rate 1/5 convolutional code. \mbox{\label{group__conv_ga6e7732168c9ecb6ad0b14ed8001c4588}} \index{Convolutional coding@{Convolutional coding}!gmr1\_conv\_k6\_14@{gmr1\_conv\_k6\_14}} \index{gmr1\_conv\_k6\_14@{gmr1\_conv\_k6\_14}!Convolutional coding@{Convolutional coding}} \doxysubsubsection{gmr1\_conv\_k6\_14} {\footnotesize\ttfamily const struct \textbf{ osmo\+\_\+conv\+\_\+code} gmr1\+\_\+conv\+\_\+k6\+\_\+14} {\bfseries Initial value\+:} \begin{DoxyCode}{0} \DoxyCodeLine{= \{} \DoxyCodeLine{ .N = 4,} \DoxyCodeLine{ .K = 6,} \DoxyCodeLine{ .len = 0, } \DoxyCodeLine{ .term = CONV\_TERM\_FLUSH, } \DoxyCodeLine{ .next\_output = gmr1\_conv\_k6\_14\_next\_output,} \DoxyCodeLine{ .next\_state = gmr1\_conv\_k6\_next\_state,} \DoxyCodeLine{\}} \end{DoxyCode} GMR-\/1 constraint length 6, rate 1/4 convolutional code. \mbox{\label{group__conv_gaa9043b27694a4c4438b18f7cd60950cd}} \index{Convolutional coding@{Convolutional coding}!gmr1\_conv\_k9\_12@{gmr1\_conv\_k9\_12}} \index{gmr1\_conv\_k9\_12@{gmr1\_conv\_k9\_12}!Convolutional coding@{Convolutional coding}} \doxysubsubsection{gmr1\_conv\_k9\_12} {\footnotesize\ttfamily const struct \textbf{ osmo\+\_\+conv\+\_\+code} gmr1\+\_\+conv\+\_\+k9\+\_\+12} {\bfseries Initial value\+:} \begin{DoxyCode}{0} \DoxyCodeLine{= \{} \DoxyCodeLine{ .N = 2,} \DoxyCodeLine{ .K = 9,} \DoxyCodeLine{ .len = 0, } \DoxyCodeLine{ .term = CONV\_TERM\_FLUSH, } \DoxyCodeLine{ .next\_output = gmr1\_conv\_k9\_12\_next\_output,} \DoxyCodeLine{ .next\_state = gmr1\_conv\_k9\_next\_state,} \DoxyCodeLine{\}} \end{DoxyCode} GMR-\/1 constraint length 9, rate 1/2 convolutional code. \mbox{\label{group__conv_ga647389b5ecf36c9770b4ecfd57c11fe0}} \index{Convolutional coding@{Convolutional coding}!gmr1\_conv\_k9\_13@{gmr1\_conv\_k9\_13}} \index{gmr1\_conv\_k9\_13@{gmr1\_conv\_k9\_13}!Convolutional coding@{Convolutional coding}} \doxysubsubsection{gmr1\_conv\_k9\_13} {\footnotesize\ttfamily const struct \textbf{ osmo\+\_\+conv\+\_\+code} gmr1\+\_\+conv\+\_\+k9\+\_\+13} {\bfseries Initial value\+:} \begin{DoxyCode}{0} \DoxyCodeLine{= \{} \DoxyCodeLine{ .N = 3,} \DoxyCodeLine{ .K = 9,} \DoxyCodeLine{ .len = 0, } \DoxyCodeLine{ .term = CONV\_TERM\_FLUSH, } \DoxyCodeLine{ .next\_output = gmr1\_conv\_k9\_13\_next\_output,} \DoxyCodeLine{ .next\_state = gmr1\_conv\_k9\_next\_state,} \DoxyCodeLine{\}} \end{DoxyCode} GMR-\/1 constraint length 9, rate 1/3 convolutional code. \mbox{\label{group__conv_ga0aaad5b737b08f90b906fbd369df8ccc}} \index{Convolutional coding@{Convolutional coding}!gmr1\_conv\_k9\_14@{gmr1\_conv\_k9\_14}} \index{gmr1\_conv\_k9\_14@{gmr1\_conv\_k9\_14}!Convolutional coding@{Convolutional coding}} \doxysubsubsection{gmr1\_conv\_k9\_14} {\footnotesize\ttfamily const struct \textbf{ osmo\+\_\+conv\+\_\+code} gmr1\+\_\+conv\+\_\+k9\+\_\+14} {\bfseries Initial value\+:} \begin{DoxyCode}{0} \DoxyCodeLine{= \{} \DoxyCodeLine{ .N = 4,} \DoxyCodeLine{ .K = 9,} \DoxyCodeLine{ .len = 0, } \DoxyCodeLine{ .term = CONV\_TERM\_FLUSH, } \DoxyCodeLine{ .next\_output = gmr1\_conv\_k9\_14\_next\_output,} \DoxyCodeLine{ .next\_state = gmr1\_conv\_k9\_next\_state,} \DoxyCodeLine{\}} \end{DoxyCode} GMR-\/1 constraint length 9, rate 1/4 convolutional code. \mbox{\label{group__conv_ga622aa845f1ef3258a750b0da2df27d13}} \index{Convolutional coding@{Convolutional coding}!gmr1\_conv\_tch3@{gmr1\_conv\_tch3}} \index{gmr1\_conv\_tch3@{gmr1\_conv\_tch3}!Convolutional coding@{Convolutional coding}} \doxysubsubsection{gmr1\_conv\_tch3} {\footnotesize\ttfamily const struct \textbf{ osmo\+\_\+conv\+\_\+code} gmr1\+\_\+conv\+\_\+tch3} {\bfseries Initial value\+:} \begin{DoxyCode}{0} \DoxyCodeLine{= \{} \DoxyCodeLine{ .N = 2,} \DoxyCodeLine{ .K = 7,} \DoxyCodeLine{ .len = 0, } \DoxyCodeLine{ .term = CONV\_TERM\_TAIL\_BITING,} \DoxyCodeLine{ .next\_output = gmr1\_conv\_tch3\_next\_output,} \DoxyCodeLine{ .next\_state = gmr1\_conv\_tch3\_next\_state,} \DoxyCodeLine{\}} \end{DoxyCode} GMR-\/1 TCH3 speech tail-\/biting convolutional code.