主要内容

使用并行计算工具箱的误码率模拟

这个例子展示了如何提高通信系统的执行速度,包括误码率模拟。为了提高这些系统的性能,可用的选项之一是并行化模拟。这个例子介绍了并行计算工具箱™(PCT)在误码率模拟中的使用。提出了两种可能的并行化误码率模拟的方法,并推荐了更好的方法。

License检查和打开并行池

本节检查PCT的可用性,如果可用,它将打开一个并行工作器池,并将池中可用工作器的最大数量分配给变量numWorkers。如果不可用,则赋值numWorkers = 1,在这种情况下,示例运行在单个核上。

[licensePCT ~] =许可证(“签出”“Distrib_Computing_Toolbox”);如果许可证是空的(ver(“平行”)))如果isempty (gcp (“nocreate”parpool));结束池=质量;numWorkers = pool.NumWorkers;其他的numWorkers = 1;结束
使用“local”配置文件启动并行池(parpool)…连接到并行池(工作人员数量:4)。

初始化

这个例子并行化空间多路复用示例演示PCT的用法,下面是模拟这个示例所需的参数。

EbNo = 1:2:11;% Eb/No in dBN = 2;%发送天线数M = 2;%接收天线数modOrd = 2;%星座大小= 2^modOrdnumBits = 1 e6;%位数numErrs = 100;%错误次数lenEbNo =长度(EbNo);%创建用于生成数据的本地随机流%可重复性。使用组合多重递归生成器支持金宝appsubstreams %。hStr = RandStream (“mrg32k3a”);%设置随机流[berZF, berMMSE] =交易(0 (lenEbNo, 3));[nerrsZF, nbitsZF nerrsMMSE nbitsMMSE] =交易(0 (numWorkers lenEbNo));

横跨Eb/No范围的并行化

第一个方法在Eb/No范围内并行执行,其中一个worker处理单个Eb/No值。这里的性能受到处理最高Eb/No值所需时间的限制。

simIndex = 1;str =“跨越Eb/No范围”;disp (“使用一个工作者处理一个Eb/No值进行误码率模拟……”);
执行误码率模拟与一个工作者处理一个Eb/No值…
抽搐parforidx = 1:lenEbNo [BER_ZF,BER_MMSE] = simBERwithPCT(N,M,EbNo,modOrd,...idx、hStr numBits numErrs);berZF (idx:) = BER_ZF (idx:);berMMSE (idx:) = BER_MMSE (idx:);结束timeRange = toc;clockBERwithPCT (simIndex timeRange timeRange, str);

并行化并行池中的工作线程数

第二种方法在可用worker的数量上并行执行,每个worker处理完整的Eb/No范围。然而,每个worker计数(total errors/numWorkers)错误,然后继续到下一个Eb/No值。这种方法同样有效地使用所有可用的核心。

simIndex = simIndex + 1;str =“在职员工总数”;种子= 0:numWorkers-1;disp (“执行误码率模拟,每个工作人员处理整个范围……”);
执行误码率模拟与每个工作者处理整个范围…
抽搐parforn = 1:numWorkers hStr = RandStream(“mrg32k3a”“种子”、种子(n));idx = 1:lenEbNo [BER_ZF,BER_MMSE] = simBERwithPCT(N,M,EbNo,modOrd,...idx、hStr numBits / numWorkers numErrs / numWorkers);nerrsZF(n,idx) = BER_ZF(idx,2);nbitsZF(n,idx) = BER_ZF(idx,3);nerrsMMSE (n, idx) = BER_MMSE (idx 2);nbitsMMSE (n, idx) = BER_MMSE (idx 3);结束结束bZF =总和(nerrsZF, 1)。/总和(nbitsZF, 1);bMMSE =总和(nerrsMMSE, 1)。/总和(nbitsMMSE, 1);计时工人= toc;

下面是在Windows®10,64位,英特尔®Xeon®CPU W-2133, 3.6GHz, 64GB RAM, 6核机器上获得的结果。表格中显示了上述方法的性能比较。我们可以看到,第二个方法比第一个方法性能更好。这些是在一次运行中获得的结果,并可能因运行而不同。

-------------------------------------------------------------------------------------------- 类型的并行化|运行时间(sec) |加速比1。横跨Eb/No范围| 1.9986 | 1.0000 2。在可用的工人的数量| 0.8362 | 2.3902  --------------------------------------------------------------------------------------------

下图显示了使用不同的并行化方法获得的零强迫(ZF)和最小均方误差(MMSE)接收机的误码率曲线。

plotBERwithPCT (EbNo berZF (: 1), berMMSE (: 1), bZF, bMMSE);

图空间多路复用包含一个轴。标题为2x2 Uncoded QPSK System的轴包含8个line类型的对象。这些对象表示通过Eb/No并行化的BER-ZF、通过Eb/No并行化的BER-MMSE、通过worker并行化的BER-ZF、通过worker并行化的BER-MMSE。

要为您的机器生成性能比较表,请取消注释以下代码行并运行整个脚本。

% clockBERwithPCT (simIndex timeRange计时工人,str);

附录

本例中使用了以下函数: