主要内容

数字预失真设计——离线训练神经网络

这个例子展示了如何使用一个神经网络应用数字预失真(DPD)来抵消效应的非线性功率放大器(PA)。侧重于神经网络的离线训练的例子DPD (NN-DPD)。在本例中,您

  • 生成OFDM信号。

  • 发送这些信号通过一个实际的PA和测量输出。

  • 火车一个NN-DPD。

  • NN-DPD Predistort OFDM信号,通过实际的PA,发送这个扭曲的信号和测量输出NN-DPD的有效性进行评估。

  • 比较记忆多项式DPD的结果。

介绍

非线性行为不是导致严重的信号失真,造成挑战错误一般高频和高带宽信号传输的接收5 g NR (1]。DPD信号传输的一种技术用于弥补PA非线性扭曲的信号。通常,PA非线性行为特征是提前和DPD应用逆多项式预失真使用某种形式的内存(2]。例如,看到数字预失真补偿功率放大器的非线性(通信工具箱)的例子。实验神经网络DPD技术显示了有前景的结果,提供更好的性能比传统的记忆多项式DPD (1][3][4]。

这个图表显示的是离线培训工作流程。首先,火车一个NN-DPD利用巴勒斯坦权力机构的输入和输出信号。然后,使用NN-DPD训练。

上面的路径显示了神经网络训练的工作流。在培训期间,测量PA的输入, u 巴勒斯坦权力机构的输出, x 。训练神经网络的逆PA和DPD使用它,使用 x 作为输入信号 u 作为目标信号。此体系结构也被称为间接学习(7]。

较低的路径显示部署工作流与之前的训练NN-DPD插入。在这个配置中,NN-DPD输入采样过量信号 u 和输出, y ,如PA的输入。巴勒斯坦权力机构的输出 z 是线性化信号。

NNDPD-Offline.drawio.png

NN-DPD结构

设计一个增广实值时滞神经网络(ARVTDNN)中描述4]。ARVTDNN有多个完全连接层和一个增广的输入。

记忆多项式模型已经普遍应用于行为建模和预失真的不是记忆效应。这个方程显示了PA记忆多项式。

x ( n ) = f ( u ( n ) ) = = 0 - - - - - - 1 k = 0 K - - - - - - 1 c u ( n - - - - - - ) | u ( n - - - - - - ) | k

输出是一个函数的延时输入的信号, u ( n ) ,也是权力的振幅 u ( n ) 和它的延时。

由于神经网络可以逼近任意函数,它有足够的层,每层神经元,可以输入 u ( n ) 神经网络和近似 f ( u ( n ) ) 。神经网络可以输入 u ( n - - - - - - ) | u ( n - - - - - - ) | k 减少所需的复杂性。

