999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Viterbi譯碼算法在55系列DSP上的C語言實(shí)現(xiàn)

2013-05-15 00:30:00邵凝寧
無線電通信技術(shù) 2013年2期
關(guān)鍵詞:程序設(shè)計(jì)

郭 勇,邵凝寧

(南京北方信息控制集團(tuán)有限公司產(chǎn)品研發(fā)中心,江蘇 南京 211153)

0 引言

Viterbi譯碼算法是針對卷積碼的性能最好的譯碼算法,TI公司的55系列DSP芯片兼容54系列DSP芯片,而且具有功耗更低、運(yùn)算速率更高等特點(diǎn),廣泛地應(yīng)用于現(xiàn)代數(shù)字通信系統(tǒng)中。目前現(xiàn)有的文獻(xiàn)中,對怎樣用C語言編程實(shí)現(xiàn)Viterbi譯碼算法論述不多。文獻(xiàn)[1—3,8]等用匯編語言編寫,可讀性較差,文獻(xiàn)[4-6]僅僅給出了程序的簡化流程圖及部分函數(shù)的介紹,并沒有對Viterbi算法的糾錯性能進(jìn)行詳細(xì)驗(yàn)證。本文針對常用的(2,1,7)卷積碼,設(shè)計(jì)實(shí)現(xiàn)了一種全并行的連續(xù)譯碼的Viterbi算法,硬判決譯碼,在VC++6.0上開發(fā),再移植到CCS平臺上運(yùn)行,采用文件讀寫操作的方法進(jìn)行糾錯性能驗(yàn)證。仿真實(shí)驗(yàn)結(jié)果表明其糾錯性能完全達(dá)到甚至優(yōu)于理論上Viterbi譯碼算法糾錯性能的極限。

1 Viterbi譯碼算法的原理及程序流程

Viterbi譯碼程序由以下模塊組成:文件讀、寫操作模塊,BMU模塊,ACS模塊,ACS迭代計(jì)算模塊最小狀態(tài)值計(jì)算模塊,回溯模塊和ram讀寫模塊等每個模塊用相應(yīng)的函數(shù)實(shí)現(xiàn)。狀態(tài)數(shù)S=64,回溯深度tblen=42,采用4個數(shù)組存儲4個ram塊的譯碼結(jié)果,分別為Pre_ram[48]用于存儲前48時(shí)刻的譯碼結(jié)果,ram1[42]、ram2[42]和ram3[42]分別循環(huán)存儲接下來每42時(shí)刻的譯碼結(jié)果,實(shí)現(xiàn)連續(xù)譯碼。N為進(jìn)入(2,1,7)編碼器的比特?cái)?shù)。

1.1 頭文件定義

#include <stdio.h>

#define uint unsigned int

#define N 20000

#define N1 4

#define N2 64

#define N3 42

#define N4 48

//函數(shù)申明

extern void File_Read(uint y0[],uint y1[]);

extern void Bmu(uint y0,uint y1,uint b[]);

extern void ACS(uint SM1,uint BM1,uint SM2,uint BM2,uint data[]);

extern void ACS_diedai(uint y0,uint y1,uint ACS_SM[],uint xingcun[]);

extern void State_Huisu(uint Min_State,uint xingcun[],uint state[]);

extern void ram_Huisu(uint Huisu_State[],uint Xingcun[][N2],uint Yima[]);

extern void File_Write(uint yima[]);

// 輸入譯碼器的y0[N]和y1[N]賦初值

static uint y0[N]={0};

static uint y1[N]={0};

static uint ACS_SM[N2]={0};//用于存儲每個時(shí)刻ACS運(yùn)算后S0-S63狀態(tài)的SM值,初始化全為0;

static uint Xingcun_1[N3][N2];// 用于 ram1 的 42 個時(shí)刻幸存路徑值的存儲;

static uint Yima_1[N3];// 存儲ram_1的譯碼結(jié)果

