信道编码——线性分组码

来源:互联网 发布:js监听函数 编辑:程序博客网 时间:2024/04/29 03:17


clc
clear all
%%%%%%%%%%%%%生成初始序列%%%%%%%%%%%%
SignNum = 1000;  %信息长度


t=1:20;
genmat=[1 0 0 0 1 1 1;0 1 0 0 1 1 0;0 0 1 0 1 0 1;0 0 0 1 0 1 1];
Length = SignNum ;  %原始码序列长度
OrigiSeq=(sign(randn(1,SignNum))+1)/2;    %产生原始的0或1信息序列
%%%%%%%%%%%%%hamming编码%%%%%%%%%%%%%%
ConCode=encode (OrigiSeq,7,4,'linear',genmat);  %线性分组码编码后序列
%%%%%%%%%%%%%BPSK调制%%%%%%%%%%%%%%
BPSKCode =pskmod(ConCode,2);
%%%%%%%%%%%%%定义信噪比%%%%%%%%%%%%
EbN0 =-5:8;  %EbN0-dB
snr=10.^(EbN0./10);  %转化为功率信噪比
error = zeros(1,10);
%%%%%%%%%%%%%信噪比循环接收统计误码率%%%%%%%%%%%%
for k = 1:length(EbN0)
    for b=1:100;
    %%%%%%%%%%%%%%加性高斯白噪声信道%%%%%%%%%%%
    RecCode = awgn(BPSKCode,EbN0(k),'measured');
    %%%%%%%%%%%%%%BPSK解调%%%%%%%%%%%%%%%
    BPSKdecode=pskdemod(RecCode,2);
    %%%%%%%%%%%%%%        linear码译码%%%%%%%%%%%%%%
    Decoder=decode (BPSKdecode,7,4,'linear',genmat);
    %%%%%%%%%%%%%%统计误码率%%%%%%%%%%%
    error(b) = sum(abs(Decoder-OrigiSeq))/Length;
    end
    %%%%%%%%%%%%%%计算平均误码率%%%%%%%%%%%%%
      errorout(k)=mean(error,2);
end
errorout          
%%%%%%%%%%%%%计算理论误码率%%%%%%%%%%%%%
ber_theory=0.5*erfc(sqrt(snr));    %计算理论误比特率
ber_theory
%%%%%%%%%%%%%绘制误码率曲线%%%%%%%%%%%%%%
figure    
semilogy (EbN0,errorout,'b*-',EbN0,ber_theory,'rd-');
hold on
xlabel('Eb/N0(dB)');
ylabel('误比特率');
legend('加 linear code','理论值');
title('BPSK+linear误比特率曲线');
grid on;    %%%%添加网格线
OrigiSeq=OrigiSeq(1:20)%提取前20个仿真结果
Decoder=Decoder(1:20)
figure
subplot(211);stairs(t,OrigiSeq,'r');axis([1 20 -0.5 1.5]);title('编码前序列');%%%%%%%%%%%%%%%%%%%%%
subplot(212);stairs(t,Decoder,'b');axis([1 20 -0.5 1.5]);title('译码后序列');


0 0