卷积码代码文档格式.docx
《卷积码代码文档格式.docx》由会员分享,可在线阅读,更多相关《卷积码代码文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
functionb=conv(a)%3卷积码的编码
l=length(a);
g0(1,1)=1;
%编码过程的生成序列
g1(1,1)=0;
g2(1,1)=0;
g0(1,2)=1;
g1(1,2)=1;
g2(1,2)=1;
m0=0;
m1=0;
m2=0;
l
m2=m1;
m1=m0;
m0=a(i);
c(i,1)=g0(1,1)*m0;
c(i,2)=rem((g0(1,2)*m0+g1(1,2)*m1+g2(1,2)*m2),2);
b=[];
[mn]=size(c);
m
b=[b,c(i,:
)];
functiondecode=conv_decode(SS1,SS2,SS3,SS4,NEXT,B,d)%6卷积码译码
l=length(d);
ifrem(l,10)==0
D=reshape(d,10,l/10);
D=D'
;
else
d=[d,zeros(1,(fix(l/10)+1)*10-l)];
D=reshape(d,10,length(d)/10);
decode=[];
[mn]=size(D);
NE=0;
switchNE
case0
forj=1:
32
error(j,:
)=mod((D(i,:
)+SS1(j,:
)),2);
SUM(j)=sum(error(j,:
));
end
[n,k]=min(SUM);
decode=[decode,B(k,:
t=NE+1;
NE=NEXT(t,k);
case1
)+SS2(j,:
case2
)+SS3(j,:
case3
)+SS4(j,:
end
%%生成比照矩阵,译码接收序列和原矩阵进行比照
function[SS1,SS2,SS3,SS4,B,NEXT]=conv_en%生成比照矩阵和next存储的下一个状态
fori=0:
31
A(i+1,:
)=dec2bin(i,5);
SS0=[];
SS1=[];
SS2=[];
SS3=[];
SS4=[];
next=[];
S0=[0,0];
S1=[0,1];
S2=[1,0];
S3=[1,1];
t=0;
fork=0:
3
fori=1:
t=k;
5
switcht
ifA(i,j)=='
1'
SS0=[SS0,S3];
Next=1;
t=Next;
else
SS0=[SS0,S0];
Next=0;
SS0=[SS0,S2];
Next=3;
SS0=[SS0,S1];
Next=2;
next=[next,Next];
C=reshape(SS0,320,4);
C=C'
SS1=C(1,:
);
SS2=C(2,:
SS3=C(3,:
SS4=C(4,:
SS1=reshape(SS1,10,32);
SS1=SS1'
SS2=reshape(SS2,10,32);
SS2=SS2'
SS3=reshape(SS3,10,32);
SS3=SS3'
SS4=reshape(SS4,10,32);
SS4=SS4'
next=reshape(next,5,128);
next=next'
NEXt=next(:
5);
4
NEXT(i,:
)=NEXt(32*(i-1)+1:
32*i);
B(i,j)=1;
B(i,j)=0;
%-----------------------初始化界面--------------------------
clc;
clearall;
closeall;
x=input('
码元数目:
'
%信噪比太低易出错2、1、2卷积码
xx=input('
数据速率:
snr=input('
信噪比:
a=xulie(x);
b=conv(a);
transmittedsignal=BPSKmodu(b,xx);
cs=channel(transmittedsignal,snr);
[de,designal]=des(cs);
[SS1,SS2,SS3,SS4,B,NEXT]=conv_en;
decode=conv_decode(SS1,SS2,SS3,SS4,NEXT,B,designal);
%------------------------随机序列--------------------------
figure,
subplot(3,1,1);
t=(1/160):
(1/160):
10;
plot(t,a(ceil(t)));
TITLE('
随机序列'
%-----------------------编码后序列-------------------------
subplot(3,1,2);
20;
plot(t,b(ceil(t)));
编码后序列'
%----------------------BPSK调制后波形------------------------
sff=1:
320;
subplot(3,1,3)
cc=sff/16;
plot(cc,transmittedsignal(sff));
BPSK调制后波形'
%------------------------解调后波形-------------------------
subplot(3,1,1)
plot(cc,de(sff));
解调后波形'
%-----------------------抽样判决结果------------------------
plot(t,designal(ceil(t)));
抽样判决结果'
%-----------------------译码结果----------------------------
subplot(3,1,3);
plot(t,decode(ceil(t)));
译码结果'
%5解调。
滤波、抽样判决
function[de,designal]=des(cs)
loadLowpass;
p=length(cs);
l=(length(Lowpass)-1)/2;
a=[cs,zeros(1,l)];
b=filter(Lowpass,1,a);
demode=[zeros(1,l),ones(1,p)];
c=demode.*b;
c=(c>
0|c<
0);
b=b(c);
%滤波,实践延迟
designal=[];
de=[];
16:
length(cs)-15
de=[de,b(i:
i+15).*carrier];
end%解调
l=length(de);
l-15
sum1=sum(de(i:
i+15))/16;
ifsum1>
=0
designal(ceil(i/16))=1;
designal(ceil(i/16))=0;
end%抽样判决,每16点取平均值,大于0为1.小于为0
functiona=xulie(n)%1
a=rand(1,n)>
0.5;