直接序列扩频.docx
- 文档编号:4384789
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:18
- 大小:140.80KB
直接序列扩频.docx
《直接序列扩频.docx》由会员分享,可在线阅读,更多相关《直接序列扩频.docx(18页珍藏版)》请在冰豆网上搜索。
直接序列扩频
综合性设计性实验报告
专业班级:
姓名(学号):
实验名称:
通信系统仿真
实验室(中心):
软件与通信实验中心
指导教师:
实验完成时间:
2011年12月15日
序号
项目
标准
评分
1
系统演示(功能)(30%)
按要求完成系统功能且界面友好容错能力强(27—30)
按要求完成系统功能界面一般有较好的容错能力(24—26)
基本完成系统功能有一定的容错能力(21—23)
基本完成系统功能(18—20分)
未完成系统功能或他人代做或抄袭(15)
2
课程设计说明书(30%)
课程设计书各项目认真填写,具有清晰的设计思路及软件测试结果分析(27—30)
课程设计书各项目认真填写,具有较为清晰的设计思路并对软件测试结果进行了较为清晰的分析(24—26)
课程设计书各项目认真填写,设计思路正确(21—23)
课程设计书进行为较为认真的填写(18—21)
课程设计书有未完成项或各项填写不属实或他人代做或抄袭(15)
3
口头答辩(对知识点掌握程度、应变及口头表达等)(20%)
能熟练回答老师所提问题,口头表达流利,应变能力强(18—20)
能较为熟练地回答老师所提问题,口头表达流利,应变能力强(16—17)
能回答老师所提问题,口头表达较流利(14—15)
在经提示后能回答老师提出的问题,课程内容掌握不太熟练(12—13)
经提问发现课程设计是他人代做或抄袭的(10)
4
纪律遵守、群体协作等(20%)
20
教师签字
总分
一、设计题目
通信系统仿真——对比不编码,汉明码,循环码,卷积码的误码率曲线
二、设计要求
1.学会matlab的基本使用
2.学会模块化设计思想
3.了解通信系统具体流程
4.理解汉明码编码,译码及其如何纠正错误
5.理解循环码编码,译码及其如何纠正错误
6.理解循环码编码,译码及其如何纠正错误
7.学会BPSK调制与解调
7.学会对比分析噪声与误码率曲线
三、实验相关基本理论
1.本实验整个系统模型如下:
2.关于信道使用的编码部分
a.(n,k)汉明码.
它是一种线性分组码,纠错能力为1,监督元个数n-k=m;H阵中每列有m个元素,至多可构成2m-1种互不相同的非0列,码长:
n=2m-1,信息位数:
k=2m-m-1,监督位数:
n-k=m,码的最小距离:
dmin=3(t=1)
编码:
(n,k)线性码的编码就是根据线性码的监督矩阵或生成矩阵将长为k的信息组变换成长为n(n>k)的码字。
C=m·G;
译码:
先得到监督矩阵H,E=H·R,若E~=0则与判断与监督矩阵的哪一列相同,则将R对应位取反,最后得出k位码字。
b.循环码
它也是一种线性分组码,如果(n,k)线性分组码的任意码矢C=(Cn-1,Cn-2,…,C0)的i次循环移位,所得矢量C(i)=(Cn-1-i,Cn-2-i,…,C0,Cn-1,…,Cn-i)
仍是一个码矢,则称此线性码为(n,k)循环码。
编码:
设信息向量m=(mk-1,mk-2,…,m0)
信息多项式m(x)=mk-1xk-1+mk-2xk-2+…+m0
码多项式的高次幂部分等于m(x),即
C(x)=cn-1xn-1+…+cn-kxn-k+cn-k-1xn-k-1…+c1x+c0
=xn-km(x)+q(x)q(x)的次数 C(x)=xn-km(x)+(xn-km(x)modg(x)) 译码: 先得到监督矩阵H,E=H·R,若E~=0则与判断与监督矩阵的哪一列相同,则将R对应位取反,最后得出k位码字。 C.卷积码 卷积码与分组码的不同之处: 在任意给定单元时刻,编码器输出的n个码元中,每一个码元不仅和此时刻输入的k个信息元有关,还与前连续m个时刻输入的信息元有关。 在同样的编码效率R下,卷积码的性能优于分组码,至少不低于分组码。 (n,k,m)码完全由(n·k)个生成序列所生成,每个生成序列中含有(N=m+1)个元素。 码序列C=[C0 (1)C0 (2)…C0(n)C1 (1)C1 (2)…C1(n)…Cl (1)Cl (2)…Cl(n)…]任一子码可以由待编码的信息序列M=[m0 (1)m0 (2)…m0(k)m1 (1)m1 (2)…m1(k)…ml (1)ml (2)…ml(k)…] 按如下卷积关系求出 编码: 信息序列M=[m0 (1)m1 (1)…]; ml (1)表示第l个时刻的第k=1个信息元 g(1,1)=[g0(1,1)g1(1,1)g2(1,1)g3(1,1)]=[1011] g(1,2)=[g0(1,2)g1(1,2)g2(1,2)g3(1,2)]=[1111] 译码: 卷积码的译码可分为代数译码和概率译码。 代数译码: 从码的代数结构出发,以一个约束度的接收序列为单位,对该接收序列的信息码组进行译码。 大数逻辑译码是代数译码的主要方法。 概率译码: 从信道的统计特性出发,以远大于约束度的接收序列为单位,对信息码组进行最大似然的判决。 维特比译码和序列译码是其最主要的方法 在维特比译码中,用篱笆图来描述码的译码更为方便 3.BPSK调制与解调 调制即乘以一个载波,解调即再乘以这个载波,滤去高频(2fc)部分,既可恢复出原信号。 四、各模块(函数)详细设计 1.信号源产生 %%产生随机信源,N个0,1 functionsignal=genration(N) signal=rand(1,N)>0.5; end 2.信道编码与解码部分 (1)(255,247)汉明码 a.给出生成矩阵 functionhanming=creatM() %%生成(255,247)的汉明码的生成矩阵,返回到hanming中 %先生成8*255监督矩阵H num=1; H=[]; ey=eye(8,8); fori=2: 255 str=dec2bin(i,8); forj=1: 8 num8(j)=str2num(str(j)); end fork=1: 7 x=num8; y=ey(k,: ); %ifsum(num8==ey(k,: ))==0 ww=(sum(x==y)); ifww==0 break; end ifk==7 znum8=num8'; H=[Hznum8]; end end end %%将监督矩阵转化成生成矩阵hanming(255,247) G=H'; ey=eye(247,247); hanming=[eyG]; end b.编码 functioncodesignal=xcode(signal) %%信道编码,如果不足247位则后面的不编码 Ls=length(signal); mo=mod(Ls,247); %Ls=length(signal); codesignal=[]; hanming=creatM();%调用生成矩阵函数 fori=1: fix(Ls/247); temp=signal(1,(i-1)*247+1: i*247); codesignal=[codesignaltemp*hanming]; end ifmo>0 last=signal(1,fix(Ls/247)*247+1: Ls);%未编码部分 codesignal=[codesignallast]; end codesignal=mod(codesignal,2);%对结果进行模2运算,即转化成0,1 end c.译码 functiondecodesign=xdecode(outsignal) %%译码,将outsignal中的码子译为codesign中 hanming=creatM();%得到汉明码的生成矩阵 %将生成矩阵转化成监督矩阵H% H=hanming(: 248: 255)'; ey=eye(8,8); H=[Hey]; Ls=length(outsignal);%译码的码字长度 %Ls=length(outsignal);%需要译码的码字长度 decodesign=[];%定义译码后的码子存放矩阵 fori=1: fix(Ls/255) x=(i-1)*255+1: i*255; R=outsignal(1,x);%取出255个码子,并且转化成255*1的矩阵 RT=R'; S=mod(H*RT,2); ifsum(S)~=0 forj=1: 255 ifsum(S~=H(: j))==0 R(j)=~R(j); break; end end end decodesign=[decodesignR(1,1: 247)]; end mo=mod(Ls,255);%判断输出的码子是否是255的倍数,如果不是则最后几位未编码 ifmo>0 %outsignal=[outsignalzeros(1,255-mo)]; last=outsignal(1,fix(Ls/255)*255+1: Ls); decodesign=[decodesignlast]; end end (2)(15,11)系统循环码 a.编码 functionCout=syscode15(M,N,Cin,g) %%循环编码(系统码)输入参数(15,11)即(m,n)的循环编码,g为生成码多项式,Cin为输入码子, %%Cout为编码后的输出码子,如果输入码字的长度不是N的整数倍,则后面的不编码 %%生成(M,N)的循环码生成矩阵码字Cout,g为生成多项式,如果Cin不是N的倍数,则最后几位不编码 Ls=length(Cin);%计算出输入码子的长度 Cout=[];%初始化码子输出 fori=1: fix(Ls/N)%将Cin分成Ls/N个N位码 in=Cin(1,(i-1)*N+1: i*N);%取出每一组需要编码的电平 yin=[inzeros(1,M-N)];%在需要编码的电平往高位移动M-N位,即在后面添0 divi=yin(1: M-N+1);%divi为每一步的除数 forj=M-N+1: M%模拟做除法的过程,共循环N次 ifdivi (1)==0%如果除数的高位为0则去掉,同时将in相应为补在后面 ifj~=M%判断是否余数已经出来,若未出来再补,否则继续补 fork=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); ifj~=M%判断是否余数已经出来,若未出来再补,否则继续补 fork=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=[inr];%系统循环码字 Cout=[Coutout];%编出的码字 end ifmod(Ls,N)~=0%如若不是整数倍,后面的不编码 Cout=[CoutCin(1,N*fix(Ls/N)+1: Ls)]; end end b.生成监督矩阵 functionG=creatG15(M,N,g) %%生成(15,11)的生成矩阵G G=[];%存储生成矩阵 %%首先生成(15,11)的生成矩阵 ey=eye(N); fori=1: N G=[G;syscode15(M,N,ey(i,: ),g)]; end end c.译码 functiondecodesign=decode15(M,N,outsignal,g) %%译码,Cout为需要译码的码子,g为码多项式,decod为译码后的码子 G=creatG15(M,N,g);%得到生成矩阵 %%将生成矩阵转化成监督矩阵H Q=G(: N+1: M)'; H=[Qeye(M-N)]; Ls=length(outsignal);%需要译码的码字长度 decodesign=[];%定义译码后的码子存放矩阵 fori=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); ifsum(S)~=0 forj=1: M ifsum(S~=H(: j))==0 R(j)=~R(j); break; end end end decodesign=[decodesignR(1,1: N)]; end mo=mod(Ls,M);%判断输出的码子是否是M的倍数,如果不是则最后几位未编码 ifmo>0 %outsignal=[outsignalzeros(1,M-mo)]; last=outsignal(1,fix(Ls/M)*M+1: Ls); decodesign=[decodesignlast]; end end (3).卷积码(2,1,2) a.编码 functioncout=convcode(cin) %本函数实现(2,1,2)卷积编码,输入为cin %编码后输出为cout %其中生成多项式g11=g(1,1)=[111], g11=[111];%定义生成多项式 g12=[101]; cout=[];%定义输出矩阵 regist=zeros(1,length(g11));%初始化寄存器为0,长度与生成多项式矩阵长度一样 fori=1: length(cin)%控制循环编码 forj=length(regist): -1: 2%寄存器循环移位 regist(j)=regist(j-1); end regist (1)=cin(i);%将需要编码的码子一位一位的移至寄存器 c1=sum(regist.*g11);%输出码字c1 c2=sum(regist.*g12);%输出码字c2 cout=[coutc1c2];%将码字保存至输出码字中 end cout=mod(cout,2);%求模2运算 end b.译码 functiondesiganl=convdecode(signal) %本函数实现(2,1,2)卷积译码,需要译码的信号signal %译码后输出为designal %其中生成多项式g11=g(1,1)=[111], %g12=g(1,2)=[101]; %signal=[00110101001011000011]; Ls=fix(length(signal)/2);%求出原来需要解码的长度,恢复原信号 %signal=[signalzeros(1,6*2)];%为了让解码路径归并到一条上 %%初始化每一个的前2个状态(因为前2个不需要比较,判断) %%state表示经过的路径,code表示译出得相应码子,diff表示与接收到码字的不同个数 s (1).state=[0000];s (1).code=[00]; s (2).state=[0011];s (2).code=[01]; s(3).state=[1110];s(3).code=[10]; s(4).state=[1101];s(4).code=[11]; fori=1: 4 s(i).diff=sum(signal(1: 4)~=s(i).state); end fori=3: fix(length(signal)/2)%对3以后的状态处理 %%%以下是对s (1)的处理,后面的类似 temp1=[s (1).state00];%2个变量分别存放到这个状态的2条路径 temp2=[s(3).state11]; diff1=sum(signal(1: i*2)~=temp1);%分别就算这2条路径接收到的码字的不同个数 diff2=sum(signal(1: i*2)~=temp2); ifdiff1 fs (1).state=temp1;%为了不影响后面s2,s3,s4的处理 fs (1).code=[s (1).code0]; fs (1).diff=diff1; else fs (1).state=temp2; fs (1).code=[s(3).code0]; fs (1).diff=diff2; %fs (1).diff=diff2; end %%%以下是对s (2)的处理,同s (1) temp1=[s (1).state11];%2个变量分别存放到这个状态的2条路径 temp2=[s(3).state00]; diff1=sum(signal(1: i*2)~=temp1);%分别就算这2条路径接收到的码字的不同个数 diff2=sum(signal(1: i*2)~=temp2); ifdiff1 fs (2).state=temp1;%为了不影响后面s2,s3,s4的处理 fs (2).code=[s (1).code1]; fs (2).diff=diff1; else fs (2).state=temp2; fs (2).code=[s(3).code1]; fs (2).diff=diff2; end %%%以下是对s(3)的处理,同s (1) temp1=[s (2).state10];%2个变量分别存放到这个状态的2条路径 temp2=[s(4).state01]; diff1=sum(signal(1: i*2)~=temp1);%分别就算这2条路径接收到的码字的不同个数 diff2=sum(signal(1: i*2)~=temp2); ifdiff1 fs(3).state=temp1;%为了不影响后面s2,s3,s4的处理 fs(3).code=[s (2).code0]; fs(3).diff=diff1; else fs(3).state=temp2; fs(3).code=[s(4).code0]; fs(3).diff=diff2; end %%%以下是对s(4)的处理,同s (1) temp1=[s (2).state01];%2个变量分别存放到这个状态的2条路径 temp2=[s(4).state10]; diff1=sum(signal(1: i*2)~=temp1);%分别就算这2条路径接收到的码字的不同个数 diff2=sum(signal(1: i*2)~=temp2); ifdiff1 fs(4).state=temp1;%为了不影响后面s2,s3,s4的处理 fs(4).code=[s (2).code1]; fs(4).diff=diff1; else fs(4).state=temp2; fs(4).code=[s(4).code1]; fs(4).diff=diff2; end s=fs; end diff=[s (1).diffs (2).diffs(3).diffs(4).diff];%存储4条路径的状态与码字不同个数 Min=min(diff);%找到最小值 i=find(Min==diff);%找到最小值的下标 na=s(min(i)).code;%译出码字,若有2条以上的选择i较小的 desiganl=na(1: Ls);%因为后面补了0,现在去掉 end 3.调制与解调 (1)调制 %%BPSK调制,signal代表信号,modsignal调制后的信号,datarate: 数据传输比特率, %%fc: 载波频率fs: 抽样频率 functionmodsignal=BPSK(signal,datarate,fc,fs) signal=signal*2-1; t=linspace(0,1/datarate,fs/datarate); carrier=cos(2*pi*fc*t); modsignal=[]; fori=1: length(signal) modsignal=[modsignal,signal(i)*carrier]; end end (2)解调 %%deBPSK解调并译码,signal代表输入信号,designal解调后的信号,译码后deout为输出码字,datarate: 数据传输比特率, %%fc: 载波频率fs: 抽样频率 functiondeout=deBPSK(signal,datarate,fc,fs) t=linspace(0,1/datarate,fs/datarate); carrier=cos(2*pi*fc*t); Lc=length(carrier); Ls=length(signal); designal=[]; fori=1: Lc: Ls tmp=i: i+Lc-1; designal=[designal,carrier.*signal(tmp)];%用相同信号调制 end %last=fix(Ls-Lc*3/4)>0;%取出最后一的点 %%译码,取第一个峰值 loadlowfilter%装载滤波器 delay=ceil(length(Num)/2);%滤波延时点数 add=zeros(1,delay); designal=[designaladd];%加延时0 designal=filter(Num,1,designal);%滤波 NU=length(designal);%滤波之后的长度 designal=designal(1,delay+1: NU);%去掉延时单元 deout=[]; fori=1: Ls/fix(fs/datarate) sign=fix((i-1)*Lc+Lc/2); deout=[deout,designal(sign)>0]; end end 五、测试结果及设计分析 (为方便图像观察和分析,下面采取5个,除了特别说明外) 1.原信号波形(10110) 2.调制与解调(有噪声(SNR=0)和无噪声对比) 通过图可以得出本实验是通过2个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 直接 序列
![提示](https://static.bdocx.com/images/bang_tan.gif)