信息论大作业信道编码.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息论大作业信道编码

题目:Coding Project 2Implement a (tiny-scale) channel coding system. The channel is a binary erasure channel with erasureprobability p.? Generate a random codebook of block length n and rate R, following the capacity-achieving inputdistribution.? Transmit the codeword corresponding to a uniformly randomly selected message, to produce thereceived signal vector.? Decode the received signal vector, using the typical set decoding rule, with a specified ?.Use Monte Carlo simulation to evaluate the performance of your code.算法:1.生成长度为n的随机码本,服从概率R。2.对某一码字传输,按擦除信道进行,擦除概率为er。3.计算是否为联合典型。4.译码。代码如下:%% 信息论大作业之信道编码% 一次发送多个码字,码字个数为cNumer=0.01; % 随机擦除概率ep=0.2; % 典型集边界R=1-er;n=10;nRInt=ceil(n*R);m=power(2,nRInt); % 2^nR 个码字%% 计算接受序列的熵,联合熵%% 计算上下界Hy=-((1-er)*log2((1-er)/2)+er*log2(er));HyU=Hy+ep; HyL=Hy-ep;Hxy=-((1-er)*log2((1-er)/2)+er*log2(er/2));HxyU=Hxy+ep; HxyL=Hxy-ep;xBook = random(Binomial,1,0.5,m,n); % 0-1 Bernoulli(1/2)%% 发送cNum个码字cNum=10; %发送码字个数wSeq=random(Discrete Uniform,m,1,cNum); wd=[]; %发送序列deCoded=[]; %接受到的序列HyRcv=0;countSuc=0;for i=1:cNum wd=[wd xBook(wSeq(i),:)];endwdTrans=wd;bitSent=length(wd);for i=1:bitSent if (random(Binomial,1,er,1,1)==1) %擦除 wdTrans(i)=-1; endendfor k=1:cNum wdTrans1=wdTrans((k-1)*n+1:k*n); %取出各个码字 label=[]; for i=1:n if(wdTrans1(i)==-1) %收到-1 HyRcv=HyRcv+log2(er); else %收到0或者1 HyRcv=HyRcv+log2((1-er)/2); end end HyRcv=-HyRcv/n; %接受序列的熵 % 判断是否是联合典型的 xBookUni=unique(xBook,rows); [mN, ~]=size(xBookUni); if(HyRcvHyU || HyRcvHyL) display(接受到的序列不是典型序列); deCoded=[deCoded -ones(1,n)]; %将解码失败的标记为-1 continue; % 不是典型序列,不用计算是否联合典型 end display(收到典型序列!); for j=1:mN %对每个码字 HxyRcvJ=0; wdT=xBookUni(j,:); for i=1:n if(wdTrans1(i)~=wdT(i)) %收到-1,被擦除 HxyRcvJ=HxyRcvJ+log2(er/2); else %收到0或者1,未被擦除 HxyRcvJ=HxyRcvJ+log2((1-er)/2); end end HxyRcvJ=-HxyRcvJ/n; if(HxyRcvJHxyL HxyRcvJHxyU) display(找到联合典型序列); display(k); display(HxyRcvJ) label=[label j]; %将是联合典型的角码标记 display(label); end end if(length(label)~=1) display(解码失败!) deCoded=[deCoded -ones(1,n)]; %将解码失败的标记为-1

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档