ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:16.73KB ,
资源ID:3936887      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3936887.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(维特比译码程序.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

维特比译码程序.docx

1、维特比译码程序 (n,k,N)卷积码的维特比译码算法实现#include#define t_src 0#define t_des 1#define t_len 2#define t_flag 3#define t_in 4using namespace std;int myn=0;int stalen=0;int myg110=0;int myg210=0;int stan02562=0;/输入0时个状态的输出int stan12562=0;/输入1时各状态的输出int stachn2562=0;/状态装换表int path256100=0;/存储路径int calpath256=0;/存储路

2、径长度int myin24; /一次处理12次int myout200; /int myoutsym=0;int pthsym;int outfull=0; /决定是否输出int table18=1,2,4,8,16,32,64,128;void chartobits(char ch,int *bits);char bitstochar(int *bits);int calluj(int a1,int a2,int b1,int b2);void initpath(void);void selpath(int a1,int a2);void wridata(void);void viterbi

3、t(void);void writdataedn(void);void creatsta(void);void myinput(void);int main() myinput(); creatsta(); viterbit();void myinput(void) int i,j; cout输入编码的约束长度N:(3N9)myn; stalen=int(pow,myn-1); cout选择默认的编码矢量则输入1,输入2则可输入其他的编码矢量i; if(i=1) switch(myn) case 3: myg10=1,myg11=1,myg12=1; myg20=1,myg21=0,myg22

4、=1; break; case 4: myg10=1,myg11=1,myg12=1,myg13=1; myg20=1,myg21=0,myg22=1,myg23=1; break; case 5: myg10=1,myg11=0,myg12=1,myg13=1,myg14=1; myg20=1,myg21=1,myg22=0,myg23=1,myg24=1; break; case 6: myg10=1,myg11=0,myg12=1,myg13=1,myg14=1,myg15=1; myg20=1,myg21=1,myg22=0,myg23=1,myg24=0,myg25=1; break

5、; case 7: myg10=1,myg11=0,myg12=0,myg13=1,myg14=1,myg15=1,myg16=1; myg20=1,myg21=1,myg22=0,myg23=1,myg24=1,myg25=0,myg26=1; break; case 8: myg10=1,myg11=0,myg12=0,myg13=1,myg14=1,myg15=1,myg16=1,myg17=1; myg20=1,myg21=1,myg22=1,myg23=0,myg24=0,myg25=1,myg26=0,myg27=1; break; case 9: myg10=1,myg11=1,

6、myg12=0,myg13=1,myg14=0,myg15=1,myg16=1,myg17=1,myg18=1; myg20=1,myg21=0,myg22=0,myg23=0,myg24=1,myg25=1,myg26=1,myg27=0,myg28=1; break; else cout输入g1endl; for(j=0;jmyg1j; cout输入g2endl; for(j=0;jmyg2j; cout连接矢量1为endl; for(j=0;jmyn;j+) coutmyg1j ; coutendl; cout连接矢量2为endl; for(j=0;jmyn;j+) coutmyg2j

7、; coutendl; coutstalen: stalen; coutendl;void creatsta(void) int i,j,k,myi; int tembits10; for(i=0;istalen;i+) stan1i0=0; stan1i1=0; stan0i0=0; stan0i1=0; stachni0=i/2; myi=i; for(j=0;j=pow,myn-1-j) tembitsj=1; myi=myi-pow,myn-1-j); else tembitsj=0; for(k=0;kmyn;k+) stan0i0+=myg1k*tembitsk; stan0i1+

8、=myg2k*tembitsk; stan0i0=stan0i0%2; stan0i1=stan0i1%2; myi=i+int(pow,myn-1); stachni1=myi/2; for(j=0;j=pow,myn-1-j) tembitsj=1; myi=myi-pow,myn-1-j); else tembitsj=0; for(k=0;kmyn;k+) stan1i0+=myg1k*tembitsk; stan1i1+=myg2k*tembitsk; stan1i0=stan1i0%2; stan1i1=stan1i1%2; cout状态转移出endl; for(i=0;istal

9、en;i+) coutstachni0,stachni1 ; coutendl; cout输入0状态转移后的输出endl; for(i=0;istalen;i+) coutstan0i0,stan0i1 ; coutendl; cout输入1状态转移后的输出endl; for(i=0;istalen;i+) coutstan1i0,stan1i1 ; coutendl;void chartobits(char ch,int *bits) int i; for(i=0;i8;i+) if(ch0) bitsi=1; else bitsi=0; ch=ch1; char bitstochar(in

10、t *bits) char temp=0; int i; for(i=0;i8;i+) if(bitsi=1) temp+=table17-i; return temp;int calluj(int a1,int a2,int b1,int b2) int y=0; if(a1!=b1) y+; if(a2!=b2) y+; return(y);void initpath() int tem; int t_tem2565=0; int i,j,k,l; int ljtem256100; int pttem256=0; int staflag256=0; staflag0=1; int a1,a

11、2; for(l=0;lmyn-1;l+) for(i=0;istalen;i+) for(j=0;jpthsym;j+) ljtemij=pathij; i=0; a1=myin2*l; a2=myin2*l+1; for(j=0;jstalen;j+) if(staflagj=1) tem=calluj(a1,a2,stan0j0,stan0j1); t_temit_src=j; t_temit_des=stachnj0; t_temit_len=calpathj+tem; t_temit_in=0; tem=calluj(a1,a2,stan1j0,stan1j1); t_temi+1t

12、_src=j; t_temi+1t_des=stachnj1; t_temi+1t_len=calpathj+tem; t_temi+1t_in=1; i=i+2; for(k=0;kstalen;k+) staflagk=0; for(k=0;ki;k+) staflagt_temkt_des=1; calpatht_temkt_des=t_temkt_len; for(j=0;jpthsym;j+) patht_temkt_desj=ljtemt_temkt_srcj; patht_temkt_despthsym=t_temkt_in; pthsym+; /*cout初始化后的路径长度en

13、dl; for(int i=0;i8;i+) coutcalpathi ; coutendl;*/void selpath(int a1,int a2)/16选8 int t_tem5125=0; int i,j,tem; int ljtem256100; j=0; for(i=0;i2*stalen;i=i+2) tem=calluj(a1,a2,stan0j0,stan0j1); t_temit_src=j; t_temit_des=stachnj0; t_temit_len=calpathj+tem; t_temit_flag=0; t_temit_in=0; /t_temit_rep=

14、0; tem=calluj(a1,a2,stan1j0,stan1j1); t_temi+1t_src=j; t_temi+1t_des=stachnj1; t_temi+1t_len=calpathj+tem; t_temi+1t_flag=0; t_temi+1t_in=1; /t_temit_rep=0; j+; for(i=0;i2*stalen;i+) for(j=i+1;j2*stalen;j+) if(t_temit_des=t_temjt_des) if(t_temit_len=t_temjt_len) t_temit_flag=1; else t_temjt_flag=1;

15、for(i=0;istalen;i+) for(j=0;jpthsym;j+) ljtemij=pathij; for(i=0;i2*stalen;i+) if(t_temit_flag=1) calpatht_temit_des=t_temit_len; for(j=0;j16) outfull=1; pthsym+;void wridata() int i,j,icout,equcout; icout=0; equcout=0; for(i=0;ipthsym;i+) for(j=0;jstalen-1;j+) if(pathji=pathj+1i) equcout+; if(equcou

16、t=stalen-1) myoutmyoutsym+=path0i; icout+; equcout=0; else break; if(icout!=0) for(i=0;ipthsym-icout;i+) for(j=0;jstalen;j+) pathji=pathji+icout; pthsym=pthsym-icout; outfull=0;void writdataedn(void) int i,j; i=0; for(j=1;jcalpathj) i=j; for(j=0;jpthsym;j+) myoutmyoutsym+=pathij;void viterbit() FILE

17、 *fp_input,*fp_output; if(!(fp_input=fopen(,r)=1) coutfailed to open endl; exit(0); else coutwe opened the output_file endl; if(!(fp_output=fopen(,w+)=1) coutfailed to open output_fileendl; exit(0); else coutwe opened the endl; char ch; int count=0; int i,j; char wch; int wcout=0; int mybit8; ch=fge

18、tc(fp_input); chartobits(ch,mybit); for(i=0;i8;i+) myini=mybiti; while(feof(fp_input)=0) ch=fgetc(fp_input); /cout输入 ch ; /*cout输入数据1为endl; for(temi=0;temi8;temi+) coutmyintemi ; coutendl;*/ if(count=0) chartobits(ch,mybit); for(i=0;i8;i+) myini+8=mybiti; initpath(); for(j=myn-1;j8;j=j+) selpath(myi

19、n2*j,myin2*j+1); else chartobits(ch,myin); for(j=0;j=8) wcout=int(myoutsym/8); for(i=0;iwcout;i+) for(j=0;j8;j+) mybitj=myout8*i+j; wch=bitstochar(mybit); /cout输出为 wch ; fputc(wch,fp_output); for(i=0;i=3) for(i=0;i8-myoutsym;i+) myoutmyoutsym+=0; wch=bitstochar(myout); fputc(wch,fp_output); fclose(fp_input); fclose(fp_output); coutinput any integer to endi;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1