matlab通信系统仿真

  • 格式:doc
  • 大小:30.50 KB
  • 文档页数:3

通信系统基于(15,11)汉明编码的matlab仿真
clear
m=4;
n=2^m-1;
k=11;
msg1=randint(1,6000*k,[0,1])%产生信息序列
code0=vec2mat(msg1,k);
code1=encode(msg1,n,k,'hamming/binary');%进行汉明纠错编码
code2=reshape(code1,90,1000)';
code3=zeros(1000,90);%设置零矩阵,以便储存交织后的序列
for i=1:1000
temp=code2(i,:);
temp1=reshape(temp,15,6);%按15*6交织
code3(i,:)=reshape(temp1',1,90);
end
[row,cloums]=size(code3);
code4=code3';
[row1,cloums1]=size(code4);
code5=reshape(code4,6,15000)'; %将交织后的序列转换为6行,15000列矩阵msg2=zeros(15000,6);
for j=2:6,
msg2(:,j)=xor(code5(:,j),code5(:,(j-1)));
end
msg2(:,1)=code5(:,1);%此时得到的msg2为gray映射后的信号序列
code8=msg2';%转置,便于比特符号转换
A=[32,16,8,4,2,1]; %为比特符合转换所设的序列
msg3=A*code8;%生成符号序列
msg4=qammod(msg3,64);%将符号序列进行64QAM调制
[row2,cloums2]=size(msg4);
dB=0:1:20;
for k=1:length(dB),
snr=10.^(dB(k)./10); %信噪比
sgma=sqrt(63./(6*snr));%标准差
b1=real(msg4)+sgma*randn(row2,cloums2);%分路叠加噪声
b2=imag(msg4)+sgma*randn(row2,cloums2);%分路叠加噪声
rx=complex(b1,b2);
%————————量化判决——————————%
for m=1:row2,
for n=1:cloums2,
if ((b1(m,n)<-6))
b11(m,n)=-7;
elseif ((b1(m,n)>=-6)&(b1(m,n)<-4))
b11(m,n)=-5;
elseif ((b1(m,n)>=-4)&(b1(m,n)<-2))
b11(m,n)=-3;
elseif ((b1(m,n)>=-2)&(b1(m,n)<0))
b11(m,n)=-1;
elseif ((b1(m,n)>=0)&(b1(m,n)<2))
b11(m,n)=1;
elseif ((b1(m,n)>=2)&(b1(m,n)<4))
b11(m,n)=3;
elseif ((b1(m,n)>=4)&(b1(m,n)<6))
b11(m,n)=5;
elseif ((b1(m,n)>=6))
b11(m,n)=7;
end
if ((b2(m,n)<-6))
b22(m,n)=-7;
elseif ((b2(m,n)>=-6)&(b2(m,n)<-4))
b22(m,n)=-5;
elseif ((b2(m,n)>=-4)&(b2(m,n)<-2))
b22(m,n)=-3;
elseif ((b2(m,n)>=-2)&(b2(m,n)<0))
b22(m,n)=-1;
elseif ((b2(m,n)>=0)&(b2(m,n)<2))
b22(m,n)=1;
elseif ((b2(m,n)>=2)&(b2(m,n)<4))
b22(m,n)=3;
elseif ((b2(m,n)>=4)&(b2(m,n)<6))
b22(m,n)=5;
elseif ((b2(m,n)>=6))
b22(m,n)=7;
end
end
end
%————————量化判决——————————% rx1=complex(b11,b22);
msg5=qamdemod(rx1,64);%qam解调
code8=msg5';
msg6=zeros(15000,6);
msg6=de2bi(code8,6,'left-msb');
[row8,cloums8]=size(msg6);
code9=zeros(15000,6);
code9(:,1)=msg6(:,1);
for j=2:6
code9(:,j)=xor(msg6(:,j),code9(:,(j-1)));%解格雷码
end
[row9,cloums9]=size(code9);
code10=reshape(code9',90,1000)';
code11=zeros(1000,90);
for i=1:1000
temp2=code10(i,:);
temp3=reshape(temp2,6,15);
code11(i,:)=reshape(temp3',1,90); %解交织
end
code12=reshape(code11',15,6000)';
[row12,cloums12]=size(code12);
code13=decode(code12,15,11,'hamming/fmt,prim_poly');%解汉明码[num,ratio]=biterr(code0,code13); %计算点的误差数量和误码率pe(k )=ratio
end
semilogy(dB,pe,'*');
xlabel('dB');
ylabel('biterror rate');
legend('仿真误码率/有信道编码');。