




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ii 毕业论毕业论文文 题题 目:目: ldpcldpc 码的编译码算法研究码的编译码算法研究 iii 摘摘 要要 低密度奇偶校验码(low density parity check codes,简称 ldpc 码) ,本 质上是一种线性分组码,更接近香农限。目前的研究均表明 ldpc 码是信道编 码中纠错能力最强的一种码,其译码器结构简单,在深空探测、卫星通信等领域可 得到广泛的应用。文章介绍了 ldpc 码,综述了其编码方法和译码方法。在编码 方法中分别描述了校验矩阵的构造和基于校验矩阵的编码算法,对 ldpc 码的 快速编码方法进行分析。在译码方法中主要论述了消息传递译码算法、置信传 播译码方法、最小和译码算法、比特翻转译码算法和加权比特翻转译码方法。 对部分 ldpc 码的编译码就行了仿真,同时对 ldpc 码的编译码方法的发展及 应用前景作了分析。 本文的重点是对 ldpc 码的编译码算法的论述与研究,介绍 ldpc 码的基 本原理和分类,分别从基于生成矩阵和基于校验矩阵详细讨论了 ldpc 码编码 算法,简单介绍了线性分组码编码,lu 分解法,ru 分解法。并用简明例子对 ru 算法做了清晰的解释。对译码大致做了解释:分为软判决译码(mp 算法) 和硬判决译码(比特翻转算法和加权比特翻转算法) 。在本文的最后用 awgn 信道下 ldpc 码的性能仿真,主要是针对比特翻转算法进行仿真。做出理论比 较。 关键词关键词:ldpc 码 编译码 matlab iv title:encoding and decoding algorithms of ldpc codes abstract:ldpc code, namely low density parity check code, is a kind of linear block codes in nature, and the decoding performance of ldpc is more nearer to the shannon limit. with it s best performance and simple decoder structure, ldpc codes will be widely used in deep space exploration, satellite communications and other fields. while briefly introducing ldpc codes are introduced briefly, this paper summarizes the encoding and decoding algorithms. the encoding algorithm is described in two steps: the const ruction of parity-check matrix and the encoding method based on parity-check matrix. analyze the rapidly coding method for ldpc code. as to decoding algorithm, mp decoding method, bp decoding method, min- sum decoding method, bit-flipping method and weighted bit-flipping method are discussed. emulate for the ldpc codes .the development and application of encoding and decoding methods is analyzed as well. this article focuses on encoding and decoding algorithms of ldpc codes,according to the different methods of decoding algorithm, and makes the theoretical matlab simulation. key words:ldpc codes encoding and decoding matlab iv 目 录 1引言.1 2 ldpc 码概述.3 2.1 线性分组码3 2.2 低密度奇偶校验码(ldpc 码)4 2.2.1 ldpc 码定义4 3 ldpc 码的编码算法.6 3.1 基于生成矩阵的编码算法 (线性分组码编码)6 3. 2 基于校验矩阵的编码算法 (lu 分解法) 7 3.3 基于校验矩阵的编码算法(ru 算法).7 4 ldpc 码的译码概述.11 4.1 mp 算法集 .11 4.2 硬判决译码算法13 4.2.1 比特翻转算法.13 4.2.2 加权比特翻转译码算法.14 5 awgn 信道下 ldpc 码的性能仿真 .15 5.1 仿真软件简介(matlab end else for cc = 1:lc - 1 h(i, c1(cc) = 0; end end % if end % if end % for j end % for i end % if fprintf(ldpc matrix is created.n); function c, newh = makeparitychk(dsource, h, strategy) % generate parity check vector bases on ldpc matrix h using sparse lu decomposition % % dsource : binary source (0/1) % h : ldpc matrix % strategy: strategy for finding the next non-zero diagonal elements % 0 first : first non-zero found by column search 27 % 1 mincol : minimum number of non-zeros in later columns % 2 minprod: minimum product of: % - number of non-zeros its column minus 1 % - number of non-zeros its row minus 1 % % c : check bits % % % copyright bagawan s. nugroho, 2007 % % get the matric dimension m, n = size(h); % set a new matrix f for lu decomposition f = h; % lu matrices l = zeros(m, n - m); u = zeros(m, n - m); % re-order the m x (n - m) submatrix for i = 1:m % strategy 0 = first; 1 = mincol; 2 = minprod switch strategy % create diagonally structured matrix using first strategy case 0 % find non-zero elements (1s) for the diagonal r, c = find(f(:, i:end); % find non-zero diagonal element candidates rowindex = find(r = i); % find the first non-zero column chosencol = c(rowindex(1) + (i - 1); % create diagonally structured matrix using mincol strategy case 1 % find non-zero elements (1s) for the diagonal r, c = find(f(:, i:end); colweight = sum(f(:, i:end), 1); % find non-zero diagonal element candidates rowindex = find(r = i); % find the minimum column weight x, ix = min(colweight(c(rowindex); % add offset to the chosen row index to match the dimension of the. % original matrix f chosencol = c(rowindex(ix) + (i - 1); % create diagonally structured matrix using minprod strategy case 2 % find non-zero elements (1s) for the diagonal 28 r, c = find(f(:, i:end); colweight = sum(f(:, i:end), 1) - 1; rowweight = sum(f(i, :), 2) - 1; % find non-zero diagonal element candidates rowindex = find(r = i); % find the minimum product x, ix = min(colweight(c(rowindex)*rowweight); % add offset to the chosen row index to match the dimension of the. % original matrix f chosencol = c(rowindex(ix) + (i - 1); otherwise fprintf(please select columns re-ordering strategy!n); end % switch % re-ordering columns of both h and f tmp1 = f(:, i); tmp2 = h(:, i); f(:, i) = f(:, chosencol); h(:, i) = h(:, chosencol); f(:, chosencol) = tmp1; h(:, chosencol) = tmp2; % fill the lu matrices column by column l(i:end, i) = f(i:end, i); u(1:i, i) = f(1:i, i); % there will be no rows operation at the last row if i = length(r1) - numofones + rji(r1(k), j) qij(r1(k), j) = 1; else qij(r1(k), j) = 0; 30 end end % for k % bit decoding if numofones + ci(j) = length(r1) - numofones vhat(j) = 1; else vhat(j) = 0; end end % for j end % for n function vhat = decodeprobdomain(rx, h, n0, iteration) % probability-domain sum product algorithm ldpc decoder % % rx : received signal vector (column vector) % h : ldpc matrix % n0 : noise variance % iteration : number of iteration % % vhat : decoded vector (0/1) % % % copyright bagawan s. nugroho, 2007 % m n = size(h); % prior probabilities p1 = ones(size(rx)./(1 + exp(-2*rx./(n0/2); p0 = 1 - p1; % initialization k0 = zeros(m, n); k1 = zeros(m, n); rji0 = zeros(m, n); rji1 = zeros(m, n); qij0 = h.*repmat(p0, m, 1); qij1 = h.*repmat(p1, m, 1); % iteration for n = 1:iteration fprintf(iteration : %dn, n); % - horizontal step - for i = 1:m % find non-zeros in the column c1 = find(h(i, :); for k = 1:length(c1) 31 % get column products of drjic1(l) drji = 1; for l = 1:length(c1) if l= k drji = drji*(qij0(i, c1(l) - qij1(i, c1(l); end end % for l rji0(i, c1(k) = (1 + drji)/2; rji1(i, c1(k) = (1 - drji)/2; end % for k end % for i % - vertical step - for j = 1:n % find non-zeros in the row r1 = find(h(:, j); for k = 1:length(r1) % get row products of prodofrijri(l) prodofrij0 = 1; prodofrij1 = 1; for l = 1:length(r1) if l= k prodofrij0 = prodofrij0*rji0(r1(l), j); prodofrij1 = prodofrij1*rji1(r1(l), j); end end % for l % update constants k0(r1(k), j) = p0(j)*prodofrij0; k1(r1(k), j) = p1(j)*prodofrij1; % update qij0 and qij1 qij0(r1(k), j) = k0(r1(k), j)./(k0(r1(k), j) + k1(r1(k), j); qij1(r1(k), j) = k1(r1(k), j)./(k0(r1(k), j) + k1(r1(k), j); end % for k % update constants ki0 = p0(j)*prod(rji0(r1, j); ki1 = p1(j)*prod(rji1(r1, j); % get qj qi0 = ki0/(ki0 + ki1); qi1 = ki1/(ki0 + ki1); % decode qj if qi1 qi0 vhat(j) = 1; else vhat(j) = 0; end 32 end % for j end % for n function vhat = decodelogdomainsimple(rx, h, iteration) % simplified log-domain sum product algorithm ldpc decoder % % rx : received signal vector (column vector) % h : ldpc matrix % iteration : number of iteration % % vhat : decoded vector (0/1) % % % copyright bagawan s. nugroho, 2007 % m n = size(h); % prior log-likelihood (simplified). minus sign is used for 0/1 to -1/1 mapping lci = -rx; % initialization lrji = zeros(m, n); pibetaij = zeros(m, n); % asscociate the l(ci) matrix with non-zero elements of h lqij = h.*repmat(lci, m, 1); for n = 1:iteration fprintf(iteration : %dn, n); % get the sign and magnitude of l(qij) alphaij = sign(lqij); betaij = abs(lqij); % - horizontal step - for i = 1:m % find non-zeros in the column c1 = find(h(i, :); % get the minimum of betaij for k = 1:length(c1) % minimum of betaijc1(k) minofbetaij = realmax; for l = 1:length(c1) if l = k if betaij(i, c1(l) minofbetaij minofbetaij = betaij(i, c1(l); end 33 end end % for l % multiplication alphaijc1(k) (use * since alphaij are -1/1s) prodofalphaij = prod(alphaij(i, c1)*alphaij(i, c1(k); % update l(rji) lrji(i, c1(k) = prodofalphaij*minofbetaij; end % for k end % for i % - vertical step - for j = 1:n % find non-zero in the row r1 = find(h(:, j); for k = 1:length(r1) % update l(qij) by summation of l(rij)r1(k) lqij(r1(k), j) = lci(j) + sum(lrji(r1, j) - lrji(r1(k), j); end % for k % get l(qij) lqi = lci(j) + sum(lrji(r1, j); % decode l(qi) if lqi 0 vhat(j) = 1; else vhat(j) = 0; end end % for j end % for n function vhat = decodelogdomain(rx, h, n0, iteration) % log-domain sum product algorithm ldpc decoder % % rx : received signal vector (column vector) % h : ldpc matrix % n0 : noise variance % iteration : number of iteration % % vhat : decoded vector (0/1) % % % copyright bagawan s. nugroho, 2007 % m n = size(h); 34 % prior log-likelihood. minus sign is used for 0/1 to -1/1 mapping lci = (-4*rx./n0); % initialization lrji = zeros(m, n); pibetaij = zeros(m, n); % asscociate the l(ci) matrix with non-zero elements of h lqij = h.*repmat(lci, m, 1); % get non-zero elements r, c = find(h); % iteration for n = 1:iteration fprintf(iteration : %dn, n); % get the sign and magnitude of l(qij) alphaij = sign(lqij); betaij = abs(lqij); for l = 1:length(r) pibetaij(r(l), c(l) = log(exp(betaij(r(l), c(l) + 1)/. (exp(betaij(r(l), c(l) - 1); end % - horizontal step - for i = 1:m % find non-zeros in the column c1 = find(h(i, :); % get the summation of pi(betaij) for k = 1:length(c1) sumofpibetaij = 0; prodofalphaij = 1; % summation of pi(betaij)c1(k) sumofpibetaij = sum(pibetaij(i, c1) - pibetaij(i, c1(k); % avoid division by zero/very small number, get pi(sum(pi(betaij) if sumofpibetaij 1e-20 sumofpibetaij = 1e-10; end pisumofpibetaij = log(exp(sumofpibetaij) + 1)/(exp(sumofpibetaij) - 1); % multiplication of alphaijc1(k) (use * since alphaij are -1/1s) prodofalphaij = prod(alphaij(i, c1)*alphaij(i, c1(k); % update l(rji) lrji(i, c1(k) = prodofalphaij*pisumofpibetaij; end % for k end % for i 35 % - vertical step - for j = 1:n % find non-zero in the row r1 = find(h(:, j); for k = 1:length(r1) % update l(qij) by summation of l(rij)r1(k) lqij(r1(k), j) = lci(j) + sum(lrji(r1, j) - lrji(r1(k), j); end % for k % get l(qi) lqi = lci(j) + sum(lrji(r1, j); % decode l(qi) if lqi 0 vhat(j) = 1; else vhat(j) = 0; end end % for j end % for n 36 毕业设计(论文)原创性声明和使用授权说明毕业设计(论文)原创性声明和使用授权说明 原创性声明原创性声明 本人郑重承诺:所呈交的毕业设计(论文) ,是我个人在指导教 师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别 加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过 的研究成果,也不包含我为获得 及其它教育机构的学位 或学历而使用过的材料。对本研究提供过帮
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 卷帘门型钢辊弯成型工艺技术:原理、优化与应用
- 卢龙县耕地质量安全评价:基于多因素分析与可持续发展视角
- 博茨瓦纳大学孔子学院武术运动:现状剖析与推进策略研究
- 2025广东河源紫金县殡仪馆招聘编外人员2人笔试备考试题及答案解析
- 2025广东广州市天河区体育东路小学兴国学校第二次编外聘用制专任教师招聘2人备考试题及答案解析
- 2025福建泉州市晋江市第七实验小学招聘1人笔试模拟试题及答案解析
- 2025广东湛江市廉江市政协办公室等7个单位招聘政府雇员9人笔试备考题库及答案解析
- 2025度第十二师中学(十二师第三中学)面向社会招聘聘用制教师笔试备考题库及答案解析
- 2025广西贺州贺州市平桂区农业农村局招聘编外工作人员1人备考试题及答案解析
- 2025安徽滁州市大学生乡村医生专项计划招聘8人笔试备考试题及答案解析
- 保险核保岗位招聘笔试题与参考答案(某世界500强集团)2025年
- 《品类管理》教材正文
- 高职高考英语词汇表
- 必刷题2024七年级数学下册数据分析专项专题训练(含答案)
- GB/T 4706.19-2024家用和类似用途电器的安全第19部分:液体加热器的特殊要求
- 12D401-3 爆炸危险环境电气线路和电气设备安装
- DL∕T 796-2012 风力发电场安全规程
- DL∕ T 799.1-2010 电力行业劳动环境监测技术规范 第1部分:总则
- 江苏文化和旅游厅事业单位笔试真题2024
- 实验室生物安全管理手册
- 病理科实验室生物安全评估表
评论
0/150
提交评论