static uint yima[N]={0};// 存儲全部的譯碼結(jié)果

為節(jié)省篇幅,沒有全部列出來。

1.2 Viterbi譯碼算法程序流程

具體的譯碼流程如圖1所示。

圖1 譯碼算法程序流程圖

2 各功能模塊的函數(shù)設(shè)計(jì)

2.1 File讀操作模塊

函數(shù)void File_Read(uint y0[N],uint y1[N])完成此功能,y0[N]和y1[N]是輸入Viterbi譯碼器的輸入待譯碼數(shù)據(jù)。

2.2 BMU模塊

函數(shù)void Bmu(uint y0,uint y1,uint b[N1])完成此功能,b[4]是一個1行4列的數(shù)組,用于返回輸入值{y0,y1}與00,01,10,11的漢明距離。實(shí)際編程時(shí),用指針p指向b[4]。

2.3 前6個時(shí)刻SM值計(jì)算模塊的設(shè)計(jì)

函數(shù)void Pre_ACS(uint y0,uint y1,uint ACS_SM[N2],uint b[],uint i)完成此功能,ACS_SM[N2]是每一時(shí)刻對應(yīng)的S0-S63的SM值,因?yàn)锳CS_SM[N2]要保持上一時(shí)刻的計(jì)算結(jié)果,所以數(shù)組ACS_SM[N2]為static(靜態(tài))數(shù)組。i為時(shí)刻數(shù),i=0-5。

2.4 ACS模塊的設(shè)計(jì)

函數(shù)void ACS(uint SM1,uint BM1,uint SM2 uint BM2,uint data[2]),SM1和SM2是路徑度量值,BM1和BM2是分支度量值。data[2]是一個1行2列的數(shù)組,這里設(shè)定,如果SM1+BM1≥SM2+BM2,data[0]=SM2+BM2,data[1]=1;如果SM1+BM1<SM2+BM2,data[0]=SM1+BM1,data[1]=0。

2.5 ACS迭代運(yùn)算模塊的設(shè)計(jì)

函數(shù)void ACS_diedai(uint y0,uint y1,uint ACS_SM[N2],uint xingcun[N2])完成此功能,用指針p1和p2分別指向數(shù)組ACS_SM[64]和xingcun[64]),用于返回每次計(jì)算更新后64個狀態(tài)的SM值和幸存值,為防止溢出,如果64個狀態(tài)的SM值都大于8,則所有的SM值都減去8。

2.6 最小值所在狀態(tài)模塊的設(shè)計(jì)

函數(shù)uint Small_State(uint ACS_SM[N2])實(shí)現(xiàn)的功能:在輸入某時(shí)刻63個狀態(tài)的SM值時(shí),輸出最小SM值所在的狀態(tài)值。該狀態(tài)值用于回溯計(jì)算的狀態(tài)起始處。

2.7 狀態(tài)回溯模塊的設(shè)計(jì)

函數(shù)void State_Huisu(uint Min_State,uint xingcun[N2],uint state[2])實(shí)現(xiàn)的功能:在給出某一狀態(tài)及某時(shí)刻該狀態(tài)的幸存值計(jì)算預(yù)譯碼值和下一時(shí)刻的狀態(tài)。

2.8 ram_Pre回溯模塊的設(shè)計(jì)

函數(shù)void Pre_ram_Huisu(uint Huisu_State_pre[N3+1],uint Xingcun_Pre[N3][N2],uint Yima_Pre[N4])完成此功能。該函數(shù)實(shí)現(xiàn)的功能是對ram_Pre模塊通過回溯得到預(yù)譯碼值。預(yù)譯碼值存入數(shù)組 Yima_Pre[6]-Yima_Pre[47]中,與實(shí)際的譯碼結(jié)果順序相反。

2.9 前6個時(shí)刻狀態(tài)回溯計(jì)算模塊

