一、AFF3CT简介
AFF3CT是一个开源工具箱,专门用于前向纠错(FEC或信道编码)。它支持广泛的编码:从Turbo码和低密度奇偶校验(LDPC)码到极化码。该工具箱可以用作快速评估算法特性的模拟器,也可以用作软件定义无线电系统中的库。
图 1 AFF3CT系统框图及主要参数
一种编码方案的验证需要估计其错误率的性能。通常,没有一个简单的数学模型来预测这种性能。唯一实际的解决方案是对整个通信链路进行蒙特卡罗模拟:一些数据被随机生成、编码、调制、噪声、解码,然后通过测量接收器上的位误码率(BER)和帧错误率(FER)来估计性能。这个过程产生了三个主要问题:
1)模拟时间:必须模拟100个错误帧以上才能准确估计FER/BER。因此,测量107的FER至少需要模拟109次传输。假设一帧为1000位,那么模拟器就必须模拟1012次比特传输,这导致了译码算法的复杂性非常高。
2)算法的兼容性:对于每种代码,都有几种解码算法可用。虽然描述一个独特的编码方案很简单,但要有一个统一的软件描述来支持所有的编码方案及其相关的算法,则更具挑战性。这种困难来自于描述信道码和相关解码器所必需的数据结构的异构性:turbo码使用三叉树,LDPC码在因子图上定义良好,而极性码使用二叉树有效地解码。
3)可重复性:从文献中重现结果通常是很乏味的。这可以用定义一个通信系统所需的大量经验参数来解释,而且并非所有这些参数都总是在文献中显示出来。此外,模拟器的源代码很少是公开可用。因此,大量的时间被花在了“重新发明轮子”上,只是为了能够与最先进的结果进行比较。
针对上述存在问题:AFF3CT在ref文件夹中提供了一个包含所有所需参数的预模拟性能曲线数据库。用户可以直接观察误码率与误帧率曲线,而无需再对整个通信链道进行仿真模拟,从而减少了大量的模拟时间。
相较于其他开源平台来说,AFF3CT包含了一个统一的编解码方支持所有的编码方案及其相关的算法,能够使用户在这一个工具箱中仿真多种先进的编解码方式,它的兼容性对用户来说是非常友好的。
图 2 AFF3CT与其他开源工具箱对比图
信道编码的一个重要方面是能够重现最先进的结果,因为有许多可能的配置,而且重新发现这些配置是很耗时的,AFF3CT提供了各种编码方案的常见参数配置,能够使用户快速实现仿真,而无需将时间花费在经验参数的设定上。
二、AFF3CT下载及运行
2.1 AFF3CT的下载
AFF3CT提供了无需依赖的AFF3CT远程预编译版本,官网下载链接:https://aff3ct.github.io/download.html 。本文以稳定版本AFF3CT-3.0.2在Windows 64位操作系统进行学习。官网下载网络不稳定,已将软件压缩包保存至Source_Code路径。
2.2AFF3CT的安装与运行
1)将上述压缩包进行解压,打开文件可看到如下目录:
2)Win+R输入cmd进入命令行界面,进入解压后的文件夹中的bin目录:
3)在命令行界面输入可执行文件名称并在后面添加简单仿真参数:
该命令行输入的是以polar码进行编码,信息为1723比特,帧大小为2048比特,信噪比从1到4dB,信噪比步进大小为1进行仿真。
4)运行结果如下:
2.3 AFF3CTGUI界面
AFF3CT还提供了Python GUI可视化界面PyBER,PyBER在ref文件夹中提供了大量的参考输出图形。
如图所示,在ref文件夹下包含多种仿真图形,右侧图形显示的是低密度奇偶校验码在高斯加性白噪声下,使用BPSK调制,使用最大似然权重位翻转纠错方法下的误码率、误帧率、BE/FE以及吞吐量。
用户也可将自己的仿真结果在该GUI界面打开,显示自定义参数下的仿真图形。如下图所示,在txt文件中写入仿真结果并在PyBER中打开,我们可以对仿真结果进行图形展示。
三、参数及运行结果解释
3.1参数解释
自定义一组仿真参数,我们对下图中的参数进行解释:
1)--sim-type:选择仿真类型,标准链路与交织链路;
可选值:BFER(默认),BFERI
eg:--sim-type BFERI
2)--sim-cde-type,-c:选择编码方式参数;
参数-c可以对仿真的编码方式进行设定,如-c BCH代表对仿真进行BCH编码。AFF3CT支持12种不同的编码方式,并且还可以不设定编码方式。值得注意的是在BFERI模拟类型(包含交织/解交织的通信系统)中,只有polar码、RSC、RSC_DB、LDPC和未编码的方式可用。
3)--src-info-bits, -K:信息位数参数;
eg: --src-info-bits 64 -K 128
仿真选择的是7-3码,故K值为3。
4) --src-type: 用于生成 K 个信息位的方法;
eg: --src-type RAND:随机产生K个信息位。
5)--sim-noise-min,-m: 设置要模拟的最小噪声能量值。
--sim-noise-max, -M: 设置要模拟的最大噪声能量值。
这个参数是一种设置噪声范围的方法,你也可以使用--sim-noise-range, -R:设置噪声能量范围以在MATLAB样式矢量中运行。对噪声能量进行设置,仿真出你需要的噪声点的图形。如:-R "0.5:1,1:0.05:1.2,1.21"
6)--sim-noise-step, -s:设置每次模拟迭代之间的噪声能量步长。
在最小噪声能量值与最大噪声能量值之间进行仿真的步进长度,如-s “0.2”
7) --mnt-max-fe, -e: 为每个噪声点设置要模拟的最大帧误差数。
仿真中设置的是-e “1000”代表仿真模拟的最大帧错误数量,默认值100。
8)--src-implem: 选择该算法的实现来生成信息位。
通常情况来说,实现方式对仿真并无多大影响,在进行仿真时如无特殊需求,选择默认的实现方式即可,对于其他的实现参数我不做过多介绍。
9)--mdm-type:选择调制类型,能够选择的调制方式如下,用户也可自定义调制方式。
3.2运行结果解释
运行上一节的命令行后,我们得到了如下的运行结果:
- Es/N0:每个传输符号的信噪比,
,其中,𝑅是比特率,𝑏𝑝𝑠是每个符号的比特数;
- Eb/N0:每个信息位的信噪比;
- FRA:模拟的帧数;
- BE:比特错误数量;
- FE:帧错误数量;
- BER:误码率
- FER:误帧率
- SIM_THR:仿真通信吞吐量
- ET/RT:在计算点的过程中,此列显示对剩余时间(RT)的估计值,一旦计算完成,这就是经过的总时间(ET)。
(第一次写博客,欢迎各位批评指正!)