直接序列扩频Word下载.docx
- 文档编号:6089996
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:21
- 大小:140.64KB
直接序列扩频Word下载.docx
《直接序列扩频Word下载.docx》由会员分享,可在线阅读,更多相关《直接序列扩频Word下载.docx(21页珍藏版)》请在冰点文库上搜索。
能较为熟练地回答老师所提问题,口头表达流利,应变能力强(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)的次数<
n-k
C(x)=xn-km(x)+(xn-km(x)modg(x))
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));
fork=1:
7
x=num8;
y=ey(k,:
);
%ifsum(num8==ey(k,:
))==0
ww=(sum(x==y));
ifww==0
break;
ifk==7
znum8=num8'
;
H=[Hznum8];
end
%%将监督矩阵转化成生成矩阵hanming(255,247)
G=H'
;
ey=eye(247,247);
hanming=[eyG];
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];
ifmo>
last=signal(1,fix(Ls/247)*247+1:
Ls);
%未编码部分
codesignal=[codesignallast];
codesignal=mod(codesignal,2);
%对结果进行模2运算,即转化成0,1
c.译码
functiondecodesign=xdecode(outsignal)
%%译码,将outsignal中的码子译为codesign中
hanming=creatM();
%得到汉明码的生成矩阵
%将生成矩阵转化成监督矩阵H%
H=hanming(:
248:
255)'
H=[Hey];
Ls=length(outsignal);
%译码的码字长度
%Ls=length(outsignal);
%需要译码的码字长度
decodesign=[];
%定义译码后的码子存放矩阵
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
ifsum(S~=H(:
j))==0
R(j)=~R(j);
decodesign=[decodesign
R(1,1:
247)];
mo=mod(Ls,255);
%判断输出的码子是否是255的倍数,如果不是则最后几位未编码
%outsignal=[outsignalzeros(1,255-mo)];
last=outsignal(1,fix(Ls/255)*255+1:
decodesign=[decodesignlast];
(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=[];
%初始化码子输出
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相应为补在后面
if
j~=M
%判断是否余数已经出来,若未出来再补,否则继续补
for
k=2:
M-N+1
%移位
divi(k-1)=divi(k);
divi(k)=yin(j+1);
%将in的下一位补上
continue;
else
divi=divi+g;
%模2运算
divi=mod(divi,2);
r=divi(2:
%余式,即监督位
out=[inr];
%系统循环码字
Cout=[Coutout];
%编出的码字
ifmod(Ls,N)~=0
%如若不是整数倍,后面的不编码
Cout=[CoutCin(1,N*fix(Ls/N)+1:
Ls)];
b.生成监督矩阵
functionG=creatG15(M,N,g)
%%生成(15,11)的生成矩阵G
G=[];
%存储生成矩阵
%%首先生成(15,11)的生成矩阵
ey=eye(N);
N
G=[G;
syscode15(M,N,ey(i,:
),g)];
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)];
fix(Ls/M)
x=(i-1)*M+1:
i*M;
%取出M个码子,并且转化成M*1的矩阵
M
N)];
mo=mod(Ls,M);
%判断输出的码子是否是M的倍数,如果不是则最后几位未编码
%outsignal=[outsignalzeros(1,M-mo)];
last=outsignal(1,fix(Ls/M)*M+1:
(3).卷积码(2,1,2)
functioncout=convcode(cin)
%本函数实现(2,1,2)卷积编码,输入为cin
%编码后输出为cout
%其中生成多项式g11=g(1,1)=[111],
g11=[111];
%定义生成多项式
g12=[101];
cout=[];
%定义输出矩阵
regist=zeros(1,length(g11));
%初始化寄存器为0,长度与生成多项式矩阵长度一样
length(cin)
%控制循环编码
forj=length(regist):
-1:
2
%寄存器循环移位
regist(j)=regist(j-1);
regist
(1)=cin(i);
%将需要编码的码子一位一位的移至寄存器
c1=sum(regist.*g11);
%输出码字c1
c2=sum(regist.*g12);
%输出码字c2
cout=[coutc1c2];
%将码字保存至输出码字中
cout=mod(cout,2)
%求模2运算
b.译码
functiondesiganl=convdecode(signal)
%本函数实现(2,1,2)卷积译码,需要译码的信号signal
%译码后输出为designal
%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];
s(i).diff=sum(signal(1:
4)~=s(i).state);
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<
diff2
%判断哪条路径最短,并处理,存放至diff临时变量
fs
(1).state=temp1;
%为了不影响后面s2,s3,s4的处理
fs
(1).code=[s
(1).code0];
fs
(1).diff=diff1;
fs
(1).state=temp2;
fs
(1).code=[s(3).code0];
fs
(1).diff=diff2;
%
fs
(1).diff=diff2;
%%%以下是对s
(2)的处理,同s
(1)
temp1=[s
(1).state11];
temp2=[s(3).state00];
fs
(2).state=temp1;
fs
(2).code=[s
(1).code1];
fs
(2).diff=diff1;
fs
(2).state=temp2;
fs
(2).code=[s(3).code1];
fs
(2).diff=diff2;
%%%以下是对s(3)的处理,同s
(1)
temp1=[s
(2).state10];
temp2=[s(4).state01];
fs(3).state=temp1;
fs(3).code=[s
(2).code0];
fs(3).diff=diff1;
fs(3).state=temp2;
fs(3).code=[s(4).code0];
fs(3).diff=diff2;
%%%以下是对s(4)的处理,同s
(1)
temp1=[s
(2).state01];
temp2=[s(4).state10];
fs(4).state=temp1;
fs(4).code=[s
(2).code1];
fs(4).diff=diff1;
fs(4).state=temp2;
fs(4).code=[s(4).code1];
fs(4).diff=diff2;
s=fs;
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:
%因为后面补了0,现在去掉
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=[];
length(signal)
modsignal=[modsignal,signal(i)*carrier];
(2)解调
%%deBPSK解调并译码,signal代表输入信号,designal解调后的信号,译码后deout为输出码字,datarate:
functiondeout=deBPSK(signal,datarate,fc,fs)
Lc=length(carrier);
Ls=length(signal)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 直接 序列