直接序列扩频_第1页
直接序列扩频_第2页
直接序列扩频_第3页
直接序列扩频_第4页
直接序列扩频_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、综合性设计性实验报告专 业 班 级: 姓名 (学号): 实 验 名 称: 通信系统仿真 实验室(中心): 软件与通信实验中心 指 导 教 师 : 实验完成时间: 2011 年 12 月 15 日序号项目标准评分1系统演示(功能)(30%)按要求完成系统功能且界面友好容错能力强(2730)按要求完成系统功能界面一般有较好的容错能力(2426)基本完成系统功能有一定的容错能力(2123)基本完成系统功能(1820分)未完成系统功能或他人代做或抄袭(15)2课程设计说明书(30%)课程设计书各项目认真填写,具有清晰的设计思路及软件测试结果分析(2730)课程设计书各项目认真填写,具有较为清晰的设计思

2、路并对软件测试结果进行了较为清晰的分析(2426)课程设计书各项目认真填写,设计思路正确(2123)课程设计书进行为较为认真的填写(1821)课程设计书有未完成项或各项填写不属实或他人代做或抄袭(15)3口头答辩(对知识点掌握程度、应变及口头表达等)(20%)能熟练回答老师所提问题,口头表达流利,应变能力强(1820)能较为熟练地回答老师所提问题,口头表达流利,应变能力强(1617)能回答老师所提问题,口头表达较流利(1415)在经提示后能回答老师提出的问题,课程内容掌握不太熟练(1213)经提问发现课程设计是他人代做或抄袭的(10)4纪律遵守、群体协作等(20%)20教师签字总分一、设计题目

3、通信系统仿真对比不编码,汉明码,循环码,卷积码的误码率曲线二、设计要求1.学会matlab的基本使用2.学会模块化设计思想3.了解通信系统具体流程4.理解汉明码编码,译码及其如何纠正错误5.理解循环码编码,译码及其如何纠正错误6.理解循环码编码,译码及其如何纠正错误7.学会BPSK调制与解调7.学会对比分析噪声与误码率曲线三、实验相关基本理论1本实验整个系统模型如下:2.关于信道使用的编码部分 a.(n,k)汉明码.它是一种线性分组码,纠错能力为1,监督元个数 nk=m;H 阵中每列有 m个元素,至多可构成 2m1种互不相同的非0列,码长: n=2m1,信息位数:k=2mm1,监督位数:nk=

4、m,码的最小距离:dmin=3(t=1)编码:(n,k) 线性码的编码就是根据线性码的监督矩阵或生成矩阵将长为 k 的信息组变换成长为 n(nk) 的码字。C=mG;译码:先得到监督矩阵H,E=HR,若E=0则与判断与监督矩阵的哪一列相同,则将R对应位取反,最后得出k位码字。b.循环码它也是一种线性分组码,如果 (n,k) 线性分组码的任意码矢C=(Cn1,Cn2,C0) 的 i 次循环移位,所得矢量C(i)=(Cn1i,Cn2i,C0,Cn1,Cni)仍是一个码矢,则称此线性码为 (n,k) 循环码。编码:设信息向量 m=(mk1,mk2,m0)信息多项式 m(x)=mk1xk1+mk2 x

