




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 1 摘要 shannon 理论证明随机码是性能优异的纠错码。一直以来随机编码理论是分析与证明 编码定理的主要方法,随机码如何构造却并未引起重视。turbo 码的发现才引起了对随机 编码理论的广泛关注,奠定了shannon随机码理论的应用研究基础1。 本文对turbo码的算法和结构进行了具体研究,针对该码在衰落信道上的不足,提出 了利用turboofdm改进的方法,并对分析结论进行了验证。本文对turbo码的研究工 作主要在一下方面: 1. 研究了构成turbo码编码器的分量码、交织器、栅格终止和删余。并分析了它们对 turbo码性能的影响。 2. 分析了turbo码的几种译码算法:map、log-map、max-log-map、sova译码 算法。通过详细推导论证了其参数对turbo码译码的影响。对各算法的优缺点进行了理论 分析和比较,给出了它们的性能差异。 3. 通过搭建awgn 信道模型,对turbo 码进行了仿真。仿真分析了码率、迭代、交 织等参数对turbo码性能的影响。并结合实际情况,对应用时参数选择提出了自己的分析 和建议。在arm实验板上对分析得到的结论进行了验证。 4. 针对 turbo 码在衰落信道下的不足提出了一种改进的 turbo 码:cofdm turbo-ofdm。研究了其在采用 ofdm 改进衰落信道下的编解码原理,并搭建 rayleigh 衰落信道模型进行了仿真分析。 5. 对turbo码的算法和硬件实现的发展和改进做了展望。 关键词关键词: turbo 编码,turbo 译码,turbo-ofdm。 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 2 abstract shannons theorems have proved that random code is a kind of perfect code, but its decoder is complex. so, random code is mostly regarded as a method of analyzing and proving theorem of coding. until 1993, discovery of turbo code attracted most researchers attention. it settles basic of application study of random code. this thesis is concerned about turbo encoding and decoding, analyzing the theory of it, researching and simulating the performance of it, giving an improved method of using turbo-ofdm to avoid its disadvantages in fading channel and verifying the analysis and conclusions. the main jobs as following: firstly, research component of turbo code: component code, interleaving and puncture, tell conditions which can affect capability of turbo coder and analyze how they affected. secondly, explain structure of turbo decode algorithm: map algorithm, log-map algorithm, max-log-map algorithm and sova algorithm. meanwhile, their advantage and disadvantage are compared and summarized. thirdly, turbo coder and decoder in awgn channel condition is been simulated. according to compare the result of simulation, analyses of turbo decoder parameters are done. meanwhile, according to practice, bring forward own analysis and suggestion about preferences. and the analysis and conclusion are verified on arm platform. fourthly, for disadvantage of turbo code in the fading channel, a kind of improved turbo code, turbo-ofdm, is been introduced. a detailed analysis of ofdm principle and effect of turbo code in fading channel is carried out. further more, a rayleigh fading channel module is built to help simulating and analyzing. in the end, prospect and importance of improvement of turbo code are given both in algorithm and hardware field. keywords: turbo code,turbo decode,turbo-ofdm 烟台大学学位论文原创性声明和使用授权说明烟台大学学位论文原创性声明和使用授权说明 原创性声明原创性声明 本人郑重声明: 所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所 取得的成果。除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或 撰写过的作品或成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式 标明。本声明的法律结果由本人承担。 论文作者签名: 日期: 年 月 日 学位论文使用授权说明学位论文使用授权说明 本人完全了解烟台大学关于收集、保存、使用学位论文的规定,即: 按照学校要求提交学位论文的印刷本和电子版本; 学校有权保存学位论文的印刷本和电子版,并提供目录检索与阅览服务; 学校可以采用影印、缩印、数字化或其它复制手段保存论文; 在不以赢利为目的的前提下,学校可以公布论文的部分或全部内容。 (保密论文在解密后遵守此规定) 论文作者签名: 导师签名: 日期: 年 月 日 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 51 版权声明 任何收存和保管本论文各种版本的单位和个人,未经本论文作者同意,不得将本论文 转借他人,亦不得随意复制、抄录、拍照或以任何方式传播。否则,引起有碍作者著作权 之问题,将可能承担法律责任。 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 5 1 绪论 1.1 turbo 码的产生与发展 随着对通信业务和信息业务的要求不断提高, 如何获得更高的通信质量和更快的数据 传输速率成为通信领域研究的交点。由于在通信过程中通信信道受噪声和衰落的影响,传 输的信号会出现失真,差错控制码可以有效检测与纠正信息传输产生的错误,提高通信质 量,加快传输速率。 c. e. shannon 的有噪信道编码定理提出了在数字通信系统中实现可靠通信的方法和 信息传输速率上限。该定理通过证明了有效差错控制编码的存在,使信道编码得到快速的 发展2 3。 由 c. berrou 等提出的 turbo 码将由卷积码组成的分量码通过随机交织器结合在一 起,实现了shannon 的随机编码的思想。turbo 码采用分量译码器之间软输入软输出的多 次迭代译码逐渐逼近最大似然译码5 6, 将分量码和交织器结合在一起, 使用短码构造长码。 turbo 码充分利用了shannon 信道编码定理的基本条件,因此,接近了shannon 所推导出 的极限7。 1.2 turbo 码的研究现状 turbo 码的提出是信道编码领域的一次重大突破,具有极其广阔的应用前景,目前, 研究turbo码的主要方面有以下几个: 1. turbo的编译码,编码方面主要包括对各种级联编码方式的分析和研究;译码方面 主要包括迭代译码的方式、分量译码算法的研究。 2. turbo码编译码器的设计,主要包括分量码的级联方式、交织器的设计、译码器的 设计等等。 3. turbo码编码与信源编码的结合。 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 6 4. turbo 码与各种调制技术的结合。 5. turbo码译码与接收检测技术的结合。 6. turbo码与均衡技术的结合。 此外turbo码与ofdm调制相结合具有较高的频谱利用率, 可以有效地抑制由多径时 延和频率选择性衰落带来的不利影响8。 目前,turbo已经成为信道编码领域的一个热点,各国学者对turbo码的改进做出了大 量工作。如:m. r. d. rodrigues等在quasi-static衰落信道下进行研究;shigeo nakajima和 eiichi sato运用turbo码结合与单校验乘积码相结合的网格码8psk配置研究;d.j van wyk 和l. p. linde对turbo码在ds/cdma系统中的研究; s. benedettto和g. montorsi用均匀交织 器的分析方法分析了turbo码的ber性能上限 6。 此外, mackay通过改变turbo码的结构提 出了译码复杂度比turbo码的很多的低密度校验码9 turbo码已经进入了实际的应用阶段被广泛引用到各种通信领域。 turbo码被确定为几 种3g标准的信道编码方案, 如3gpp的wcdma和cdma2000方案; 我国的td-scdma 方案。此外,turbo 码还被应用到etsi 的数字视频广播标准 dvb-t、dvb-rcs 和b3g 移动通信中。 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 7 2 turbo 码编码基本原理 2.1 turbo 码编码器的构成 turbo 码是并行级联卷积码pccc(parallel concatenated convolutional codes)的一种 14。turbo 码编码器是由两个系统卷积码编码器(rsc) 通过一个交织器并行连接构成的, 并且对编码后的校验位进行删余,产生码率不同的码字1。 信息序列 u 编码器rsc1 删余 与 复用 编码器rsc2 交织器 xy1 y2u1 图 2.1 turbo码编码器的结构 图2.1所示的是一种典型的turbo码编码器框图。 其中 12 , n uu uu=l 为输入的信 息序列, 经过交织器, 形成新序列u1。 u与u1分别被传送到两个分量码编码器 (rsc1 与 rsc2)中,生成序列y1与y2。若要提高码率,则序列y1与y2需要删余,形成校验序列 y(y1和 y2)。最后,校验 y 与未编码序列 u 经过复用调制后,生成了 turbo 编码后序列 x15。 2.2 递归系统卷积码(rsc) turbo 码通常由系统递归卷积码构成。卷积码可以分为系统卷积码 (sc, systematic convolutional)与非系统卷积码(nsc, non-systematic convolutional)。 系统码是在编码中, 输 出码元中的 k 位与输入码元一致,其中与输入码元一致的这 k 位数据称为信息位,其余 的 n-k 位称为校验位,而不满足这种关系的码称为非系统码。递归系统卷积码(rsc, 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 8 recursive systematic convolutional )是通过把系统卷积码前面的编码信息比特连续地反馈 回编码器的输入端而得到。图 2.2,2.3,2.4 分别为约束长度 k=3 的非递归系统卷积码, 非系统卷积码及递归系统卷积码编码器结构。 dk-2dk-1dk + uk vk dk 图2.2 非递归系统卷积码(sc) dk-2dk-1dk + + uk vk dk 图2.3非系统卷积码(nsc) 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 9 ak-2ak-1ak + + uk vk dk 图2.4 递归系统卷积码(rsc) turbo 码的两个分量码一般采用相同的编码结构。通常以分量码的生成多项式表示 turbo 码的生成多项式。例如,以图2.4 所示的rsc 为分量码、码率1/2 的turbo 码的生 成多项式表示为: 112131 123 222223 123 1() ()(1,)(1,) ()1 gdgdgdg d g d gdgdgdgd + = + (2.2.1) 其中, 0,1 ,1,2,3,1,2 j i gij= 。化简后: 23 3 1 ()(1,) dd g d dd + = + (2.2.2) 2.3 栅格终止 在turbo码译码时,译码器要根据编码器的初始状态和终止状态来初始化一些量。在 非递归卷积码中,将初始状态和终止状态设置为已知,这就是栅格终止。 但是turbo 码的分量码通常采用递归系统卷积码, 以帧的方式进行编码, 并且使用了 交织器,因此进行帧编码时编码器的初始状态和终止状态会不同。并且,即使输入一组的 终止比特使一个编码器终止, 但是终止比特还是要经过交织器的重新排序后才进入另一个 编码器,因此不能使另一个编码器也归零。如果要将这两个编码器同时归零,就需要产生 的终止比特同时满足两个编码器的归零条件,这在实际的实现中是非常复杂的16。 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 10 通常采取的turbo码归零方法有三种: 1. 编码器rsc1和编码器rsc2都不归零,这种方式会降低译码性能; 2. 编码器rsc1和编码器rsc2都归零,这种方式虽然可以获得较好的译码性能,但 是译码复杂度也随之增大; 3. rsc1归零rsc2不归零,这种方式的译码性能和译码复杂度介于上两种方法; 第三种方法是对译码性能和系统复杂度所采取的折衷,也是被广泛使用的方式。 2.4 交织器交织器 2.4.1 交织器的作用 交织器的作用是改变信息结构将传输过程中出现的突发错误进行的分散化和不规则 化。 码字的重量分布决定了turbo码的纠错译码性能 22。 交织器可以改变turbo码的重量 分布,因此,交织器对turbo码性能的好坏有着重要作用 23。 在turbo码中,交织器使输入码元符号的顺序尽可能随机分布,使码元符号之间的相 关性减弱,从而使进入各个子译码器的信息序列之间不相关。这使得各个子译码器彼此独 立的工作,互相利用软判决信息,判决结果也因此逐渐准确。 但是,同样由于turbo码是以帧的形式编码,交织器的存在使得turbo码存在时延, 帧越长,时延越大。所以,只有允许较大时延的系统,才可以充分发挥turbo码的作用。 2.4.2 交织器的设计准则 设计turbo码交织器时应该遵循以下几个准则 : 1. 码重分布, 编码输出码字重量的均值应尽可能高, 码重分布在均值附近的码字应尽 可能多。 2. 最大程度地打乱原数据的排列顺序。 3 在设计交织器时,考虑具体系统的数据帧大小与系统时间的关系。尽量使交织长度 与数据帧长度相一致,或是数据帧长度的整数倍。 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 11 2.4.3 典型的交织器 通常交织器的种类可以分为:分组交织,随机交织,卷积交织。 (1) 分组交织 分组交织可以分为普通分组交织器和分组螺弦交织器。 普通分组交织器, 交织过程如图2.5所示, 将数据序列按行写入m n 矩阵, 按列的读 出。解交织是将交织后的数据序列按列写入m n 矩阵,按行读出。 1 n+1 (m-1)n+1 2n n+22n (m-1)n+2mn 写入 读 出 图2.5 简单分组交织器 普通分组交织器虽然能有效打乱序列,却不能打乱一些有着特殊排序规则的序列,从 而影响了turbo码的性能。 分组螺弦交织器,将数据序列按行写入m n 矩阵(m与n互素) 。从矩阵的左上角向 下方读取数据,每向下一行同时右移一位。再在行的方向对索引取模m,列的方向对索引 取模n2425。 即: () 1 1 mod ii rrm + + ,() 1 1 mod ii ccn + + 其中, i r和 i c分别表示第i比特的行索引和列索引,0,1,1in=l , 0 0r = , 0 0c = 。 (2) 随机交织 随机交织,是随机的产生交织器中元素的序号。在产生随机交织的规则时往往性能不 稳定,因此,在设计随机交织器时,通过仿真产生很多个随机交织规则,然后从中选取性 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 12 能最好的。 随机交织分可以分为伪随机交织和s-随机交织。 伪随机交织器,其基本交织规则如下,对于长为n的信息序列x,首先对每个比特的 位置进行标记,然后生成n个0,1之间的随机数z,然后把x中的比特顺序与z相对应, 对z进行排序,最后按z的排序读出与之相对应的x的比特。 s-交织器,把随机交织和分组交织比较好的结合了起来26。长为n的s-交织器的设 计步骤如下: 1. 选择正整数s,/ 2snlog-mapmax-log-mapsova, 而 从 实 现 算 法 的 复 杂 度 上 来 讲 maplog-mapmax-log-mapsova。因此,在实际选取turbo码译码的算法的过程 中需要充分考虑译码性能和实现复杂度。 3.6 本章小结 本章重点介绍了turbo码译码器的组成结构、turbo码迭代译码的思想及相关问题, 并且深入研究了构成turbo码译码器的分量码的各种算法:map译码算法、log-map译 码算法、max-log-map译码算法、sova译码算法。最后对这几种译码算法在性能和实 现复杂度上进行了比较。 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 21 4 turbo 码在awgn 信道中的仿真和分析 4.1 awgn 信道系统模型 turbo码并没有固定的设计准则, 它是通过模拟仿真各种参数的性能而得到的。 图4.1 是awgn信道模型,其中 1 k a =是衰落因子, k n是高斯噪声 35。 + skrk ak=1nk 图4.1 awgn信道模型 4.2 awgn 信道 turbo 码的仿真和结果分析 影响turbo码性能的参数很多, 这里分别就码率、 译码算法、 迭代次数、 交织器类型、 交织长度对turbo码性能的影响进行分析,给出了仿真结果。 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 22 4.2.1 不同码率对turbo码的性能影响 00.511.522.53 10 -6 10 -5 10 -4 10 -3 10 -2 10 -1 snr(db) b it e rr o r r a te 码率 rate=1/2 rate=1/3 图4.2 turbo码码率与误码率的关系 图4.2给出了turbo码在不同的编码率下的仿真结果。码率分别为1/2,1/3。两个分 量码的生成多项式为(7, 5)8 。采用随机交织,交织长度为640。译码算法采用log-map, 译码迭代次数为3。 由上图的仿真结果可知, 不同的码率明显影响了turbo码的性能。 图中1/3码率的turbo 码的误码率始终低于1/2码率的turbo码。在误码率为10 4时,码率为 1/3的turbo比码 率为1/2的turbo码信噪比提高2db左右。turbo码中存在一定的冗余,这些冗余信息对 迭代译码起重要作用,删余使冗余信息减小降低了校验信息的可靠性,因此,1/2码率的 turbo码比1/3码率的turbo码性能要差。 但是由于经过打孔的1/2码率的turbo码的校验 比特相对较少,因此传输所用的时延比1/3码率的turbo码小。在实际应用过程中,要考 虑具体的情况选择turbo码的码率。 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 23 4.2.2 不同译码算法对turbo码的性能影响 00.511.522.53 10 -6 10 -5 10 -4 10 -3 10 -2 10 -1 10 0 snr(db) b it e rr o r r a t e 译码算法 log-map max-log-map sova 图4.3 turbo码译码算法与误码率的关系 图4.3给出了采用不同译码算法下的turbo码仿真结果。turbo码码率为1/2,log-map 算法和max-log-map算法译码迭代次数为3。从图中可以观察到log-map译码算法性 能明显要优于max-log-map和sova。在误码率为10 4 时,log-map译码算法比 max-log-map译码算法好0.4db,比sova好2db以上。max-log-map 算法用到了近 似公式,故性能比log-map有所下降。这验证了3.3节中译码算法性能 maplog-mapmax-log-mapsova的结论。sova 算法虽然性能是几种算法中最差 的,但复杂性较低易于实现。在实际运用中,要结合具体的情况,权衡硬件的复杂度和性 能要求,选择合适的译码算法。 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 24 4.2.3 不同迭代次数对turbo码的性能影响 00.511.522.53 10 -6 10 -5 10 -4 10 -3 10 -2 10 -1 10 0 snr(db) b it e rr o r r a t e 迭代次数 niter=1 niter=3 niter=5 niter=7 niter=10 图4.4 turbo码译码迭代次数与误码率的关系 图4.4是turbo码的log-map译码算法的不同迭代次数的性能仿真曲线。 从图中可以 观察到,随着迭代次数的增加,相同信噪比情况下的误比特率逐渐降低。增加译码的迭代 次数可以一定程度地提高译码器性能。但是随着迭代次数的增加,性能曲线趋于收敛,性 能提高越来越不明显。因此,在选择译码算法的迭代次数时,要从分考虑到体统时间和性 能的变化趋势。在系统要求的译码时间内选择合适的迭代次数达到系统要求的性能指标。 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 25 4.2.4 不同交织器对turbo码的性能影响 00.511.522.53 10 -5 10 -4 10 -3 10 -2 10 -1 10 0 snr(db) b it e rr o r r a t e 交织器 random interleaver block interleaver 图4.5 turbo码交织器类型与误码率的关系 图4.5给出了采用随机交织和分组交织的turbo码仿真结果,交织长度为1280。从图 中可以看出采用随机交织的turbo码的性能要优于采用分组交织的turbo码。这是因为图 采用中的随机交织器比分组交织器更能分散turbo码的码字重量,消除突发错误。但是, 从图中也可以观察出,图中采用的随机交织器比分组交织器对性能的影响不很明显,这体 现出随机交织由于随机性而使性能好坏的不确定。因此,在选取随机交织器时需要仿真几 个,从中选出其中最好的一个。 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 26 4.2.5 不同交织长度对turbo码的性能影响 00.511.522.53 10 -6 10 -5 10 -4 10 -3 10 -2 10 -1 10 0 snr(db) b it e rr o r r a t e 交织长度 interleaver length=320 interleaver length=640 interleaver length=1280 图4.6 turbo码交织长度与误码率的关系 图4.2给出了采用不同交织长度的turbo码仿真结果, 交织长度分别是320bit、640bit、 1280bit。观察可知交织长度对误码率的影响,交织长度越大,性能就越好。原因是交织长 度有分散码重作用, 可以分散突发错误。 图中在误码率为10 4时交织长度1280bit 的turbo 码比交织长度640bit有0.2db的增益, 比交织长度为320bit的turbo码有2db左右的增益。 但是,由于turbo码的编译码都是以帧的形式通过迭代进行,因此帧太长会造成较长 的延时,交织长度越长,时延也越大。在实际应用中,要权衡译码性能和系统的时延,确 定最佳的交织长度。 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 27 4.3 基于 arm 的 turbo 编译码器验证 4.3.1 验证系统的结构 在turbo码编译码理论基础上,利用arm试验板对turbo码的编译码系统及交织方 案进行了简单的验证。 试验所用的是周力功公司的easyarm2114 开发实验板36。easyarm2114 开发实验 板是一款简单的32 位arm 单片机实验板采用的是philips的arm7tdmi-s 核微处理 器lpc2114,它采用冯诺依曼结构,三级流水线,适合处理复杂的编译码过程。开发板 具有jtag,调试isp,编程等功能板。板上提供了一些键盘、led、rs232等常用功能部 件。它具有零等待128k/256k字节的片内flash,16k 的sram,无需扩展存储器使系 统更为简单、可靠;内部具有uart 硬件i2c、spi、pwm、adc、定时器等众多外围部 件;64 管脚lqfp 封装;3.3v 和1.8v 系统电源,内部pll 时钟调整。easyarm2100 开发实验板电路原理图如图4.7所示。 图4.7 easyarm2100开发实验板电路原理图 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 28 pc产生信息 数据 uart0 编码 uart0 pc接收编码 后数据 图4.8 turbo码编码系统框图 pc发送编码 后数据 uart0 译码 uart0 pc接收译码 后数据 图 4.9 turbo码译码框图 图 4.8和图4.9 分别是turbo码编码系统框图和turbo码译码系统框图。系统采用交 织长度为1280bit,分组交织,log-map译码,译码迭代3次。图4.10所示为turbo码编 码流程图。图4.11所示为turbo码译码流程图。编码时,未编码码字(全1码字)由pc机 输入到arm实验板的串口uart0,经过编码后送回pc机,并在pc串口调试程序界面 中显示。 译码时, 同样由pc机向arm串口uart0输入已编码码字, 经过arm译码后, 送回pc显示结果(全1码字)。 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 29 pc向uart0 送入输入bit 编码开 始 分量码rsc1 编码 分量码rsc2 编码 分组交织 删除奇数位删除偶数位 并串转换 向uart1发送 turbo码编码后bit 结束 译码器dec2 译码开 始 pc向uart0 送入输入bit 并串转换 译码器dec1 交织 解交织 迭代次数 initer 结束 向uart1发送 turbo码译码后bit no yes 图4.10 编码流程图 图4.11 译码流程图 基于arm的turbo码编译码程序如下所示: #include config.h #define spi_cs (129) /* p0.29 */ #define spi_data (16) /* p0.6 */ #define spi_clk (14) /* p0.4 */ #define spi_iocon (spi_cs|spi_data|spi_clk) /* 定义spi接口的i/o设置字 */ uint8 coded_decoded_buf2560; / uart0数据接收缓冲区 uint8 rcv_new; / 接收新数据标志 /* 定义串口模式设置数据结构 */ typedef struct uartmode 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 30 uint8 datab; uint8 stopb; / 停止位,1/2 uint8 parity; / 奇偶校验位,0为无校验,1奇数校验,2为偶数校验 uartmode; /*串口uart0接收中断。*/ void _irq irq_uart0(void) uint8 i; if( 0 x04=(u0iir/ 设置接收到新的数据标志 for(i=0; i2) ) return(0); if( set.parity4 ) return(0); /* 设置串口波特率 */ u0lcr = 0 x80; / dlab位置1 bak = (fpclk4)/baud; u0dlm = bak8; u0dll = bak /* 设置串口模式 */ bak = set.datab-5; / 设置字长度 if(2=set.stopb) bak |= 0 x04; / 判断是否为2位停止位 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 31 if(0!=set.parity) set.parity = set.parity-1; bak |= 0 x08; bak |= set.parity4; / 设置奇偶校验 u0lcr = bak; return(1); /*turbo码编码*/ void turbocodingtraffic (int *trafficflow_source, float *coded_trafficflow_source,int *traffic_source_length) int i; int length_info = *traffic_source_length; gen_rand_index(length_info, 1); encoderm_turbo(trafficflow_source, send, length_info, 1); /turbo码编码 temp_send = send; if (turbo_puncture) /选择是否打孔 puncture(send, 3*length_info+4*m_num_reg, send_punc, 3, length_info/4, 4); temp_send = send_punc; for(i=0;i(3-turbo_puncture)*length_info+4*m_num_reg*(1-turbo_punctu re); i+) *(coded_trafficflow_source+i) = (float) *(temp_send+i); *traffic_source_length= (3-turbo_puncture)*length_info+4*m_num_reg*(1-turbo_puncture) ; /*turbo码译码程序*/ void turbodecodingtraffic (float *trafficflow_for_decode, int *trafficflow_decoded,int *trafficflow_length) int i; int length_info, length_total; int iteration; float *receive_punc = null; float *yk_turbo = null; float *la_turbo, *le_turbo, *llr_all_turbo; int *tempout; float en_rate = (float)pow(10, ebn0db*0.1); float lc_turbo = 4*en_rate*rate_coding; if (turbo_puncture) /选择是否打孔 length_info = (*trafficflow_length)/2; else 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 32 length_info = (*trafficflow_length-4*m_num_reg)/3; length_total = length_info+m_num_reg; if (turbo_puncture) /* 填充打孔位置 */ depuncture(trafficflow_for_decode, 2*length_info, receive_punc, 3, length_info/4, 4); demultiplex(receive_punc, length_info, yk_turbo, 1); else demultiplex(trafficflow_for_decode, length_info, yk_turbo, 1); /* 迭代接收信息 */ for (i=0; i2*length_total*2; i+) *(yk_turbo+i) = (float)( *(yk_turbo+i) * lc_turbo *0.5 ); for (i=0; ilength_total; i+) *(la_turbo+i) = *(le_turbo+i) = *(llr_all_turbo+i) = 0; for (iteration=0; iterationn_iteration; iteration+) /* 开始迭代*/ /* 分量译码器1 */ /* 从分量译码器2得到外部信息*/ de_interleave_float(la_turbo, le_turbo, type_interleaver, length_info, 1); for (i=length_info; ilength_total; i+) *(la_turbo+i) = 0; log_map_decoder(yk_turbo, la_turbo, 1, llr_all_turbo, length_total); /* caculate the extrinsic information */ for (i=0; ilength_total; i+) *(le_turbo+i) = *(llr_all_turbo+i) - *(la_turbo+i) - 2*(*(yk_turbo+2*i); /* 分量译码器2 */ /* 从分量译码器1得到外部信息*/ interleave_float(le_turbo, la_turbo, type_interleaver, length_info, 1); for (i=length_info; ilength_total; i+) *(la_turbo+i) = 0; /*采用log_map译码算法*/ 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 33 log_map_decoder(yk_turbo+2*length_total, la_turbo, 1, llr_all_turbo, length_total); for(i=0; ilength_total; i+) *(le_turbo+i) =*(llr_all_turbo+i) -*(la_turbo+i) - 2*(*(yk_turbo+2*length_total+2*i); /* 得到判决信息 */ decision(llr_all_turbo, length_total, tempout); de_interleave_int(trafficflow_decoded, tempout, type_interleaver, length_info, 1); *trafficflow_length = length_info; /*turbo码编码主函数 */ int main(void) uint8 counter; uint8 length=1280; uartmode uart0_set; pinsel0 = 0 x00000005; / 设置i/o连接到uart0 pinsel1 = 0 x00000000; io0dir = spi_iocon; rcv_new = 0; uart0_set.datab = 8; / 8位数据位 uart0_set.stopb = 1; / 1位停止位 uart0_set.parity = 0; / 无奇偶校验 uart0_ini(115200, uart0_set); / 初始化串口模式 u0fcr = 0 x81; / 使能fifo,并设置触发点为8字节 u0ier = 0 x01; / 允许rbr中断,即接收中断 /* 设置中断允许 */ vicintselect = 0 x00000000; / 设置所有通道为irq中断 vicvectcntl0 = 0 x26; / uart0中断通道分配到irq slot 0, 即优先级最高 vicvectaddr0 = (int)irq_uart0; / 设置uart0向量地址 vicintenable = 0 x00000040; / 使能uart0中断 turbocodingtraffic(rcv_buf, coded_buf, length); /对接收到的码字编码 counter = 0; while(1) / 等待中断 if(1=rcv_new) isendbuf(); rcv_counter+; / 接收计数值加一 rcv_new = 0; 烟 台 大 学 硕 士 学 位 论 文 烟 台 大 学 硕 士 学 位 论 文 34 return(0); /*turbo码译码主函数 */ int main(void) uint8 counter; uint8 length=2560; uartmode uart0_set; pinsel0 = 0 x00000005; / 设置i/o连接到uart0 pinsel1 = 0 x00
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年骨科常见病症诊断治疗能力检测试卷答案及解析
- 2025煤矿供销合同
- 2025年外科常见手术并发症应急处理模拟考试卷答案及解析
- 2025年呼吸内科常见疾病诊断治疗策略考核答案及解析
- 菏泽市公费医学毕业生选聘考试真题2024
- 2025年消化内科专业知识综合测验答案及解析
- 2025财产抵押借款合同范本
- 2025年心血管病学论述题考核试卷答案及解析
- 2025年风湿免疫科体液免疫反应考试答案及解析
- 2025年度妇产科学准入资格考试真题答案及解析
- 幼儿园饮用水突发污染事故应急处理预案
- 政治-中国特色社会主义教材探究与分享参考答案高中政治统编版必修一
- 湖南省长沙市师大附中博才实验中学2024-2025学年九年级上学期开学考试语文试题
- 《赏书法之韵》教学课件1
- 2024年新人教版八年级上册物理全册教案
- 2024年全国期货从业资格之期货投资分析考试高频题(附答案)
- 02R111小型立、卧式油罐图集
- 护理团体标准解读-成人氧气吸入疗法护理
- 1音名唱名音的分组
- 2024年河北邯郸引进博硕人才15人历年公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 伤口造口专科护士进修汇报
评论
0/150
提交评论