free5GRAN  V1.0
transport_channel.h
Go to the documentation of this file.
1 /*
2  * Copyright 2020 Telecom Paris
3 
4  Licensed under the Apache License, Version 2.0 (the "License");
5  you may not use this file except in compliance with the License.
6  You may obtain a copy of the License at
7 
8  http://www.apache.org/licenses/LICENSE-2.0
9 
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15  */
16 
17 #include <vector>
18 #include <complex>
19 #include "../../variables/common_structures/common_structures.h"
20 #include "../../asn1c/nr_rrc/BCCH-DL-SCH-Message.h"
21 using namespace std;
22 
23 namespace free5GRAN {
24  namespace phy {
25  namespace transport_channel {
26 
27  int compute_N_polar_code(int E, int K, int nmax);
28 
29  void rate_recover(int * input_bits, int * output_bits, int i_bil, int E, int N, int K);
30 
31  void polar_decode(int * input_bits, int * output_bits, int N, int K, int nmax, int i_il, int n_pc, int n_wm_pc, int E);
32 
33  void crc_validate(int * input_bits, int * crc_polynom, int * remainder, int length_input, int length_crc);
34 
35  void compute_crc(int * input_bits, int * crc_polynom, int * remainder, int length_input, int length_crc);
36 
37  void compute_ldpc_base_graph(int A, float R, int &graph);
38 
39  void compute_transport_block_size(int n_re, float R, int mod_order, int num_layers, int nrb, int &tbs);
40 
41  void compute_Zc_dl_sch(int kb, float k_p, int &Zc, int &i_ls);
42 
43  void compute_code_block_segmentation_info_ldpc(int graph, int B, int &Zc, int &K, int &i_ls, int &L, int &C, int &N, int &K_p);
44 
45  void rate_recover_ldpc(int *input_bits, int N, int i_lbrm, int E, int id_rv, int mod_order, int C, int Zc, int graph, int K, int K_p, int *output_sequence);
46 
47  void rate_recover_ldpc(double *input_bits, int N, int i_lbrm, int E, int id_rv, int mod_order, int C, int Zc, int graph, int K, int K_p, double *output_sequence);
48 
49  void compute_circular_permutation_matrix(int size, int offset, int **matrix);
50 
51  void ldpc_decode_one_bit(vector<vector<int>> R, double *soft_bits, int i, double &new_bit);
52 
53  void compute_H_matrix_ldpc(int Zc, int graph, int i_ls, vector<vector<int>> &matrix, int &size_i, int &size_j);
54 
55  void ldpc_decode(double *input_bits, int N, int Zc, int graph, int K, int i_ls, int*output_sequence);
56 
57  void decode_bch(int *bch_bits, bool &crc_validated, int*mib_bits, int pci);
58 
59  void decode_dci(int *dci_bits, int E, int K, int *rnti, bool &validated, int * decoded_dci_bits);
60 
61  vector<int> decode_dl_sch(double *dl_sch_bits, int n_re, float R, int nrb, int E, bool &validated, free5GRAN::dci_1_0_si_rnti dci_1_0_si_rnti);
62 
63  }
64  }
65 }
void compute_H_matrix_ldpc(int Zc, int graph, int i_ls, vector< vector< int >> &matrix, int &size_i, int &size_j)
int compute_N_polar_code(int E, int K, int nmax)
Definition: phy.h:27
void compute_circular_permutation_matrix(int size, int offset, int **matrix)
void rate_recover_ldpc(double *input_bits, int N, int i_lbrm, int E, int id_rv, int mod_order, int C, int Zc, int graph, int K, int K_p, double *output_sequence)
void ldpc_decode(double *input_bits, int N, int Zc, int graph, int K, int i_ls, int *output_sequence)
void compute_ldpc_base_graph(int A, float R, int &graph)
void compute_code_block_segmentation_info_ldpc(int graph, int B, int &Zc, int &K, int &i_ls, int &L, int &C, int &N, int &K_p)
vector< int > decode_dl_sch(double *dl_sch_bits, int n_re, float R, int nrb, int E, bool &validated, free5GRAN::dci_1_0_si_rnti dci_1_0_si_rnti)
void rate_recover(int *input_bits, int *output_bits, int i_bil, int E, int N, int K)
void polar_decode(int *input_bits, int *output_bits, int N, int K, int nmax, int i_il, int n_pc, int n_wm_pc, int E)
void crc_validate(int *input_bits, int *crc_polynom, int *remainder, int length_input, int length_crc)
void compute_transport_block_size(int n_re, float R, int mod_order, int num_layers, int nrb, int &tbs)
void decode_dci(int *dci_bits, int E, int K, int *rnti, bool &validated, int *decoded_dci_bits)
void compute_Zc_dl_sch(int kb, float k_p, int &Zc, int &i_ls)
void ldpc_decode_one_bit(vector< vector< int >> R, double *soft_bits, int i, double &new_bit)
void compute_crc(int *input_bits, int *crc_polynom, int *remainder, int length_input, int length_crc)
void decode_bch(int *bch_bits, bool &crc_validated, int *mib_bits, int pci)