5、k2+m0 码多项式的高次幂部分等于m(x),即 C(x)=cn1xn1+ cnkxnk+ cnk1xnk1 +c1x +c0 =xnk m(x)+q(x) q(x)的次数0.5;end2.信道编码与解码部分(1)(255,247)汉明码a.给出生成矩阵function hanming=creatM()%生成(255,247)的汉明码的生成矩阵,返回到hanming中%先生成8*255监督矩阵Hnum=1;H=;ey=eye(8,8);for i=2:255 str=dec2bin(i,8); for j=1:8 num8(j)=str2num(str(j); end for k=1:7 x

6、=num8; y= ey(k,:) ; % if sum(num8=ey(k,:)=0 ww= (sum(x=y); if ww=0 break; end if k=7 znum8=num8; H=H znum8; end endend %将监督矩阵转化成生成矩阵hanming(255,247) G=H; ey=eye(247,247); hanming=ey G;endb编码function codesignal=xcode(signal)%信道编码,如果不足247位则后面的不编码Ls=length(signal);mo=mod(Ls,247);%Ls=length(signal);code

7、signal=;hanming=creatM() ;%调用生成矩阵函数for i=1:fix(Ls/247); temp=signal(1,(i-1)*247+1:i*247); codesignal=codesignal temp*hanming;endif mo0 last=signal(1,fix(Ls/247)*247+1:Ls); %未编码部分 codesignal=codesignal last;endcodesignal=mod(codesignal,2); %对结果进行模2运算,即转化成0,1endc.译码function decodesign=xdecode(outsigna

8、l)%译码,将outsignal中的码子译为codesign中hanming=creatM() ; %得到汉明码的生成矩阵%将生成矩阵转化成监督矩阵H%H=hanming(:,248:255);ey=eye(8,8);H=H ey;Ls=length(outsignal); %译码的码字长度%Ls=length(outsignal); %需要译码的码字长度decodesign=; %定义译码后的码子存放矩阵for i=1:fix(Ls/255) x=(i-1)*255+1:i*255; R=outsignal(1,x); %取出255个码子,并且转化成255*1的矩阵 RT=R; S=mod(

9、H*RT,2); if sum(S)=0 for j=1:255 if sum(S=H(:,j)=0 R(j)=R(j); break; end end end decodesign=decodesign R(1,1:247); endmo=mod(Ls,255); %判断输出的码子是否是255的倍数,如果不是则最后几位未编码if mo0 % outsignal=outsignal zeros(1,255-mo); last=outsignal(1,fix(Ls/255)*255+1:Ls); decodesign=decodesign last;endend(2)(15,11)系统循环码a编

10、码function Cout=syscode15(M,N,Cin,g)%循环编码 (系统码) 输入参数(15,11)即(m,n)的循环编码,g为生成码多项式,Cin为输入码子,%Cout为编码后的输出码子,如果输入码字的长度不是N的整数倍,则后面的不编码%生成(M,N)的循环码生成矩阵码字Cout,g为生成多项式,如果Cin不是N的倍数,则最后几位不编码Ls=length(Cin); %计算出输入码子的长度Cout=; %初始化码子输出for i=1:fix(Ls/N) %将Cin分成Ls/N个N位码 in=Cin(1,(i-1)*N+1:i*N); %取出每一组需要编码的电平 yin=in

11、zeros(1,M-N); %在需要编码的电平往高位移动M-N位,即在后面添0 divi=yin(1:M-N+1); %divi为每一步的除数 for j=M-N+1:M %模拟做除法的过程,共循环N次 if divi(1)=0 %如果除数的高位为0则去掉,同时将in相应为补在后面 if j=M %判断是否余数已经出来,若未出来再补,否则继续补 for k=2:M-N+1 %移位 divi(k-1)=divi(k); end divi(k)=yin(j+1); %将in的下一位补上 end continue; else divi=divi+g; %模2运算 divi=mod(divi,2);

12、if j=M %判断是否余数已经出来,若未出来再补,否则继续补 for k=2:M-N+1 %移位 divi(k-1)=divi(k); end divi(k)=yin(j+1); %将in的下一位补上 end end end r=divi(2:M-N+1); %余式,即监督位 out=in r; %系统循环码字 Cout=Cout out; %编出的码字endif mod(Ls,N)=0 %如若不是整数倍,后面的不编码 Cout=Cout Cin(1,N*fix(Ls/N)+1:Ls);endendb生成监督矩阵function G=creatG15(M,N,g)%生成(15,11)的生成矩

13、阵GG=; %存储生成矩阵%首先生成(15,11)的生成矩阵ey=eye(N);for i=1:N G=G;syscode15(M,N,ey(i,:),g);endendc译码function decodesign=decode15(M,N,outsignal,g)%译码,Cout为需要译码的码子,g为码多项式,decod为译码后的码子G=creatG15(M,N,g) ; %得到生成矩阵%将生成矩阵转化成监督矩阵H Q=G(:,N+1:M); H=Q eye(M-N);Ls=length(outsignal); %需要译码的码字长度decodesign=; %定义译码后的码子存放矩阵for

14、i=1:fix(Ls/M) x=(i-1)*M+1:i*M; R=outsignal(1,x); %取出M个码子,并且转化成M*1的矩阵 RT=R; S=mod(H*RT,2); if sum(S)=0 for j=1:M if sum(S=H(:,j)=0 R(j)=R(j); break; end end end decodesign=decodesign R(1,1:N); endmo=mod(Ls,M); %判断输出的码子是否是M的倍数,如果不是则最后几位未编码if mo0 % outsignal=outsignal zeros(1,M-mo); last=outsignal(1,fi

15、x(Ls/M)*M+1:Ls); decodesign=decodesign last;endend(3).卷积码(2,1,2)a编码function cout=convcode(cin)%本函数实现(2,1,2)卷积编码,输入为cin%编码后输出为cout%其中生成多项式g11=g(1,1)=1 1 1,g11=1 1 1; %定义生成多项式g12=1 0 1;cout=; %定义输出矩阵regist=zeros(1,length(g11); %初始化寄存器为0,长度与生成多项式矩阵长度一样for i=1:length(cin) %控制循环编码 for j=length(regist):-1

16、:2 %寄存器循环移位 regist(j)=regist(j-1); end regist(1)=cin(i); %将需要编码的码子一位一位的移至寄存器 c1=sum(regist.*g11); %输出码字c1 c2=sum(regist.*g12); %输出码字c2 cout=cout c1 c2; %将码字保存至输出码字中endcout=mod(cout,2) ; %求模2运算end b译码function desiganl=convdecode(signal)%本函数实现(2,1,2)卷积译码,需要译码的信号signal%译码后输出为designal%其中生成多项式g11=g(1,1)=

17、1 1 1,%g12=g(1,2)=1 0 1;%signal=0 0 1 1 0 1 0 1 0 0 1 0 1 1 0 0 0 0 1 1; Ls=fix(length(signal)/2); %求出原来需要解码的长度,恢复原信号% signal=signal zeros(1,6*2); % 为了让解码路径归并到一条上%初始化每一个的前2个状态(因为前2个不需要比较,判断)%state表示经过的路径,code表示译出得相应码子,diff表示与接收到码字的不同个数s(1).state=0 0 0 0;s(1).code=0 0;s(2).state=0 0 1 1;s(2).code=0 1

18、;s(3).state=1 1 1 0;s(3).code=1 0;s(4).state=1 1 0 1;s(4).code=1 1;for i=1:4 s(i).diff=sum(signal(1:4)=s(i).state);endfor i=3:fix(length(signal)/2) %对3以后的状态处理 %以下是对s(1)的处理,后面的类似 temp1=s(1).state 0 0; %2个变量分别存放到这个状态的2条路径 temp2=s(3).state 1 1; diff1=sum(signal(1:i*2)=temp1); %分别就算这2条路径接收到的码字的不同个数 diff

19、2=sum(signal(1:i*2)=temp2); if diff1diff2 %判断哪条路径最短,并处理,存放至diff临时变量 fs(1).state=temp1; %为了不影响后面s2,s3,s4的处理 fs(1).code=s(1).code 0; fs(1).diff=diff1; else fs(1).state=temp2; fs(1).code=s(3).code 0; fs(1).diff=diff2; % fs(1).diff=diff2; end %以下是对s(2)的处理,同s(1) temp1=s(1).state 1 1; %2个变量分别存放到这个状态的2条路径

20、temp2=s(3).state 0 0; diff1=sum(signal(1:i*2)=temp1); %分别就算这2条路径接收到的码字的不同个数 diff2=sum(signal(1:i*2)=temp2); if diff1diff2 %判断哪条路径最短,并处理,存放至diff临时变量 fs(2).state=temp1; %为了不影响后面s2,s3,s4的处理 fs(2).code=s(1).code 1; fs(2).diff=diff1; else fs(2).state=temp2; fs(2).code=s(3).code 1; fs(2).diff=diff2; end %

21、以下是对s(3)的处理,同s(1) temp1=s(2).state 1 0; %2个变量分别存放到这个状态的2条路径 temp2=s(4).state 0 1; diff1=sum(signal(1:i*2)=temp1); %分别就算这2条路径接收到的码字的不同个数 diff2=sum(signal(1:i*2)=temp2); if diff1diff2 %判断哪条路径最短,并处理,存放至diff临时变量 fs(3).state=temp1; %为了不影响后面s2,s3,s4的处理 fs(3).code=s(2).code 0; fs(3).diff=diff1; else fs(3).

22、state=temp2; fs(3).code=s(4).code 0; fs(3).diff=diff2; end %以下是对s(4)的处理,同s(1) temp1=s(2).state 0 1; %2个变量分别存放到这个状态的2条路径 temp2=s(4).state 1 0; diff1=sum(signal(1:i*2)=temp1); %分别就算这2条路径接收到的码字的不同个数 diff2=sum(signal(1:i*2)=temp2); if diff10; %取出最后一的点%译码,取第一个峰值load lowfilter %装载滤波器delay= ceil(length(Num) / 2); %

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论