基本信息
源码名称:线性编组码matlab实现
源码大小:2.68KB
文件格式:.m
开发语言:MATLAB
更新时间:2020-12-18
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
clc;clear all;
%(n,k)线性分组码
k=3;n=7              %矩阵的行数
m=zeros(2^k,k);   
for i = 1:2^k             %产生输入矩阵
    m(i,:) = bitget(i-1,k:-1:1); %返回i-1的三位二进制值
end
disp(m);
%%  把生成矩阵变为系统矩阵
G=[0,1,0,1,0,1,0
    1,1,1,0,0,0,0
    1,1,0,0,1,1,0];
temp=G;
G(1,:)=xor(temp(1,:),temp(3,:));
G(2,:)=temp(1,:);
G(3,:)=xor(temp(2,:),temp(3,:));
%%
c=mod(m*G,2);
a=find(c);
%% 把码字变为BPSK
a1=zeros(2^k,n)
for i=1:length(a)
    a1(a(i))=-1;
end
b1=find(~c)
for i=1:length(b1)
    a1(b1(i))=1
end
%%
H=gen2par(G);%生成矩阵变为校验矩阵
p=G(:,4:7);
i=eye(4)
H=[p',i];%奇偶校验矩阵
for i = 1:2^n             %产生输入矩阵
    E(i,:) = bitget(i-1,n:-1:1); %返回i-1的三位二进制值
end
s=mod(E*H',2); 
s=s 0;
e(1:16,:)=E(1:16,:);
 for i=1:2^(n-k)
     for j=1:n
         if length(find(e(i,:)==1))>length(find(E(i 16*(j-1),:)==1))
             e(i,:)=E(i 16*(j-1),:);
         end
     end
 end
 %% 标准阵列译码表
 C=cell(8,1);
 for i=1:8
     C{i}=zeros(16,7);
 end
 
 for i=1:n
     for j=1:16
         C{i}(j,:)=xor(e(j,:),c(i,:));
     end
 end
 %% 均值为0,方差为s2的高斯白噪声信道N
 flag=0;
for sigma2=1:0.1:100
 N=cell(1,10);
 r=cell(1,10);
 transfernum=100;
for order=1:transfernum
N{order}=normrnd(0,sqrt(sigma2),size(a1,1),size(a1,2));%产生噪声
 r{order}=a1 N{order};%加入噪声的序列
 %% 对接受序列r解调
 for i=1:8
     for j=1:7
         if r{order}(i,j)<0
             b{order}(i,j)=1;
         else
             b{order}(i,j)=0;
         end
     end
 end
  yima=b;
 for i=1:8
     for j=2:16
         if b{order}(i,:)==C{i}(j,:)
             yima{order}(i,:)=C{i}(1,:);
         end
     end
 end
 %% 计算误码率
 mayuantotal=56;
 mayuanerror=zeros(1, transfernum);
 for i=1:8
     for j=1:7
         if  yima{order}(i,j)~=c(i,j)
             mayuanerror(order)=mayuanerror(order) 1;
         end
     end
 end
 pe(order)= mayuanerror(order)/ mayuantotal;
 end
 flag=flag 1;
 avpe(flag)=sum(pe)/ transfernum;
 end
semilogy(1:0.1:100,avpe,'r');
grid on;                                        % 坐标轴开启
axis([0 100 0 1]);                        % 限制作图范围
xlabel('方差');                           % 横坐标
ylabel('BER');                                  % 纵坐标
title('噪声方差与BER关系');