NN-DPD有多个完全连接层。输入层输入同步和正交组件( / 复杂的基带样本。的 / 样品和 延时输入作为的一部分在PA占内存模型。同时,的振幅 / 样品的 k t h 权力是作为输入提供给占巴勒斯坦权力机构的非线性。

neural_network_dpd.png

在培训期间,

n ( n ) = ( x ( n ) ) n ( n ) = ( x ( n ) ) o u t ( n ) = ( u ( n ) ) o u t ( n ) = ( u ( n ) ) ,

而在部署期间(推理),

n ( n ) = ( u ( n ) ) n ( n ) = ( u ( n ) ) o u t ( n ) = ( y ( n ) ) o u t ( n ) = ( y ( n ) ) ,

在哪里 分别是实部和虚部运营商。

生成的训练数据

生成训练、验证和测试数据。使用培训和训练NN-DPD验证数据。使用测试数据来评估NN-DPD性能。

选择数据源和带宽

选择系统的数据源。这个例子使用一个NXP Airfast LDMOS Doherty PA,这是连接到一个当地倪威仕特描述的功率放大器特性(通信工具箱)的例子。如果你没有获得一个PA、运行示例保存数据。

数据源=“保存数据”;

生成采样过量OFDM信号

生成OFDM-based信号激发PA。这个例子使用一个5 g-like OFDM波形。选择信号的带宽。选择一个更大带宽信号导致PA引入更多的非线性失真和企业受益的公司。生成六个OFDM符号,每个副载波16-QAM符号,使用ofdmmod(通信工具箱)qammod(通信工具箱)函数。保存16-QAM符号作为参考来计算维生素与性能。捕捉高阶非线性的影响,这个例子oversamples巴勒斯坦权力机构输入的7倍。

如果比较字符串(数据源,“倪威仕特”)bw =100年e6;%赫兹numOFDMSym = 6;% 6 OFDM符号每帧M = 16;%每个OFDM副载波包含一个16-QAM象征osf = 7;%的过采样因素PA输入ofdmParams = helperOFDMParameters (bw (osf);Fs = ofdmParams.SampleRate;[paInputTrain, qamRefSymTrain] =helperNNDPDGenerateOFDM (ofdmParams numOFDMSym, M);

通过信号通过PA和测量输出信号。降低目标输入功率值可能会导致减少失真。对于这个设置,当信号对5 dBm是最大值倪pxie - 4139型SMU的描述功率放大器特性(通信工具箱)没有饱和的例子可以支持。万博1manbetx

targetInputPower =5;% dBm威仕特= helperVSTDriver (“VST_01”);威仕特。DUTExpectedGain = 29;% dB威仕特。ExternalAttenuation = 30;% dB威仕特。DUTTargetInputPower = targetInputPower;% dBm威仕特。CenterFrequency = 3.7 e9;%赫兹%将信号发送到PA和收集输出paOutputTrain = helperNNDPDPAMeasure (paInputTrain Fs,威仕特);

重复相同的过程生成验证和测试数据。

%生成验证数据[paInputVal, qamRefSymVal] =helperNNDPDGenerateOFDM (ofdmParams numOFDMSym, M);paOutputVal = helperNNDPDPAMeasure (paInputVal Fs,威仕特);%生成测试数据[paInputTest, qamRefSymTest] =helperNNDPDGenerateOFDM (ofdmParams numOFDMSym, M);paOutputTest = helperNNDPDPAMeasure (paInputTest Fs,威仕特);如果%选择真实保存工作流数据保存数据保存savedDatabwnumOFDMSymofdmParamstargetInputPowerqamRefSymTrainpaInputTrainpaOutputTrainqamRefSymValpaInputValpaOutputValqamRefSymTestpaInputTestpaOutputTest% #好< UNRCH >结束elseif比较字符串(数据源,“保存数据”)helperNNDPDDownloadData()加载(“savedDataNIVST100MHz”);%向后兼容性更新ofdmParams。OversamplingFactor = ofdmParams.osr;ofdmParams。SampleRate = ofdmParams.SampleRate * ofdmParams.osr;Fs = ofdmParams.SampleRate;结束
开始下载的数据文件://www.tianjin-qmedu.com/supportfiles/spc/NNDPD/NNDPD万博1manbetx_deeplearning_uploads_R2023a.zip下载完成。提取文件。提取完成。

(5]和[6)描述正常化的好处避免梯度爆炸问题的输入信号,并确保神经网络收敛于一个更好的解决方案。规范化需要获得一个统一的标准偏差和零均值。对于这个示例,通信信号已经零均值,所以只规范化标准偏差。之后,你应该需要正规化NN-DPD输出值通过使用相同的比例因子。

scalingFactor = 1 /性病(paInputTrain);paInputTrainNorm = paInputTrain * scalingFactor;paOutputTrainNorm = paOutputTrain * scalingFactor;paInputValNorm = paInputVal * scalingFactor;paOutputValNorm = paOutputVal * scalingFactor;paInputTestNorm = paInputTest * scalingFactor;paOutputTestNorm = paOutputTest * scalingFactor;

实现和火车NN-DPD

在训练神经网络DPD之前,选择记忆的深度和程度的非线性。为了比较,指定一个记忆的深度5和非线性多项式5度的功率放大器特性(通信工具箱)例子,将用于比较性能。然后实现网络中描述神经网络公司结构部分。

memDepth = 5;%记忆深度的DPD(或PA模型)nonlinearDegree = 5;%非线性多项式程度inputLayerDim = 2 * memDepth + (nonlinearDegree-1) * memDepth;numNeuronsPerLayer = 40;lgraph = [featureInputLayer (inputLayerDim“名字”,“输入”)fullyConnectedLayer (numNeuronsPerLayer“名字”,“linear1”)leakyReluLayer (0.01,“名字”,“leakyRelu1”)fullyConnectedLayer (numNeuronsPerLayer“名字”,“linear2”)leakyReluLayer (0.01,“名字”,“leakyRelu2”)fullyConnectedLayer (numNeuronsPerLayer“名字”,“linear3”)leakyReluLayer (0.01,“名字”,“leakyRelu3”)fullyConnectedLayer (2“名字”,“linearOutput”)regressionLayer (“名字”,“输出”));

准备输入数据向量

创建输入向量。在训练和验证,使用巴勒斯坦权力机构输出NN-DPD一样NN-DPD输入和PA的输入输出。

%为每个时间步创建数组输入层作为培训的一个矩阵,%的验证和测试信号。inputProc = helperNNDPDInputLayer (memDepth nonlinearDegree);inputTrainMtx =过程(inputProc paOutputTrainNorm);inputTrainMtx = inputTrainMtx (memDepth + 1:最终,);重置(inputProc) inputValMtx =过程(inputProc paOutputValNorm);inputValMtx = inputValMtx (memDepth + 1:最终,);重置(inputProc) inputTestMtx =过程(inputProc paInputTestNorm);inputTestMtx = inputTestMtx (memDepth + 1:最终,);%创建输出两个元素为每个时间步(我问)向量真正outputTrainMtx = [(paInputTrainNorm (memDepth + 1:,:)),图像放大(paInputTrainNorm (memDepth + 1:最终,)));真正outputValMtx = [(paInputValNorm (memDepth + 1:,:)),图像放大(paInputValNorm (memDepth + 1:最终,)));真正outputTestMtx = [(paOutputTestNorm (memDepth + 1:,:)),图像放大(paOutputTestNorm (memDepth + 1:最终,)));

训练神经网络

训练神经网络离线使用trainNetwork函数。首先,定义培训使用的选项trainingOptions功能和设置hyperparameters。优化器使用亚当mini-batch大小为1024。最初的学习速率是4的军医,减少每五世的0.95倍。每两个时代使用验证评估训练性能。如果验证精度不会增加五验证,停止训练。使用实验管理器优化hyperparameters。

maxEpochs = 200;miniBatchSize = 1024;iterPerEpoch =地板(大小(inputTrainMtx 1) / miniBatchSize);选择= trainingOptions (“亚当”,MaxEpochs = MaxEpochs,MiniBatchSize = MiniBatchSize,InitialLearnRate = 4的军医,LearnRateDropFactor = 0.95,LearnRateDropPeriod = 5,LearnRateSchedule =“分段”,洗牌=“every-epoch”,OutputNetwork =“best-validation-loss”,ValidationData = {inputValMtx, outputValMtx},ValidationFrequency = 2 * iterPerEpoch,ValidationPatience = 5,ExecutionEnvironment =“cpu”,情节=“训练进步”,Verbose = false);

当运行这个示例中,您可以选择使用一个pretrained网络通过设置trainNow变量来。培训是可取的匹配网络仿真配置。如果使用不同的PA,信号带宽,或目标输入功率水平,重新培训网络。训练神经网络在基于Intel®Xeon (R) w - 2133 CPU大约需要6分钟来满足上面指定的早期停止标准。

trainNow =;如果trainNow netDPD = trainNetwork (inputTrainMtx、outputTrainMtx lgraph,选项);% #好< UNRCH >如果%选择真实保存工作流数据保存数据保存savedNetnetDPD结束其他的负载(“savedNetNIVST100MHz”);结束

下面显示了培训过程与给定的选项。随机初始化权重的不同层影响培训过程。获得最好的根均方误差(RMSE)最后的验证,培训几次相同的网络。

NNDPD_Net.png

测试NN-DPD

这个图显示了如何检查NN-DPD的性能。NN-DPD测试,通过测试信号通过NN-DPD和PA和检查这些性能指标:

  • 归一化均方误差(NMSE),测量NN-DPD的输入和输出之间的

  • 相邻信道功率比(ACPR),测量的输出使用comm.ACPR(通信工具箱)系统对象

  • 均方根误差向量大小百分比(维生素),通过比较测量16-QAM调制的OFDM解调输出符号使用comm.EVM(通信工具箱)系统对象

执行这些测试也为NN-DPD和记忆多项式DPD中描述数字预失真补偿功率放大器的非线性(通信工具箱)的例子。

NNDPD-Offline-test.drawio.png

如果比较字符串(数据源,“倪威仕特”)%通过NN-DPD传递信号dpdOutNN =预测(netDPD inputTestMtx ExecutionEnvironment =“cpu”);(memDepth dpdOutNN = [0, 1);双(复杂(dpdOutNN (: 1), dpdOutNN (:, 2))));dpdOutNN = dpdOutNN / scalingFactor;paOutputNN = helperNNDPDPAMeasure (dpdOutNN Fs,威仕特);%多项式DPD信号通过内存dpdOutMP = helperNNDPDMemoryPolynomial (paInputTest paInputTrain,paOutputTrain、nonlinearDegree memDepth);paOutputMP = helperNNDPDPAMeasure (dpdOutMP Fs,威仕特);如果%选择真实保存工作流数据保存数据保存savedTestResultspaOutputNNdpdOutNNdpdOutMPpaOutputMP% #好< UNRCH >结束elseif比较字符串(数据源,“保存数据”)负载(“savedTestResultsNIVST100MHz_R2023a”);结束%与NN-DPD进行绩效评估acprNNDPD = localACPR (Fs, paOutputNN bw);nmseNNDPD = localNMSE (paInputTest paOutputNN);evmNNDPD = localEVM (paOutputNN qamRefSymTest ofdmParams);%没有DPD评估性能acprNoDPD = localACPR (Fs, paOutputTest bw);nmseNoDPD = localNMSE (paInputTest paOutputTest);evmNoDPD = localEVM (paOutputTest qamRefSymTest ofdmParams);%记忆多项式DPD评估性能acprMPDPD = localACPR (Fs, paOutputMP bw);nmseMPDPD = localNMSE (paInputTest paOutputMP);evmMPDPD = localEVM (paOutputMP qamRefSymTest ofdmParams);%创建一个表格来显示结果维生素与= [evmNoDPD; evmMPDPD evmNNDPD];acpr = [acprNoDPD; acprMPDPD acprNNDPD];nmse = [nmseNoDPD; nmseMPDPD nmseNNDPD];disp(表(acpr nmse,维生素,“VariableNames”,{“ACPR_dB”,“NMSE_dB”,“EVM_percent”},“RowNames”,{“没有DPD”,“记忆多项式DPD”,神经网络DPD的}))
ACPR_dB NMSE_dB EVM_percent ____ ____⒈没有DPD -28.837 -22.063 5.859记忆多项式DPD DPD -38.866 -31.708 1.9311 -34.707 -28.507 2.5138神经网络
sa = helperPACharPlotSpectrum ([paOutputTest paOutputMP paOutputNN),{“没有DPD”,“记忆多项式DPD”,神经网络DPD的},ofdmParams.OversamplingFactor,“调制”-50年[-130]);

随着PA加热,性能特征变化。通过PA反复发送丛发性信号和情节系统性能作为时间的函数。每个测量大约需要6 s。每600年代,300年代停下来让PA冷却。情节表明系统性能降低冷却时间后重复使用和恢复时期。这种行为表明,一段时间后,巴勒斯坦权力机构特征可能会改变和DPD可能不提供所需的系统性能,如最大的维生素与价值。如果维生素值超过允许的最大值时,神经网络需要重新训练适应PA的变化特征。

runRepeatedBurstTest =;如果比较字符串(数据源,“倪威仕特”)& & runRepeatedBurstTest numMeas = 500;measTime = 6;acprNNDPD = 0 (numMeas, 1);nmseNNDPD = 0 (numMeas, 1);evmNNDPD = 0 (numMeas, 1);[acprLine, nmseLine evmLine] = initFigure ();tStart =抽搐;问= 1;p = 1: numMeas%通过NN-DPD传递信号dpdOutNN =预测(netDPD inputTestMtx ExecutionEnvironment =“cpu”);(memDepth dpdOutNN = [0, 1);双(复杂(dpdOutNN (: 1), dpdOutNN (:, 2))));paInput = dpdOutNN / scalingFactor;%的信号通过PApaOutputNN = helperNNDPDPAMeasure (paInput Fs,威仕特);%与NN-DPD进行绩效评估acprNNDPD(问)= localACPR (Fs, paOutputNN bw);nmseNNDPD(问)= localNMSE (paInputTest paOutputNN);evmNNDPD(问)= localEVM (paOutputNN, qamRefSymTest ofdmParams);updateFigure (acprLine nmseLine evmLine,acprNNDPD(问),nmseNNDPD(问),evmNNDPD(问),tStart);问=问+ 1;如果国防部(p 100) = = 0q = 1:50暂停(measTime) acprNNDPD(问)=南;nmseNNDPD(问)=南;evmNNDPD(问)=南;updateFigure (acprLine nmseLine evmLine,acprNNDPD(问),nmseNNDPD(问),evmNNDPD(问),tStart);问=问+ 1;结束结束结束其他的负载(“savedRepeatTestResultsNIVST100MHz”);图numMeas =长度(acprNNDPD);t = (0: numMeas-1) * 6;次要情节(1,1)情节(t, acprNNDPD)网格标题(“NN-DPD性能在许多破裂”)ylabel (“ACPR”次要情节(3、1、2)情节(t, nmseNNDPD)网格ylabel (“NMSE”次要情节(3,1,3)情节(t, evmNNDPD)网格ylabel (“维生素”)包含(“t (s)”)结束

如果比较字符串(数据源,“倪威仕特”)发布(威仕特)结束

进一步的探索

这个案例展示了如何训练NN-DPD利用测量数据从一个PA。给定的PA、目标输入功率和驱动信号,NN-DPD能够比记忆多项式DPD提供更好的性能。

你可以试着改变每层的神经元数,隐藏层和目标输入功率,看看这些参数NN-DPD性能的影响。你也可以尝试不同的输入信号,如OFDM信号具有不同的带宽。你也可以生成标准具体信号使用无线波形发生器应用程序。

辅助函数

OFDM信号的一代

输入信号测量和处理

绩效评估和比较

本地函数

函数acpr = localACPR (paOutput、sr、bw)% localACPR相邻信道功率比(ACPR)% = localACPR (X, R, BW)输入信号计算ACPR值X,% BW的假定信号带宽。X的采样率是R。acprModel = comm.ACPR (“SampleRate”老,“MainChannelFrequency”0,“MainMeasurementBandwidth”bw,“AdjacentChannelOffset”(bw bw),“AdjacentMeasurementBandwidth”bw);acpr = acprModel (paOutput);acpr =意味着(acpr);结束
函数nmseIndB = localNMSE(输入、输出)% localNMSE归一化均方误差(NMSE)% E = localNMSE (X, Y)计算之间的NMSE X和Y。nmse =总和(abs(输入输出)^ 2)/笔(abs(输入)^ 2);nmseIndB = 10 * log10 (nmse);结束
函数[rmsEVM, rxQAMSym] = localEVM (paOutput、qamRefSym ofdmParams)% localEVM误差向量幅度(维生素)% (E, Y) = localEVM (X,裁判,PARAMS)计算维生素与信号,X,考虑到%参考信号,REF。基于参数X是OFDM调制。% Downsample和解调波形= ofdmdemod (paOutput ofdmParams.fftLength ofdmParams.cpLength,ofdmParams.cpLength [1: ofdmParams.NumGuardBandCarrier / 2 + 1ofdmParams.fftLength-ofdmParams.NumGuardBandCarrier / 2 + 1: ofdmParams.fftLength]”,OversamplingFactor = ofdmParams.OversamplingFactor);rxQAMSym =波形(:)* ofdmParams.OversamplingFactor;%计算维生素维生素与= comm.EVM;rmsEVM =维生素(qamRefSym rxQAMSym);结束函数[acprLine, nmseLine evmLine] = initFigure ()% initFigure初始化重复跑图图次要情节(3、1、1)acprLine = animatedline;网格ylabel (“ACPR (dB)”)标题(“NN-DPD性能在许多破裂”次要情节(3、1、2)nmseLine = animatedline;网格ylabel (“NMSE (dB)”次要情节(3,1,3)evmLine = animatedline;网格ylabel (“维生素(%)”)包含(“t”)结束函数updateFigure (acprLine、nmseLine evmLine、acprNNDPD nmseNNDPD, evmNNDPD, tStart)% updateFigure更新重复跑图addpoints (acprLine toc (tStart) acprNNDPD) addpoints (toc (tStart), nmseLine nmseNNDPD) addpoints (toc (tStart), evmLine evmNNDPD) drawnowlimitrate结束

引用

[1]塔沃,机会,梨纹江,雅利安Sefidi,约瑟夫·r·Cavallaro。“神经网络公司通过反向传播神经网络模型。“2019年第53艾斯洛玛尔会议信号,系统,和电脑,358 - 62。美国太平洋格罗夫,CA: IEEE 2019。https://doi.org/10.1109/IEEECONF44664.2019.9048910。

[2]摩根,丹尼斯·R。,Zhengxiang Ma, Jaehyeong Kim, Michael G. Zierdt, and John Pastalan. “A Generalized Memory Polynomial Model for Digital Predistortion of RF Power Amplifiers.” IEEE Transactions on Signal Processing 54, no. 10 (October 2006): 3852–60. https://doi.org/10.1109/TSP.2006.879264.

[3],Yibo Ulf Gustavsson,亚历山大Graell我何晓卫Henk精英。“残余神经网络数字预失真。“在GLOBECOM IEEE 2020 - 2020全球通讯会议,01-06。台北,台湾:IEEE 2020。https://doi.org/10.1109/GLOBECOM42002.2020.9322327。

[4]王、东明Mohsin阿齐兹,Mohamed Helaoui Fadhel m·加努希。“增强实值时滞神经网络补偿无线发射器的扭曲和障碍。“IEEE 30神经网络和学习系统,没有。1(2019年1月):242 - 54。https://doi.org/10.1109/TNNLS.2018.2838039。

[5]太阳,金龙,胡安Wang Liang郭、杨杰,关Gui。“适应性深度学习辅助数字预失真考虑动态包络线。“69年IEEE车辆技术,不。4(2020年4月):4487 - 91。https://doi.org/10.1109/TVT.2020.2974506。

[6]太阳,金龙,Wenjuan Shi, Zhutian杨,杨杰,关Gui。“行为建模和宽带射频功率放大器的线性化使用BiLSTM网络5 g无线系统。“68年IEEE车辆技术,不。(2019年11月11日):10348 - 56。https://doi.org/10.1109/TVT.2019.2925562。

[7]Paaso、指甲花、Aarne Mammela。“比较直接学习和间接学习预失真的架构。“2008年IEEE国际研讨会在无线通信系统中,309 - 13所示。雷克雅未克:IEEE 2008。https://doi.org/10.1109/ISWCS.2008.4726067。

另请参阅

功能

对象

相关的话题