开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 9

沧海一声笑/LDPC Kit_1

forked from sg-first/LDPC Kit
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
LDPC-code_1
/
main.cpp
LDPC-code_1
/
main.cpp
main.cpp 4.34 KB
一键复制 编辑 原始数据 按行查看 历史
sg-first 提交于 2021年01月03日 21:37 +08:00 . 使用GF::p作为最大值
#include <iostream>
#include <vector>
#include "matrix.h"
#include "errorCorrection.h"
#include <thread>
#include <map>
#include <array>
#include "genH.h"
#include "matIO.h"
#include <bitset>
uint sLength;
uint cLength;
uint calu1(matrix m,uint start=0)
{
uint result=0;
for(uint i=0;i<m.getr();i++)
{
for(uint j=start;j<m.getc();j++)
{
if(m.m[i][j]==1)
result++;
}
}
return result;
}
void endl() { std::cout<<std::endl; }
bool check(matrix s,matrix p1,matrix p2,matrix H)
{
matrix c(1,cLength);
for(uint i=0;i<sLength;i++) //信息位逐个拷贝
c.m[0][i]=s.m[0][i];
for(uint i=sLength ; i<sLength+p1.getc() ; i++) //校验位1
c.m[0][i]=p1.m[0][i-sLength];
const uint offest2=sLength+p1.getc();
for(uint i=offest2 ; i<cLength ; i++) //校验位2
c.m[0][i]=p2.m[0][i-offest2];
std::cout<<"check:"<<std::endl;
s.output();
c.output();
return errorCorrection::check(c,H);
}
std::string binaryConversion(int num,int bin=GF::p)
{
std::string result;
do
{
result=std::to_string(num%bin)+result;
num=num/bin;
} while(num>=1);
while(result.size()<bin)
result="0"+result;
return result;
}
matrix *errorMat=nullptr;
typedef std::bitset<GF::p> bitset;
std::string randstr()
{
std::string result="";
for(uint i=0;i<sLength-1;i++) //先生成前几位
result+=std::to_string(std::rand() % GF::p);
//fix:二进制生成最后一位
bitset last;
for(uint i=1;i<GF::p;i++)
{
if(int(std::rand()%2)==1)
last.flip(i);
}
return result+std::to_string(last.to_ulong());
}
void checkLoop(uint min,uint max,
matrix fii_ETiA_C, matrix TiA, matrix TiB,
matrix H)
{
matrix s(1,sLength);
for(uint i=min;i<max;i++)
{
//std::string as=binaryConversion(i);
matIO::assignment(s.m[0],randstr(),s.getc());
matrix sT=s.transpose();
matrix p1T=fii_ETiA_C.dot(sT);
matrix ii=TiA.dot(sT);
matrix ii2=TiB.dot(p1T);
matrix p2T=ii.add(ii2);
if(!check(s,p1T.transpose(),p2T.transpose(),H))
{
std::cout<<"fail!"<<std::endl;
errorMat=new matrix(s);
}
if(errorMat!=nullptr)
return;
}
std::cout<<"finished!"<<std::endl;
}
int main()
{
HGenerator::generate();
//编码
GF::initMulTable();
std::vector<int>av;
matrix H=matIO::ReadMatFile("D:/H0.csv",24,128);
cLength=H.getc();
sLength=cLength-H.getr();
uint g=H.getr()-8;
uint mg=H.getr()-g;
uint nm=H.getc()-H.getr();
matrix T=H.cut(nm+g,0,H.getc()-1,mg-1);
matrix Ti=T.inv();
Ti.output();
std::cout<<std::endl;
Ti.dot(T).output();
std::cout<<std::endl;
matrix E=H.cut(nm+g,mg,H.getc()-1,H.getr()-1);
matrix B=H.cut(nm,0,nm+g-1,mg-1);
matrix D=H.cut(nm,mg,nm+g-1,H.getr()-1);
matrix fi=E.dot(Ti);
fi=fi.dot(B);
fi=fi.add(D);
matrix fii=fi.inv();
fi.output();
std::cout<<std::endl;
fii.output();
std::cout<<std::endl;
//matrix fii=matIO::ReadMatFile("D:/invfi.csv",226,226);
fii.dot(fi).output();
matrix A=H.cut(0,0,nm-1,mg-1);
matrix C=H.cut(0,mg,nm-1,H.getr()-1);
//计算所需
matrix fii_ETiA_C=E.dot(Ti).dot(A).add(C);
fii_ETiA_C=fii.dot(fii_ETiA_C); //这里原先有个逐元素取加法逆元的操作,因为结果不变去掉
matIO::saveMatFile("D:/x.csv",fii_ETiA_C);
matrix TiA=Ti.dot(A); //这里原先有个逐元素取加法逆元的操作,因为结果不变去掉
matIO::saveMatFile("D:/L.csv",TiA);
matrix TiB=Ti.dot(B); //这里原先有个逐元素取加法逆元的操作,因为结果不变去掉
matIO::saveMatFile("D:/M.csv",TiB);
checkLoop(0,50,fii_ETiA_C,TiA,TiB,H);
//去掉两列
/*auto cy=HGenerator::tetracyclicDetection(H);
uint ary[8];
uint pushNum=0;
for(auto i : cy)
{
ary[pushNum]=i[1];
pushNum++;
ary[pushNum]=i[3];
pushNum++;
}
matrix newH(1,1);
for(uint i=0;i<7;i++)
{
for(uint j=i+1;j<8;j++)
{
newH=H.delC(ary[i],ary[j]);
cy=HGenerator::tetracyclicDetection(newH);
std::cout<<ary[i]<<" "<<ary[j]<<": ";
std::cout<<cy.size()<<std::endl;
}
}*/
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

LDPC编译码
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/myspace2019/LDPC-code_1.git
git@gitee.com:myspace2019/LDPC-code_1.git
myspace2019
LDPC-code_1
LDPC Kit_1
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /