📄 turbo_code_log_map.h
字号:
#ifndef TRUBO_CODE_LOG_MAP_H
#define TRUBO_CODE_LOG_MAP_H
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
/*==================================================*/
/* parameters for simulation */
#define N_ITERATION 6 /* number of iteration times */
/*==================================================*/
/* parameters for the code generator */
#define COLUMN_OF_G 4
#define G_ROW_1 13
#define G_ROW_2 15
/*==================================================*/
/*==================================================*/
#define FRAME_LENGTH 65536
/* code generator */
typedef struct
{
int N_num_row;
int K_num_col;
int *g_matrix;
} TURBO_G;
/* trellis */
typedef struct
{
int *mx_nextout;
int *mx_nextstat;
int *mx_lastout;
int *mx_laststat;
} TURBO_TRELLIS;
/*==================================================*/
/* A number used in Log-MAP decoder */
#define INFTY 1E20
/*==================================================*/
/* global memory */
int *index_randomintlvr; /* index of random intleaver */
TURBO_G turbo_g; /* code generator struct */
TURBO_TRELLIS turbo_trellis; /* turbo_trellis struct */
float rate_coding; /* the rate of coding */
/*==================================================*/
/*==================================================*/
/* interfaces to outside */
void TurboCoding(int *turbocoding_source, float *coded_source,
int *source_length);
void TurboDecoding(float *received_for_decode, int *turbo_decoded,
int *received_length, float EbN0dB);
/* Turbo码初始化函数 */
void TurboCodingInit();
/* 释放初始化时的内存 */
void TurboCodingRelease();
/*==================================================*/
/*==================================================*/
/* functions used inside */
int gen_g_matrix(int k_column, int g_row1, int g_row2, int *mx_g_turbo);
void gen_trellis();
void int2bin(int intstat, int *tempstat, int length);
int bin2int(int *binseq, int length);
void gen_source(int *data, int length);
void AWGN(float *send, float *r, float sigma, int totallength);
void mgrns(double mean,double sigma,double seed,int n,double *a);
float random_turbo();
void gen_rand_index(int length);
void randominterleaver_int(int *data_unintlvr, int *interleaverddata, int length);
void randominterleaver_float(float *data_unintlvr, float *interleaverddata, int length);
void random_deinterlvr_int(int *data_unintlvr, int *interleaverddata, int length);
void random_deinterlvr_float(float *data_unintlvr, float *interleaverddata, int length);
void encoderm_turbo(int *source, int *send_turbo, int len_info);
void rsc_encode(int *source, int *rsc, int terminated, int len_info);
int encode_bit(int inbit, int *stat);
void demultiplex(float *rec_turbo, int len_info, float *yk_turbo);
void Log_MAP_decoder(float *recs_turbo, float *La_turbo, int terminated, float *LLR_all_turbo, int len_total);
float E_algorithm(float x, float y);
float E_algorithm_seq(float *data_seq, int length);
void decision(float *LLR_seq, int length, int *output);
/*==================================================*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -