第二篇我们来介绍一下极化码的编码。

首先为了方便进行编码,我们需要进行数组的定义

signal = randi([0,1],1,ST);       %信息位比特,随机二进制数
frozen = zeros(1,FT);             %固定位比特,规定全为0
encode = zeros(1,N * block);      %编码后的比特
noise = snr(i) ^ 1/2 * randn(1,N * block);  %加性高斯白噪声

极化码的编码重点在于生成矩阵的产生,以及信息位、冻结位的选取。

  • 我们先来看生成矩阵的产生。

这是Arikan论文中的编码示意图,好像挺复杂,不过看不懂也没关系。我们来看一下编码过程中都做了哪些事。

首先是向量元素的翻转,通过翻转矩阵RN来实现,然后是信道的联合和信道的分裂。

什么?你问我为什么要这样做?我也不知道,极化码本身就建立在信道极化的现象之上,信道极化就是信道以特定方式联合和分裂所产生的现象。要想问为什么这么做,到土耳其找Arikan教授喝茶去吧。

论文中将这个翻转过程简化为矩阵运算,这就为我们进行程序仿真提供了方便:

其中:

BN 为排序矩阵,以N=8为例,解释它的作用:

传化过程为:%将向量下标减一后,转化为二进制数%----%将得到的二进制数反序排列%----%将反序后的二进制数转化为十进制数,加一%

例:

我们通过 BN 的递推式可以求得 BN再将其与 Fn 次克劳尼克积相乘,就能够得到生成矩阵。

这样说你明白了吗?什么?没有???

不错,说明你是个正常人。实际编码的时候,如果真的在matlab中将上述过程模拟一遍来求生成矩阵的话,是非常耗时耗力的。我们还有另外一条路可以走——找规律。

上式为 GN 的原始求解方法,其中 I 为单位矩阵,F 定义为[1 0; 1 1],RN 为翻转矩阵,对于 ,有:

N=4:

N=8:

可以发现 A 的元素排列十分有规律。前 N/2 列元素总是奇偶成对出现“1”,后 N/2 元素仅出现在偶数位,且与同处在一行的前一个“1”保持固定距离。根据此规律编写程序如下:

for i = 1 : N/2A(2 * i - 1, i) = 1;A(2 * i, i) = 1;A(2 * i, N / 2 + i) = 1;
end

递归部分:

G = A * kron(eye(2),Gpre);    %Gpre即上一层递归所得生成矩阵
Gpre = G;

如果将生成矩阵的产生编写为一个函数,则代码如下:

function GN = G(n)N = 2 ^ n;    Gpre = 1;for i=1:n       %每一层递归都相当于计算一个新的生成矩阵Ni = 2 ^ i;    %这个新的生成矩阵的维度为 Ni/2G = zeros(Ni);%Fn = zeros(Ni);A = zeros(Ni);for j = 1 : Ni / 2A(2 * j - 1 , j) = 1;A(2 * j , j) = 1;A(2 * j , Ni / 2 + j) = 1;endG = A*kron(eye(2),Gpre);Gpre = G;endGN = G;
end

  • 其次,来看信息位与冻结位的选取

信道极化过程中,有一部分信道的信道容量 I(W) 可以到达1,另一部分则趋近于0。信道容量反映了信道无失真传输的最大信息率,我们可以通过计算联合、分裂后各信道的信道容量并对它们进行排序,然后根据码率,选择排序靠前的信道作为信息传输的信道,剩余的信道用来传输冻结位。

另一种方法是计算巴氏参数Z(W),对于一个给定信道,巴氏参数越大说明该信道越不可靠。因此我们只需计算出联合、分裂后信道的巴氏参数,并对它们进行排序,然后根据码率选择巴氏参数较小的信道作为信息位,剩余信道作为冻结位。Arikan论文中给出了巴氏参数的递归求解办法,这使得我们能够很方便的通过matlab实现信息位的选取。

% 将巴氏参数计算过程封装在函数B_para之中方便调用,Z为数组,作为实参传递进来。数组中只有第一个元素。
% Z第一个元素可以通过计算得到,计算公式为Z(1) = 2*(p*(1-p))^0.5;
function y = B_para(Z)
for i = 1 : log2(N)         %迭代次数,N为码长Z_pre = Z;              %z_pre为上一层信道巴氏参数for j = 1 : 2^(i-1)     %本层运算使用的下标Z(2*j-1) = 2*Z_pre(j) - Z_pre(j)^2;Z(2*j) = Z_pre(j)^2;    %递推公式end
end  
y = z;    % y作为实参从函数中传递出去,y就是最终的巴氏参数

得到巴氏参数序列后,下面的操作就是将此序列进行排序,并根据码率确定信息位和固定位。

[Z_in_order,index] = sort( y );            %将巴氏参数从小到大排列
signal_index = sort( index( 1:S ) );      %前S位作为信息位
frozen_index = sort( index( s+1:end ) );    %后面的作为冻结位

得到了生成矩阵,确定了信息位冻结位,下面要做的就是进行编码。

for j=1:block    %对每一个码块都要进行编码处理encoded(1,((j-1)*N+1):(j*N)) = signal(((j-1)*S+1):(j*S))*G(signal_index,:) + frozen(((j-1)*F+1):(j*F))*G(frozen_index,:);
end                  %进行编码
encode = mod(encode,2);         %对2取模
encode = 2 * encode - 1;       %符号化
encode = encode + noise;    %叠加噪声

数组 encode 就是我们得到的编码矩阵。

编码matlab实现就是这样,为了照顾和知识点讲解同步,各个部分代码并未进行完整、严谨的书写。本系列最后我会整合与各章节中分散的代码,为大家带来可运行的代码,并将M文件附在文后。敬请期待。

下一节我们要探讨的是polar code中非常重要的译码部分——连续消除译码(SC译码)。

转载于:https://www.cnblogs.com/Mr-Tiger/p/7120590.html

极化码的matlab仿真(2)——编码相关推荐

  1. matlab画极化码,极化码的matlab仿真(1)——参数设置

    根据老师的安排,对于极化码的了解从仿真开始. 仿真的手段有很多种.可以利用C,C++,matlab等进行仿真的实现.其中matlab由于具有强大的函数库,和壮观的矩阵运算能力,被(我们老师课题组)看中 ...

  2. 数字双向码的matlab仿真,数字双相码的仿真 文字版.pdf

    通信原理上机实验报告 年级: 姓名: 学号: 时间: 数字双相码的仿真 一.实验目的 1.熟悉MATLAB软件的工作环境 2.熟练掌握数字双相码的MATLAB仿真 3.熟练掌握数字双相码的Simuli ...

  3. matlab霍夫曼图像压缩,用matlab仿真huffman编码在jpg图像压缩中的应用崔微微

    <用matlab仿真huffman编码在jpg图像压缩中的应用崔微微>由会员分享,可在线阅读,更多相关<用matlab仿真huffman编码在jpg图像压缩中的应用崔微微(3页珍藏版 ...

  4. 转载-极化码系列(4)-编码之极化信道可靠性估计

    前言 由Arikan发明的Polar Code的经典编码算法已经在第二节基本阐述完毕,第三节则是对前文的举例.在编码实例中,有两个前提假设: 1.假设采用二进制删除信道 2.假设采用巴氏参数来评估各分 ...

  5. 费诺码设计matlab,费诺编码的matlab实现.doc

    费诺编码的matlab实现.doc 多媒体技术实验报告学院:城南学院 姓名:学号:指导老师:尹波时间:2015年11月25日 教师评语:成绩 评阅教师 日期 实验一:费诺编码的matlab实现1实验目 ...

  6. MATLAB仿真——PCM编码——通信原理实验

    PCM编码仿真比较简单,我这里给出了实验代码和结果图 一.实验原理 二.实验代码 clear; clc; T=0.0005; t=-0.01:T:0.01; fs=2000; sdt=1/fs; t1 ...

  7. 数字双向码的matlab仿真,matlab2016 ccs

    (s 简称 CCSLink)提供了 MATLAB.TI DSP 集成开发环 境(CCS)和硬件 DSP 的双向连接,允许开发者在 MATLAB 的 环境下就可以完成对 CCS 和硬件目标 DSP 的操 ...

  8. 差动双相码matlab仿真,数字双相码的仿真.docx

    数字双相码的仿真 通信原理上机实验报告年级:姓名:学号:时间:数字双相码的仿真一.实验目的1.熟悉MATLAB软件的工作环境2.熟练掌握数字双相码的MATLAB仿真3.熟练掌握数字双相码的Simuli ...

  9. 通信使用matlab三元码实验报告,Matlab仿真DSBSC信号与双极性不归零码通信原理实验报告二实验...

    Matlab仿真DSBSC信号与双极性不归零码通信原理实验报告二实验 Matlab 仿真 DSB-SC 信号与双极性不归零码通信原理实验报告二实验题目:Matlab 仿真 DSB-SC 信号与双极性不 ...

最新文章

  1. 摩天轮社区_看房日记:难得!宜宾,又来一楼盘!一线江景+公园+学校,还有小户型、摩天轮...
  2. 无线节能信标调试说明-2021-3-3
  3. 图卷积网络进行骨骼识别代码_【骨骼行为识别】2s-AGCN论文理解
  4. linux配置静态ip
  5. SAP Spartacus delivery mode continue button enable与否的逻辑
  6. 关于CTeX的几个大坑
  7. 永远不要去依赖别人_感悟人生的经典句子:不要轻易去依赖一个人
  8. java unit scanner_Java输入输出常用类Scanner
  9. Mac下安装配置Tomcat 9, Homebrew安装Tomcat
  10. Quartus II破解出现的问题
  11. 2013年下半年 系统分析师 案例分析真题
  12. linux tintin 中文,GitHub - oiuv/tt: TinTin++ on Termux for pkuxkx,(全平台 Mud 客户端)。
  13. python pywifi 破解wifi密码
  14. 【黑客编程】手把手教你编写POC
  15. vue实现公告上下滚动
  16. 以云数据库MySQL为例深入分析对比:华为云更安全还是腾讯云更安全?
  17. TOM、腾讯、网易|你了解大厂企业邮箱的登陆入口吗?
  18. 雷锋网特约专访易科成志创始人、CEO潘真
  19. 水源热泵机组变流量水系统节能优化探讨
  20. node.js使用http.createServer搭建简单服务

热门文章

  1. Titanic - (XGBoost,RF随机森林,Fastai-tabular_learner)总结
  2. TruthTable真值表---python
  3. Testin云测率先全面支持Android 5.0手游云测试
  4. 墨菲定律:一个参数Drop_caches导致集群数据库实例崩溃
  5. Hive 表字段数据修改
  6. 听说 TBS x5 Webview 加载 H5 游戏提示申请相机权限
  7. 预测分析1:根据一年的历史数据预测后十年的数据趋势
  8. 前端之vue的CSS样式
  9. 自己的工具包Tools
  10. 微信小程序实现websocket及单人聊天功能