clc
clear all;
close all;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%码流文件读取%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% fid=fopen('test2022_1_12.bin','r');%读取存储码序列
% fseek(fid, 0, 'bof');
% data_read= fread(fid,'ubit1','b');% read the file
% fclose(fid);
% code_00=data_read';
% code_0=code_00(1:40000);%只选取前面的40000个数(与后面矩阵有限制关系,注意更改)
% 下面编码生成器生成的码流文件经上述代码读取后不能识别
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%码流序列生成%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
a=32;b=31;
N=[a;a];
K=[b;b];
tpccode=[];
for i1=1:1000
msgin = randi([0 1],prod(K),1); %信源与TPC信道编码
tpccode=[tpccode,(tpcenc(msgin,N,K))'];
end
code_0=tpccode;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%码长识别%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
p=200;%估计最大码长2倍
qmax=175;%分析矩阵保持q<p
i1=1;
remd=[];%用来存储秩与列数相等的情况
for i=3:qmax
code_2=[];
code_2 = reshape(code_0(1:p*i),i,p)';%从源码数据取p*i个形成分析矩阵
G_d=birref(code_2);%矩阵线性变换
if rank(G_d)~=i
remd(i1)=i;
i1=i1+1;
end
end
n=maxgcd(remd);%码长为最大公约数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%起点识别%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
remd2=[];
q1=2*n;
for i2 = 1:n-1
code_3=[];
code_3 = reshape(code_0(i2:p*q1+i2-1),q1,p)';%从源码数据取p*q1个形成分析矩阵
remd2(i2)=rank(code_3);
end
A=remd2;
[minv j]=min(A);%起点为j
%%%%%%%%%%%%%%%%%%%%%%%%%%%确定信息位k%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
m=n+10;
code_d=reshape(code_0(j:m*n+j-1),n,m)';
G0=birref(code_d);
k=rank(G0);
%%%%%%%%%%%%%%%%%%%%%%%%%%%确定生成矩阵G%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
G = G0(1:k,:);
%%%%%%%%%%%%%%%%%%%%%%%一直校验矩阵H(汉明码)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if n+1==2^(n-k)
H=gen2par(G);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%识别信息输出%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf('识别完成 \n');
fprintf('未知码为( %d , %d )线性分组码码 \n',n,k);
fprintf('码字起始位置为 %d \n',j);
G
for jj=0.90 :0.01:1
code_r=bsc1(tpccode,jj);
T=0;
for ii=1:10
p=200;%估计最大码长2倍
qmax=175;%分析矩阵保持q<p
i1=1;
remd=[];%用来存储秩与列数相等的情况
for i=3:qmax
code_2=[];
code_2 = reshape(code_0(1:p*i),i,p)';%从源码数据取p*i个形成分析矩阵
G_d=birref(code_2);%矩阵线性变换
if rank(G_d)~=i
remd(i1)=i;
i1=i1+1;
end
end
n=maxgcd(remd);%码长为最大公约数
if n~=a
continue;
end
remd2=[];
q1=2*n;
for i2 = 1:n-1
code_3=[];
code_3 = reshape(code_0(i2:p*q1+i2-1),q1,p)';%从源码数据取p*q1个形成分析矩阵
remd2(i2)=rank(code_3);
end
A=remd2;
[minv j]=min(A);%起点为j
m=n+10;
code_d=reshape(code_0(j:m*n+j-1),n,m)';
G0=birref(code_d);
k=rank(G0);
if n==a&&k==b
T=T+1;
end
end
plot(jj,T/10,'ro')
axis([0.99 1 0 1])
hold on
end
线性分组码识别matlab仿真
需积分: 5 138 浏览量
2022-06-16
09:05:47
上传
评论 7
收藏 31KB ZIP 举报
俯卧猫猫
- 粉丝: 1
- 资源: 1
最新资源
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
- 基于MIC+NE555光敏电阻的声光控电路Multisim仿真原理图
- 基于JSP毕业设计-基于WEB操作系统课程教学网站的设计与实现(源代码+论文).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0