基本信息
源码名称:线性编组码matlab实现
源码大小:2.68KB
文件格式:.m
开发语言:MATLAB
更新时间:2020-12-18
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在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关系');
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关系');