函數(shù)void Pre_Start_Huisu(uint Start_State,uint Yima_Pre[N4])完成此功能,Start_State=Huisu_State_pre[0],用這個值計(jì)算t=0-5時(shí)刻的預(yù)譯碼值,存入Yima_Pre[0]-Yima_Pre[5]。

2.10 ram回溯模塊的設(shè)計(jì)

函數(shù)void ram_Huisu(uint Huisu_State[N3+1],uint Xingcun[N3][N2],uint Yima[N3])用于完成此功能。Huisu_State[42+1],是一個1行43列的數(shù)組,存放每一回溯時(shí)刻的狀態(tài)值,Xingcun[N3][N2]是一個42行64列的二維數(shù)組,存儲用于回溯的42個時(shí)刻每一時(shí)刻的幸存值。Yima[42]用于存放每一時(shí)刻的預(yù)譯碼值,該函數(shù)可以被ram1,ram2,ram3調(diào)用。

2.11 File寫操作模塊

函數(shù)void File_Write(uint yima[N])用于把數(shù)組yima[N]寫入yima_out.txt文件中,用來與Yuanbianma.txt文件進(jìn)行誤碼率計(jì)算。

3 糾錯性能測試

對設(shè)計(jì)的Viterbi譯碼器C程序糾錯性能的測試,采用的方法見文獻(xiàn)[7]:進(jìn)入(2,1,7)編碼器的比特?cái)?shù)N=20000個,可動態(tài)更改。同時(shí)把數(shù)據(jù)寫入到Y(jié)uanbianma.txt文檔中保存。編碼后比特?cái)?shù)為2*N=40000個,再在Matlab中對編碼數(shù)據(jù)加擾碼,然后把有擾碼的數(shù)據(jù)寫入到y(tǒng)0.txt文檔和y1.txt文檔中。C程序讀入數(shù)據(jù)到數(shù)組y0[N]和y1[N]。

圖2 不同錯誤形式下BER性能比較曲線圖

圖3 不同SNR下BER性能比較曲線圖

程序運(yùn)行完成后,譯碼數(shù)組yima[N]的值寫入到y(tǒng)ima_out.txt文件中。最后把yima_out.txt中的數(shù)據(jù)導(dǎo)入到Matlab中,計(jì)算誤比特率。誤碼形式是以100個比特為一組,編碼后每100個比特隨機(jī)錯5位、6位、7位、8位和9位等,還有一種錯誤形式是對編碼數(shù)據(jù)加高斯白噪聲,比較不同信噪比(SNR)條件下的誤比特率(BER)。

由圖2和圖3的曲線可以看出,本文用C語言設(shè)計(jì)的Viterbi譯碼器程序,其糾錯性能不僅完全達(dá)到理論上vitdec()函數(shù)糾錯性能的極限,而且其糾錯性能甚至優(yōu)于理論算法的糾錯性能。

4 結(jié)束語

針對卷積碼的Viterbi譯碼算法,本文用C語言進(jìn)行了各功能函數(shù)的設(shè)計(jì),給出了完整的程序流程圖,并采用大容量編譯碼數(shù)據(jù)對Viterbi譯碼程序進(jìn)行糾錯性能的測試。仿真實(shí)驗(yàn)結(jié)果表明,本文設(shè)計(jì)的Viterbi譯碼程序完全達(dá)到甚至優(yōu)于Viterbi理論算法的糾錯性能。采用C語言設(shè)計(jì),平臺移植性好,程序可讀性好。因此,本文設(shè)計(jì)的Viterbi譯碼程序具有較好的實(shí)際應(yīng)用價(jià)值。

