用于LLR估计的神经网络的训练和测试
这个例子展示了如何生成信号和通道损伤来训练一个名为LLRNet的神经网络,以估计精确的日志似然比(LLR)。
大多数现代通信系统,如5G新无线电(NR)和卫星第二代数字视频广播(dvb . s. 2)使用前向纠错算法,得益于软解调比特值。这些系统使用LLR方法计算软比特值。LLR被定义为一个比特为0的概率与一个比特为1或的概率之比的对数
,
在哪里 是k位接收符号,和 是 符号的一点。假设加性高斯白噪声(AWGN)信道,LLR表达式的精确计算为
在哪里 是噪声方差。指数和对数计算是非常昂贵的,特别是在嵌入式系统中。因此,大多数实际系统都使用最大对数近似。对于一个给定的数组 ,最大对数近似为
。
将这个替换到精确的LLR表达式中,就得到了最大-对数LLR近似[1]
。
LLRNet使用神经网络,在给定信噪比值的基带复接收符号下,估计精确的LLR值。具有少量隐含层的浅网络有可能在近似LLR算法相似的复杂度下估计精确LLR值[1]。
比较精确LLR, Max-Log Approximate LLR和M-ary QAM的LLRNet
5G NR采用M-ary QAM调制。本节探讨了LLRNet在估计16-、64-和256-QAM调制的LLR值时的准确性。假设在AWGN信道条件下运行的M-ary QAM系统。即使信道是频率选择性的,但符号是均衡的,这个假设也是有效的。下图显示了以下三种算法的计算LLR值:
确切的LLR
Max-log近似LLR
LLRNet
16-QAM LLR估计性能
为覆盖99.7%的符号值计算精确和近似LLR值(
)的可能接收符号。假设AWGN, 99.7% (
)的接收信号将在范围内
。在此空间上生成均匀分布的I/Q符号并使用qamdemod
函数计算精确LLR和近似LLR值。
M = 16;%调制顺序k = log2 (M);%位元/符号SNRValues = 5:5:5;在dB %numSymbols = 1 e4;numSNRValues =长度(SNRValues);symOrder = llrnetQAMSymbolMapping (M);const = qammod (symOrder 0:15, M,“UnitAveragePower”1);maxConstReal = max(真实(常量));maxConstImag = max(图像放大(常量));numBits = numSymbols * k;exactLLR = 0 (numBits numSNRValues);approxLLR = 0 (numBits numSNRValues);rxSym = 0 (numSymbols numSNRValues);为snrIdx = 1:numSNRValues SNR = SNRValues(snrIdx);noiseVariance = 10 ^(信噪比/ 10);σ=√noiseVariance);maxReal = maxConstReal + 3*sigma;minReal = -maxReal;maxImag = maxConstImag + 3*sigma;minImag = -maxImag;r = (rand(numSymbols,1)*(maxReal-minReal)+minReal) +…1我*(兰德(numSymbols, 1) * (maxImag-minImag) + minImag);rxSym (:, snrIdx) = r;exactLLR (:, snrIdx) = qamdemod (r, M, symOrder,…“UnitAveragePower”, 1“OutputType”,“llr”,“NoiseVariance”, noiseVariance);approxLLR (:, snrIdx) = qamdemod (r, M, symOrder,…“UnitAveragePower”, 1“OutputType”,“approxllr”,“NoiseVariance”, noiseVariance);结束
建立和训练神经网络
建立一个具有一个输入层、一个隐藏层和一个输出层的浅神经网络。向网络输入一个接收到的符号,并训练它估计精确的LLR值。由于网络期望真实的输入,创建一个两列向量,其中第一列是接收到的符号的真实值,第二列是接收到的符号的虚值。此外,输出必须是a 向量, 每个符号的比特数和 是符号的数量。
nnInput = 0 (numSymbols 2 numSNRValues);nnOutput = 0 (numSymbols k numSNRValues);为snrIdx = 1:numSNRValues rxTemp = rxSym(:,snrIdx);rxTemp = [real(rxTemp) imag(rxTemp)];nnInput (:,:, snrIdx) = rxTemp;llrTemp = exactLLR (:, snrIdx);nnOutput(:,:,snrIdx) =重塑(llrTemp, k, numSymbols)';结束
对于16-QAM符号,隐藏层有8个神经元,输出层有4个神经元,对应于每个符号的比特数。的llrnetNeuralNetwork函数返回一个预先配置的神经网络。对神经网络进行三种不同SNR值的训练。使用精确的LLR值qamdemod
函数为期望输出值。
hiddenLayerSize = 8;trainedNetworks =细胞(1、numSNRValues);为snrIdx = 1: numSNRValues流('训练神经网络为SNR = %1.1fdB\n',…SNRValues(snrIdx)) x = nnInput(:,:,snrIdx)';y = nnOutput (:,:, snrIdx) ';MSExactLLR =意味着(y(:)。^ 2);流('\tMean Square LLR = %1.2f\n'MSExactLLR)训练网络。如果可以的话,使用并行池。火车的三倍%,并选择最好的一个。mse =正;为p=1:3 netTemp = llrnetNeuralNetwork(hiddenLayerSize);如果parallelComputingLicenseExists() [netTemp,tr] = train(netTemp,x,y,“useParallel”,“是的”);其他的[netTemp, tr] =火车(netTemp, x, y);结束%测试网络predictedLLRSNR = netTemp (x);mseTemp =执行(netTemp y predictedLLRSNR);流('\t\tTrial %d: MSE = %1.2e\n'、p mseTemp)如果mse > mseTemp mse = mseTemp;网= netTemp;结束结束%存储训练过的网络trainedNetworks {snrIdx} =净;流('\tBest MSE = %1.2e\n'mse)结束
训练神经网络的信噪比= -5.0dB
Mean Square LLR = 4.43
试验1:MSE = 7.44e-05试验2:MSE = 6.90e-05试验3:MSE = 6.81e-05
Best MSE = 6.81e-05
训练神经网络的SNR = 0.0dB
Mean Square LLR = 15.74
试验一:MSE = 1.86e-03试验二:MSE = 4.04e-04试验三:MSE = 9.05e-05
最佳MSE = 9.05e-05
训练SNR = 5.0dB的神经网络
Mean Square LLR = 60.01
试验1:MSE = 8.59e-03试验2:MSE = 2.19e-02试验3:MSE = 2.14e-02
最佳MSE = 8.59e-03
该网络的性能指标为均方误差(MSE)。最终的MSE值表明,神经网络收敛到一个MSE值,该值至少比均方精确LLR值小40 dB。注意,随着信噪比的增加,LLR值也会增加,这就导致了相对较高的MSE值。
结果16-QAM
将LLRNet的LLR估计值与精确LLR和近似LLR的估计值进行比较。模拟1e4 16-QAM符号,并使用所有三种方法计算LLR值。不要使用我们在前一节中生成的符号,以免给LLRNet不公平的优势,因为这些符号是用来训练LLRNet的。
numBits = numSymbols * k;d = randi([0 1], numBits, 1);txSym = qammod (d, M, symOrder,“InputType”,“一点”,“UnitAveragePower”1);exactLLR = 0 (numBits numSNRValues);approxLLR = 0 (numBits numSNRValues);predictedLLR = 0 (numBits numSNRValues);rxSym = 0(长度(txSym), numSNRValues);为snrIdx = 1:numSNRValues SNR = SNRValues(snrIdx);(= 10 ^(信噪比/ 10);r = awgn (txSym,信噪比);rxSym (:, snrIdx) = r;exactLLR (:, snrIdx) = qamdemod (r, M, symOrder,…“UnitAveragePower”, 1“OutputType”,“llr”,“NoiseVariance”(开关);approxLLR (:, snrIdx) = qamdemod (r, M, symOrder,…“UnitAveragePower”, 1“OutputType”,“approxllr”,“NoiseVariance”(开关);网= trainedNetworks {snrIdx};X = [real(r) imag(r)]';tempLLR =净(x);predictedLLR(:,snrIdx) =重塑(tempLLR, numBits, 1);结束qam16Results。exactLLR = exactLLR; qam16Results.approxLLR = approxLLR; qam16Results.predictedLLR = predictedLLR; qam16Results.RxSymbols = rxSym; qam16Results.M = M; qam16Results.SNRValues = SNRValues; qam16Results.HiddenLayerSize = hiddenLayerSize; qam16Results.NumSymbols = numSymbols;
下图显示了精确LLR,最大-对数近似LLR,以及LLR值对奇数位接收符号实部的LLRNet估计。即使对于低信噪比值,LLRNet也会匹配精确的LLR值。
llrnetPlotLLR (qam16Results“16-QAM LLR比较”)
64-QAM和256-QAM LLR估计性能
检查LLRNet是否可以估计高阶QAM的LLR值。对64-QAM和256-QAM重复对16-QAM所遵循的相同过程llrnetQAMLLRhelper函数。下图显示了精确LLR,最大-对数近似LLR,以及LLR值对奇数位接收符号实部的LLRNet估计。
trainNow =假;如果trainNow% 64-QAM的参数simParams(1)。M = 64;% #好< UNRCH >simParams(1)。SNRValues = 0:5:10;simParams(1)。HiddenLayerSize = 16;simParams(1)。NumSymbols = 1e4; simParams(1).UseReLU = false;%参数256-QAMsimParams(2)。M = 256;simParams(2)。SNRValues = 0:10:20;simParams(2)。HiddenLayerSize = 32;simParams(2)。NumSymbols = 1e4; simParams(2).UseReLU = false; simResults = llrnetQAMLLR(simParams); llrnetPlotLLR(simResults(1),sprintf(“% d-QAM LLR比较”), simResults (1) . m) llrnetPlotLLR (simResults (2), sprintf (“% d-QAM LLR比较”), simResults (2) . m)其他的负载(“llrnetQAMPerformanceComparison.mat”,“simResults”)为p = 1:长度(simResults) llrnetPlotLLR (simResults (p), sprintf (“% d-QAM LLR比较”), simResults (p) . m)结束结束
DVB-S.2包错误率
DVB-S.2年代ystem uses a soft demodulator to generate inputs for the LDPC decoder. Simulate the packet error rate (PER) of a DVB-S.2 system with 16-APSK modulation and 2/3 LDPC code using exact LLR, approximate LLR, and LLRNet usingllrNetDVBS2PER函数。该函数使用comm.PSKDemodulator
系统对象™和dvbsapskdemod
函数来计算精确和近似的LLR值和comm.AWGNChannel
系统对象来模拟信道。
集simulateNow
的值为true(或在下拉菜单中选择“模拟”)来运行PER模拟subsystemType
,EsNoValues
,numSymbols
使用llrnetDVBS2PER函数。如果并行计算工具箱™安装时,此函数使用parfor
命令并行运行模拟。在Intel®Xeon®W-2133 CPU @ 3.6GHz上运行运行Code on Parallel Pools(并行计算工具箱)大小为6,模拟时间约为40分钟。集simulateNow
来假
(或在下拉菜单中选择“Plot saved results”),加载的值的PER结果subsystemType
=“16 apsk 2/3”
,EsNoValues
=8.6:0.1:8.9
,numSymbols
=10000
。
集trainNow
来真正的
(或在下拉菜单中选择“训练LLRNet”),为的每一个值训练LLR神经网络EsNoValues
,为给定subsystemType
和numSymbols
。如果并行计算工具箱安装时,火车
函数可以用可选的名称-值对调用“useParallel”
设置为“是的”
并行运行模拟。在Intel Xeon W-2133 CPU @ 3.6GHz上运行一个运行Code on Parallel Pools(并行计算工具箱)6码,模拟大约需要21分钟。集trainNow
false(或在下拉菜单中选择“使用保存的网络”)加载训练的LLR神经网络subsystemType
=“16 apsk 2/3”
,EsNoValues
=8.6:0.1:8.9
。
有关DVB-S.2的更多信息PER模拟,参见DVB-S.2Link,包括Simulink中的LDPC编码的例子。有关培训网络的更多信息,请参阅llrnetTrainDVBS2LLRNetwork功能和[1]。
simulateNow =假;如果simulateNow subsystemType =“16 apsk 2/3”;% #好< UNRCH >EsNoValues = 8.6:0.1:8.9;在dB %numFrames = 10000;numErrors = 200;trainNow =假;如果trainNow & & (~ strcmp (subsystemType,“16 apsk 2/3”) | | ~ isequal (EsNoValues, 8.6:0.1:9))%为每个EsNo值训练网络numTrainSymbols = 1 e4;hiddenLayerSize = 64;llrNets = llrnetTrainDVBS2LLRNetwork(subsystemType, EsNoValues, numTrainSymbols, hiddenLayerSize);其他的负载(“llrnetDVBS2Networks”,“llrNets”,“subsystemType”,“EsNoValues”);结束%用精确LLR、近似LLR和LLRNet模拟PER[perLLR, perApproxLLR perLLRNet] = llrnetDVBS2PER (subsystemType、EsNoValues llrNets, numFrames, numErrors);llrnetPlotLLRvsEsNo (perLLR、perApproxLLR perLLRNet、EsNoValues subsystemType)其他的负载(“llrnetDVBS2PERResults.mat”,“perApproxLLR”,“perLLR”,“perLLRNet”,…“subsystemType”,“EsNoValues”);llrnetPlotLLRvsEsNo (perLLR、perApproxLLR perLLRNet、EsNoValues subsystemType)结束
结果表明,在不使用对数和指数等任何昂贵的运算的情况下,LLRNet的性能几乎与精确LLR相当。
进一步的探索
为DVB-S尝试不同的调制和编码方案。2系统。调制类型和编码率的完整列表在DVB-S.2Link,包括Simulink中的LDPC编码的例子。你也可以尝试不同大小的网络隐藏层,以减少操作的数量,并衡量与精确LLR相比的性能损失。
本例使用了这些辅助函数。检查这些文件,了解实现的细节。
llrnetDVBS2PER.m:模拟DVB-S.2PER使用精确LLR,近似LLR,和LLRNet LLR
llrnetTrainDVBS2LLRNetwork.m:训练DVB-S.2的神经网络LLR估计
llrnetQAMLLR.m:训练M-ary QAM LLR估计的神经网络,并计算精确LLR、近似LLR和LLRNet LLR
llrnetNeuralNetwork.m:配置一个用于LLR估计的浅神经网络
参考文献
[1] O. Shental和J. Hoydis,““机器LLRning”:学习软解调”,2019 IEEE Globecom讲习班(GC Wkshps), Waikoloa, HI,美国,2019年,第1-7页。
相关的话题
- MATLAB中的深度学习(深度学习工具箱)