这个例子展示了如何使用NXP Airfast放大器的输入和输出信号来描述功率放大器(PA)。可选地,您可以使用硬件测试设置(包括带有矢量信号收发器(VST)的NI PXI机箱)来测量运行时的信号。
您可以使用表征结果来模拟PA使用comm.MemorylessNonlinearity
(通信工具箱)系统对象或无记忆非线性(通信工具箱)块。对于带内存的PA模型,可以使用功率放大器块。您可以使用这些模型来设计数字预失真(DPD)使用comm.DPD
(通信工具箱)和comm.DPDCoefficientEstimator
(通信工具箱)系统对象或DPD(通信工具箱)和DPD系数估计量(通信工具箱)块。有关更多信息,请参见功率放大器非线性的数字预失真补偿(通信工具箱).
这个示例可以在带有VST的NI PXI机箱上运行,以在运行时测量PA输入和输出信号。VST是一种高带宽射频仪器,它结合了矢量信号发生器(VSG)和矢量信号分析仪(VSA)。以下NI PXI机箱配置用于捕获保存的信号:
NI PXIe-5840矢量信号收发器
NI PXIe-4139源测量单元(SMU)
倪pxie - 4145型SMU
NI-RFSG软件
作为被测设备(DUT),本例使用NXP Airfast LDMOS Doherty PA,工作频率3.6-3.8 GHz,增益29 dB。该PA需要29V, 5V, 3v, 1.6V和1.4V直流偏置,由PXIe-4139和PXIe-4145 smu提供。
在NI PXI控制器上安装MATLAB®以使用硬件设置运行此示例,如下图所示。MATLAB在PXI控制器上运行,生成测试波形并下载到VSG。VSG将测试波形发送给PA, VSA在PA输出处接收受损波形。MATLAB从VSA收集PA输出并进行PA表征。
设置数据源变量为“硬件”
使用上面描述的硬件设置通过PA运行测试信号。测试信号可以是类似5g的OFDM波形,也可以是两个音调,如下节所述。设置数据源变量为“来自文件”
使用预先录制的数据。
数据源=
“来自文件”;
如果testSignal
是“OFDM”
,本例使用类似5g的OFDM波形,每个子载波带有64-QAM调制信号。如果testSignal
是“音调”
,本例使用1.8 MHz和2.6 MHz的两个音调,测试由PA引起的互调。
testSignal =“OFDM”;开关testSignal情况下“OFDM”bw =
100年e6;[txWaveform, sampleRate numFrames] = helperPACharGenerateOFDM (bw);情况下“音调”bw = 3 e6;[txWaveform, sampleRate numFrames] = helperPACharGenerateTones ();结束
为了识别高阶非线性,必须对测试信号进行过采样,至少要达到预期的非线性阶数。在这个例子中,我们运行一个非线性为7阶的网格搜索。上采样7,以覆盖可能的七阶非线性。同时,对波形振幅进行归一化处理。
overSamplingRate = 7;filterLength = 6 * 70;lowpassfilter = firpm(filterLength,[0 /70 10/70 1],[1 10 0]); / /输出firInterp = dsp。FIRInterpolator (overSamplingRate lowpassfilter);txWaveform = firInterp ([txWaveform;0 (filterLength / overSamplingRate / 2,1)]);txWaveform = txWaveform ((filterLength / 2) + 1:最终,1);%去除瞬变txWaveform = txWaveform / max (abs (txWaveform));将波形归一化sampleRate = sampleRate *过放大;
如果数据源
变量设置为“来自文件”
,加载预先录制的数据。如果数据源
变量设置为“硬件”
,使用VST通过PA运行测试信号。创建一个helperVSTDriver对象来与VST设备通信。资源名称设置为分配给VST设备的资源名称。这个示例使用“VST_01”
.对于NI设备,您可以使用NI Measurement & Automation Explorer (MAX)应用程序找到资源名称。
如果比较字符串(数据源,“硬件”) VST = helperVSTDriver(“VST_01”);
设置DUT和衰减器的预期增益值。因为PA输出连接到一个30db衰减器,所以将VSA外部衰减设置为30。设置DUT的期望增益为29 dB,增益精度为1 dB。将采集时间设置为大约40k个样本的值。设置目标输入功率为8dbm。您可以增加这个值,使PA更接近非线性区域。
威仕特。DUTExpectedGain = 29;% dB威仕特。ExternalAttenuation = 30;% dB威仕特。AcquisitionTime = 0.9 e - 3 * (53.76 e6 / sampleRate);%秒威仕特。DUTTargetInputPower =8;% dBm威仕特。CenterFrequency = 3.7 e9%赫兹
下载测试波形到VSG。测量输出。
写入波形(VST,txWaveform,sampleRate,testSignal)结果= runpammeasurements (VST);发行版(威仕特)其他的%从VST加载预先录制的结果开关testSignal情况下“OFDM”dataFileName = sprintf (“helperPACharSavedData % dMHz”1、bw / e6);情况下“音调”dataFileName =“helperPACharSavedDataTones”;结束负载(dataFileName“结果”,“sampleRate”,“overSamplingRate”,“testSignal”,“numFrames”)结束
将结果映射到局部变量中。
referencePower = results.ReferencePower;measuredAMToAM = results.MeasuredAMToAM;paInput = results.InputWaveform;paOutput = results.OutputWaveform;linearGaindB = results.LinearGain;
使用。绘制测试信号的频谱dsp。简介
(DSP系统工具箱)系统对象。
saInput = helperPACharPlotInput(paInput, sampleRate, testSignal, bw);
绘制PA的AM/AM特性。
helperPACharPlotSpecAnAMAM (referencePower measuredAMToAM)
为了更好地查看,请关注增益与输入功率的比值,而不是输出功率与输入功率的比值,然后再次绘图。
helperPACharPlotSpecAnGain (referencePower measuredAMToAM)
PA在-1到17 dBm的输入功率范围内基本上是线性的,在这个范围内只有大约1dB的变化。增益曲线的宽度是由于PA的记忆效应。
使用测量的PA输入和输出数据来模拟PA。然后,您可以使用此模型来模拟包含此PA的系统,并对参数进行微调。这个例子考虑了三种模型:无记忆非线性、记忆多项式和带交叉项的记忆多项式。
无记忆的非线性损害使输入信号的幅度和相位失真。振幅失真为幅相调制(AM/AM),相位失真为幅相调制(AM/PM)。的comm.MemorylessNonlinearity
(通信工具箱)系统对象和无记忆非线性(通信工具箱)Block实现了几种这样的扭曲。使用PA输入和输出数据创建一个查找表,用于此对象或块。
为了描述AM/AM传递函数,计算输入功率值范围的平均输出功率。在发射机和接收机之间分割的100欧姆阻抗上测量的是伏特。将测量的基带样本转换为dBm中的功率值。+30 dB是指dBW到dBm的转换,-20 dB是指100欧姆阻抗。
paInputdBm = mag2db(abs(paInput)) + 30 - 20;paOutputdBm = mag2db(abs(paOutput)) + 30 - 20;
将输入功率值划分到不同的容器中。的边缘
变量包含箱子边,而idx
变量包含每个输入功率值的bin值的索引。
[N,边缘,idx] = histcounts (paInputdBm,“BinWidth”, 0.5);
对于每个仓,计算仓的中点,平均输出功率和平均相移。输入功率不应小于最大输入功率20db。将结果存储在一个三列矩阵中,其中第一列是dBm的输入功率,第二列是dBm的输出功率,最后一列是相移。
minInPowerdBm = max(paInputdBm) - 20;minIdx = find(edges < minInPowerdBm, 1,“最后一次”);tableLen =(边缘)-minIdx-1长度;inOutTable = 0 (tableLen, 2);为inOutTable(p-minIdx,1) = mean(paInputdBm(idx == p));当前料仓的平均输入功率inOutTable(p- minidx,2) = mean(paOutputdBm(idx == p));%当前料仓平均输出功率inOutTable(p- minidx,3) = mean(角度(paOutput(idx == p)./paInput(idx == p)));%电流仓平均相移结束
使用comm. memorynonlinear System对象中的表对PA进行建模。将估计的产量与实际产量进行比较。
pa = comm.MemorylessNonlinearity (“方法”,查找表的,“表”inOutTable,“ReferenceImpedance”, 100)
pa = com . memorylessnonlinear with properties: Method: 'Lookup table' table: [40x3 double] ReferenceImpedance: 100
paOutputFitMemless = pa (paInput);err = abs(paOutput - paOutputFitMemless)./abs(paOutput);rmsErrorMemless = rms (err) * 100;disp ([时域RMS误差百分比为num2str (rmsErrorMemless)“%”])
时域RMS误差百分比为12.1884%
为了可视化测量的输出信号和拟合的输出信号,绘制实际的和拟合的时域输出电压。
helperPACharPlotTime (paOutput paOutputFitMemless sampleRate)
画出增益的大小。
helperPACharPlotGain (paInput paOutput paOutputFitMemless)
记忆多项式模型除了非线性增益外,还包括PA的记忆效应。使用多功能助手功能helperPACharMemPolyModel为放大器特性确定一个记忆多项式模型的复系数。将模型类型设置为记忆多项式的
.
modType =
“memPoly”;
执行如下所示的网格搜索附录网格搜索内存长度和多项式顺序.根据网格搜索结果,当存储长度与多项式次值为:
memLen = 5;degLen = 5;
对这些值进行拟合和均方根误差计算。只有一半的数据被用来计算拟合系数,因为整个数据集将被用来计算相对误差。辅助函数helperPACharMemPolyModel计算模型的系数。
numDataPts =长度(paInput);halfDataPts =圆(numDataPts / 2);
辅助函数helperPACharMemPolyModel可编辑以进行自定义修改,并返回所需的矩阵。PA模型具有一些零值系数,导致秩亏矩阵。
fitCoefMatMem = helperPACharMemPolyModel (“coefficientFinder”,...paInput (1: halfDataPts) paOutput (1: halfDataPts) memLen, degLen, modType);
警告:Rank deficient, Rank = 24, tol = 1.870573e-01。
disp (abs (fitCoefMatMem))
23.1553 8.8537 17.8400 13.3040 3.2173 0 11.7662 26.4614 23.1879 5.5464 20.9748 16.8494 25.7229 22.1851 5.0674 32.6203 8.4017 9.4816 10.6938 2.5605 15.3880 2.3641 2.0891 2.9341 0.7370
为了验证拟合,使用辅助函数计算相对于测量信号的RMS误差百分比。
rmsErrorTimeMem = helperPACharMemPolyModel (“errorMeasure”,...paInput, paOutput, fitCoefMatMem, modType);disp ([时域RMS误差百分比为num2str (rmsErrorTimeMem)“%”])
时域均方根误差百分比为6.1057%
为了可视化测量的输出信号和拟合的输出信号,绘制实际的和拟合的时域输出电压。
paOutputFitMem = helperPACharMemPolyModel (“signalGenerator”,...paInput、fitCoefMatMem modType);helperPACharPlotTime (paOutput paOutputFitMem sampleRate)
画出增益的大小。
helperPACharPlotGain (paInput paOutput paOutputFitMem)
对于不同带宽的OFDM信号,无记忆非线性模型的时域RMS估计误差在9% ~ 13%之间,是记忆多项式模型误差在2% ~ 6%之间的3 ~ 4倍。
通过绘制三种模型的实际PA输出的频谱和估计PA输出的频谱,在频域检查估计误差。无记忆非线性查表模型无法模拟实测PA输出中的频谱增长。对于这个PA,记忆多项式模型提供了PA特性的一个很好的近似。
sa = helperPACharPlotSpectrum (...[paOutput paOutputFitMemless paOutputFitMem),...{“实际PA输出”,“无记忆模型输出”,...“记忆多项式输出”},...sampleRate testSignal);
辅助函数helperPACharMemPolyModel也可以使用带有交叉项的记忆多项式模型,除了PA和非线性增益的记忆效应外,还包括超前和滞后的记忆交叉项。将模型类型设置为“交叉项的记忆”
来探索这个模型。
为了进一步的探索,尝试不同的记忆长度和多项式次数组合。修正过采样因子,探讨过采样因子对PA模型性能的影响。修改helper函数helperPACharMemPolyModel尝试不同的PA模型。
将PA模型的系数矩阵保存在功率放大器块,用于在系统级进行仿真功率放大器非线性的数字预失真补偿(通信工具箱).
frameSize =地板(长度(paInput) / numFrames);paIn.signals.values =双(重塑(paInput (1: frameSize * numFrames, 1), numFrames, frameSize));paIn.signals.dimensions = frameSize;疼痛。时间= [];保存(“PAcoefficientsAndInput.mat”,“modType”,“fitCoefMatMem”,“memLen”,“degLen”,“痛苦”,“linearGaindB”)
当代价函数是RMS错误的百分比时,取消注释下面的行来执行网格搜索。首先选择模型类型。
modType =“memPoly”;% rmsErrorTime = helperPACharGridSearchTime(paInput,paOutput,modType, overamplingrate)
当代价函数是频率中均方根误差的百分比时,重复搜索。
% rmsErrorFreq = helperPACharGridSearchFrequency(paInput,paOutput,modType, overamplingrate)