[1]吳莉莉.劉益成.用TMS320C54X實(shí)現(xiàn)Viterbi譯碼器[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2004,4(4):19-21.

[2]董鵬,張鎖熊,田迎舉.數(shù)字衛(wèi)星通信中的Viterbi算法及DSP實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2003,2(5):31-33.

[3]呂圣潔,李小文,張傳達(dá).適用于TD-SCDMA系統(tǒng)的Viterbi譯碼及其DSP實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2008,24(4):166-168.

[4]孫延鵬,趙雪瑩,博海玲.基于DSP的Viterbi譯碼器的實(shí)現(xiàn)[J].沈陽航空工業(yè)學(xué)報(bào),2004,21(4):82-84.

[5]劉少陽,鄒永.(2,1,7)卷積編碼及其維特比譯碼算法的軟件實(shí)現(xiàn)[J].信息與電子工程,2006,4(6):467-469.

[6]趙冰.卷積編碼及基于DSP的Viterbi譯碼器設(shè)計(jì)[J].信息與控制,2002,31(5):473-476.

[7]郭勇,陳艷玲.Viterbi-IP核糾錯性能的驗(yàn)證[J].電訊技術(shù),2012,10(52):1702-1705.

猜你喜歡
程序設(shè)計(jì)
何為設(shè)計(jì)的守護(hù)之道?
《豐收的喜悅展示設(shè)計(jì)》
流行色(2020年1期)2020-04-28 11:16:38
試論我國未決羈押程序的立法完善
瞞天過海——仿生設(shè)計(jì)萌到家
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
設(shè)計(jì)秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設(shè)計(jì)叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
英國與歐盟正式啟動“離婚”程序程序
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
主站蜘蛛池模板: 人妻21p大胆| 97久久免费视频| 亚洲无码高清视频在线观看| 亚洲精品成人福利在线电影| 在线亚洲精品自拍| 国产一区二区丝袜高跟鞋| 国产喷水视频| 国产JIZzJIzz视频全部免费| 亚洲无码高清一区二区| 亚洲福利片无码最新在线播放| 夜色爽爽影院18禁妓女影院| 国产高清免费午夜在线视频| 综合成人国产| 亚洲人成网站在线观看播放不卡| 国产国语一级毛片| 中文字幕亚洲另类天堂| 污网站免费在线观看| 朝桐光一区二区| 激情综合激情| 国产裸舞福利在线视频合集| 99久久精品国产麻豆婷婷| 国产成人禁片在线观看| 久久视精品| 国产综合欧美| 天天综合色网| 亚洲av无码成人专区| 国产情侣一区二区三区| 高清不卡一区二区三区香蕉| 国产一级小视频| 亚洲成肉网| 午夜限制老子影院888| 成人在线综合| 97国产在线播放| 国产亚洲精品无码专| 国产成人免费视频精品一区二区| 青青青视频免费一区二区| 日韩欧美色综合| 国产免费福利网站| 一级做a爰片久久毛片毛片| 亚洲第一极品精品无码| 精品久久久久久久久久久| 国产农村1级毛片| 欧美精品在线看| 国产丝袜第一页| 亚洲无码精品在线播放| 伊人激情久久综合中文字幕| 人禽伦免费交视频网页播放| 精品成人免费自拍视频| 日韩a级片视频| 天天色综合4| 中文字幕首页系列人妻| 国产精品制服| 一本二本三本不卡无码| 波多野结衣无码视频在线观看| 亚洲色婷婷一区二区| 日韩毛片免费观看| 亚洲欧州色色免费AV| 亚洲精品在线观看91| 亚洲色图欧美一区| 91国内在线视频| 亚洲浓毛av| 波多野结衣AV无码久久一区| 一级成人欧美一区在线观看| 日本道综合一本久久久88| 国产在线八区| 综合色亚洲| 在线不卡免费视频| 国产欧美综合在线观看第七页| 亚洲IV视频免费在线光看| 国产日本欧美亚洲精品视| 亚洲欧美自拍中文| 国产高清在线观看| 2022精品国偷自产免费观看| 久久91精品牛牛| 精品国产女同疯狂摩擦2| 亚洲动漫h| 国产精品jizz在线观看软件| 456亚洲人成高清在线| 国产精品一区在线麻豆| 99精品国产电影| 亚洲人成网站观看在线观看| 亚洲美女操|