資源簡介
Turbo編譯碼程序c、c++,包含編碼、譯碼兩個.cpp,可以在VS中Linux下加入工程中使用,也可以加在Matlab中使用

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?“mex.h“
#define?COLUMN_OF_G 4 /*?生成陣列數?*/
#define?N_ITERATION 8 /*?譯碼疊代次數?*/
/*?定義數據結構?*/
/*?生成陣結構?*/
typedef?struct
{
int?N_num_row; /*?生成陣行數?*/
int?K_num_col; /*?生成陣列數?*/
int?*g_matrix; /*?生成陣首址?*/
}?TURBO_G;
/*?Trellis結構?*/
/*
mx_nextout(mx_lastout)為后(前)向輸出數組首址:
行數:狀態數?列數:4
每行第一列和第三列為后(前)向的輸入(1或-1)第二列和第四列為與之對應的輸出(1或-1).
mx_nextstat(mx_laststat)為后(前)向狀態數組首址:
行數:狀態數?列數:2
各列表示輸入為1(0)時對應的后(前)向狀態.
*/
typedef?struct
{
int?*mx_nextout; /*?后向輸出矩陣?*/
int?*mx_nextstat; /*?后向狀態矩陣?*/
int?*mx_lastout; /*?前向輸出矩陣?*/
int?*mx_laststat; /*?前向狀態矩陣?*/
}?TURBO_TRELLIS;
#define?TERMINATED??????????1???????????????/*?0不結尾;1結尾?*/
#define?G_ROW_1 13??????????????????/*?反饋抽頭?*/ ?
#define?G_ROW_2 15 /*?輸出抽頭?*/
/*?無窮大?*/
#ifndef?INFTY
#define?INFTY?1E10
#endif
int?M_num_reg?=?COLUMN_OF_G-1; /*?寄存器數?*/
int?n_states?=?8; /*?狀態數:2的M_num_reg次冪?*/
TURBO_G?turbo_g; /*?生成陣?*/
TURBO_TRELLIS?turbo_trellis; /*?Tellis結構?*/
/*?Log-MAP算法用到的查找表?*/
const?double?lookup_index_Log_MAP[16]?=?{0.0?0.08824?0.19587?0.31026?0.43275?0.56508
0.70963?0.86972?1.0502?1.2587?1.5078?1.8212
2.2522?2.9706?3.6764?4.3758};
const?double?lookup_table_Log_MAP[16]?=?{0.69315?0.65?0.6?0.55?0.5?0.45?0.4?0.35
0.3?0.25?0.2?0.15?0.1?0.05?0.025?0.0125};
/*---------------------------------------------------------------
函數:
void?int2bin(int?intstat?int?*tempstat?int?length)
介紹:
十進制數轉為二進制序列.
參數:
輸入參數:
intstat?-?十進制數.
length?-?要得到的二進制序列長度.
輸出參數:
bin_stat?-?二進制序列首址.
返回值:
無
---------------------------------------------------------------*/
void?int2bin(int?intstat?int?*bin_stat?int?length)
{
int?i?temp;
temp?=?intstat;
/*?除以2求余數?*/
for?(i=length-1;?i>=0;?i--)
{
*(bin_stat+i)?=?temp%2;
temp?=?temp/2;
}
}
/*---------------------------------------------------------------
函數:
int?bin2int(int?*binseq?int?length)
介紹:
二進制序列轉為十進制數.
參數:
輸入參數:
binseq?-?二進制序列首址.
length?-?二進制序列長度.
輸出參數:
無
返回值:
得到的十進制數.
---------------------------------------------------------------*/
int?bin2int(int?*binseq?int?length)
{
int?i?j?temp;
int?sum?=?0;
for?(i=0;?i {
temp?=?1;
/*?計算該位權值?*/
for?(j=1;?j<=i;?j++)
{
temp?=?temp?*?2;
}
sum?=?sum?+?temp?*?(*(binseq+length-1-i));
}
return?sum;
}
/*---------------------------------------------------------------
函數:
int?encode_bit(int?inbit?int?*stat)
介紹:
比特編碼器.
參數:
輸入參數:
inbit?-輸入比特.
stat?-?當前寄存器狀態首址.
輸出參數:
stat?-?編碼后寄存器狀態首址.
返回值:
輸出比特.
---------------------------------------------------------------*/
int?encode_bit(int?inbit?int?*stat)
{
int?j; /*?循環變量?*/
int
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????28067??2014-03-05?20:39??TurboDeCoding.cpp
?????文件???????19274??2014-03-05?20:39??TurboEnCoding.cpp
- 上一篇:多邊形邊緣填充算法實現
- 下一篇:使用VS2008MFC讀取Excel里的數據
評論
共有 條評論