From e8dc62f65fabfd4d3170dd8f0c29257818911e4d Mon Sep 17 00:00:00 2001 From: ismagom Date: Mon, 12 Oct 2015 23:21:59 +0200 Subject: [PATCH] Added decoder sse header --- matlab/common/read_int16.m | 18 ++++ srslte/include/srslte/fec/turbodecoder_sse.h | 102 +++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 matlab/common/read_int16.m create mode 100644 srslte/include/srslte/fec/turbodecoder_sse.h diff --git a/matlab/common/read_int16.m b/matlab/common/read_int16.m new file mode 100644 index 000000000..71e875d7c --- /dev/null +++ b/matlab/common/read_int16.m @@ -0,0 +1,18 @@ +function [ out ] = read_real( filename, count ) +%READ_COMPLEX Summary of this function goes here +% Detailed explanation goes here + + [tidin msg]=fopen(filename,'r'); + if (tidin==-1) + fprintf('error opening %s: %s\n',filename, msg); + out=[]; + return + end + + if (nargin==1) + count=inf; + end + + out=fread(tidin,count,'int16'); +end + diff --git a/srslte/include/srslte/fec/turbodecoder_sse.h b/srslte/include/srslte/fec/turbodecoder_sse.h new file mode 100644 index 000000000..6707e7968 --- /dev/null +++ b/srslte/include/srslte/fec/turbodecoder_sse.h @@ -0,0 +1,102 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2015 The srsLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the srsLTE library. + * + * srsLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * srsLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * A copy of the GNU Affero General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +/********************************************************************************************** + * File: turbodecoder.h + * + * Description: Turbo Decoder. + * Parallel Concatenated Convolutional Code (PCCC) with two 8-state constituent + * encoders and one turbo code internal interleaver. The coding rate of turbo + * encoder is 1/3. + * MAP_GEN is the MAX-LOG-MAP generic implementation of the decoder. + * + * Reference: 3GPP TS 36.212 version 10.0.0 Release 10 Sec. 5.1.3.2 + *********************************************************************************************/ + +#ifndef TURBODECODER_SSE_ +#define TURBODECODER_SSE_ + +#include "srslte/config.h" +#include "srslte/fec/tc_interl.h" +#include "srslte/fec/cbsegm.h" + +#define SRSLTE_TCOD_RATE 3 +#define SRSLTE_TCOD_TOTALTAIL 12 + +#define SRSLTE_TCOD_MAX_LEN_CB 6144 +#define SRSLTE_TCOD_MAX_LEN_CODED (SRSLTE_TCOD_RATE*SRSLTE_TCOD_MAX_LEN_CB+SRSLTE_TCOD_TOTALTAIL) + +typedef struct SRSLTE_API { + int max_long_cb; + int16_t *alpha; + int16_t *branch; +} srslte_map_gen_t; + +typedef struct SRSLTE_API { + int max_long_cb; + + srslte_map_gen_t dec; + + int16_t *app1; + int16_t *app2; + int16_t *ext1; + int16_t *ext2; + int16_t *syst; + int16_t *parity0; + int16_t *parity1; + + int current_cbidx; + srslte_tc_interl_t interleaver[SRSLTE_NOF_TC_CB_SIZES]; + int n_iter; +} srslte_tdec_sse_t; + +SRSLTE_API int srslte_tdec_sse_init(srslte_tdec_sse_t * h, + uint32_t max_long_cb); + +SRSLTE_API void srslte_tdec_sse_free(srslte_tdec_sse_t * h); + +SRSLTE_API int srslte_tdec_sse_reset(srslte_tdec_sse_t * h, uint32_t long_cb); + +SRSLTE_API void srslte_tdec_sse_iteration(srslte_tdec_sse_t * h, + int16_t * input, + uint32_t long_cb); + +SRSLTE_API void srslte_tdec_sse_decision(srslte_tdec_sse_t * h, + uint8_t *output, + uint32_t long_cb); + +SRSLTE_API void srslte_tdec_sse_decision_byte(srslte_tdec_sse_t * h, + uint8_t *output, + uint32_t long_cb); + +SRSLTE_API int srslte_tdec_sse_run_all(srslte_tdec_sse_t * h, + int16_t * input, + uint8_t *output, + uint32_t nof_iterations, + uint32_t long_cb); + +#endif