Этот пример обеспечивает методологию для охарактеризования нелинейного усилителя мощности (PA) RF Blockset™ с памятью и адаптивной системой с обратной связью DPD, чтобы уменьшать искажение выходного сигнала передатчика РФ. Начальный шаг в процедуре определяет Coefficient matrix
, требуемый блоком RF Power Amplifier при выборе модели полинома памяти Волтерры с перекрестными условиями [1]. Этот шаг использует фактические результаты измерений для PA. После получения набора коэффициентов для модели PA выполняется симуляция уровня системы. Эта система включает адаптивный алгоритм DPD, который может быть включен во время симуляции с помощью переключателя переключателя и демонстрирует, как линейность системного выходного сигнала передатчика РФ улучшается после включения исправления DPD.
Этот пример требует DSP System Toolbox™ и Communications Toolbox™.
Во-первых, комплекс ввода и вывода измеренные сигналы I/Q PA загружается. Коммерчески доступный усилитель мощности был охарактеризован в лаборатории с помощью стандартно-совместимого сигнала LTE с частотой дискретизации, равной 15,36 МГц.
load('simrfV2_powamp_dpd_data.mat')
DataRate = 15.36e6;
Tstep = 1/DataRate;
Физическое поведение усилителя теперь визуализируется. Следующая фигура строит абсолютное значение сигналов ввода и вывода как функция времени.
numDataPts = length(inDataPA); plot((1:numDataPts)*Tstep, abs(inDataPA), ... (1:numDataPts)*Tstep, abs(outDataPA)) legend('Abs(In)','Abs(Out)','Location','northeast') xlabel('Time (s)') xlim([0 1e-5]) ylabel('Voltage (V)') title('Absolute Values of Input and Output Voltage Signals')
Следующая фигура строит характеристику значения PA: абсолютное значение вывода получает по сравнению с входными сигналами. В целом рассеивание вокруг прямой линии, представляющей усиление, следует из эффектов памяти (изогните дисперсию), и изгиб кривой данных для больших значений входного сигнала следует из нелинейности PA (отклонение от прямой горизонтальной строки).
TransferPA = abs(outDataPA./inDataPA); plot(abs(inDataPA),20*log10(TransferPA),'.') xlabel('Input Voltage Absolute Value(V)') ylabel('Magnitude Power Gain (dB)') title('Power Gain Transfer Function')
Используйте многоцелевую функцию помощника simrfV2_powamp_dpd_helper, чтобы определить комплексные коэффициенты модели полинома памяти для характеристик усилителя. Время хранения в памяти и степень модели опытным путем выбраны здесь, но возможно автоматизировать этот выбор.
memLen = 3; degLen = 7;
Только половина данных используется, чтобы вычислить подходящие коэффициенты, как целый набор данных будет использоваться, чтобы вычислить относительную погрешность.
halfDataPts = round(numDataPts/2);
Функция помощника поддерживает возможность к, выбрал различные модели памяти. Как пример, чтобы использовать полином памяти без перекрестных условий:
modType = 'memPoly';
Функция помощника simrfV2_powamp_dpd_helper доступна для редактирования для пользовательских модификаций, и возвратить желаемую матрицу.
fitCoefMat = simrfV2_powamp_dpd_helper('coefficientFinder', ... inDataPA(1:halfDataPts),outDataPA(1:halfDataPts),memLen,degLen,modType);
Чтобы подтвердить подбор кривой, используйте функцию помощника, чтобы вычислить ошибочную оценку, которая состоит стандартное отклонение предсказанного сигнала по сравнению с измеренным сигналом.
[errSig] = simrfV2_powamp_dpd_helper('errorMeasure', ... inDataPA, outDataPA, fitCoefMat, modType); disp(['Signal standard deviation = ' num2str(errSig) '%'])
Signal standard deviation = 4.8083%
Чтобы визуализировать и измеренный выходной сигнал и подходящий выходной сигнал, постройте выходное напряжение временного интервала.
outDataPA_fit = simrfV2_powamp_dpd_helper('signalGenerator', ... inDataPA, fitCoefMat, modType); plot((1:numDataPts)*Tstep, abs(outDataPA), 'o-', ... (1:numDataPts)*Tstep, abs(outDataPA_fit), '.-') xlabel('Time (s)') ylabel('Voltage (V)') xlim([0 1e-5]) legend('Abs(Out)','Abs(OutFit)','Location','northeast') title('Absolute Values of Output and Fitted Output Signals')
Мы также строим значение передаточной функции степени:
TransferPA_fit = abs(outDataPA_fit./inDataPA(:)); plot(abs(inDataPA), 20*log10(TransferPA), 'o', ... abs(inDataPA), 20*log10(TransferPA_fit), '.') xlabel('Input Voltage Absolute Value(V)') ylabel('Magnitude Power Gain (dB)') legend('Abs Gain','Abs Gain Fit','Location','northeast') title('Power Gain Transfer Function')
Мы теперь определяем подходящую матрицу коэффициентов от характеристик ввода и вывода при помощи другого подхода, который включает продвижение и отставание перекрестных условий памяти.
Мы используем ту же функцию помощника, но мы используем различный тип модели.
modType = 'ctMemPoly'; fitCoefMat = simrfV2_powamp_dpd_helper('coefficientFinder', ... inDataPA(1:halfDataPts),outDataPA(1:halfDataPts),memLen,degLen,modType);
Чтобы подтвердить подбор кривой, мы вычисляем ошибку. Используйте функцию помощника, чтобы вычислить стандартное отклонение предсказанного сигнала по сравнению с измеренным сигналом. Ошибка теперь ниже благодаря продвижению и отставанию перекрестных условий памяти.
[errSig] = simrfV2_powamp_dpd_helper('errorMeasure', ... inDataPA, outDataPA, fitCoefMat, modType); disp(['Signal standard deviation = ' num2str(errSig)])
Signal standard deviation = 2.7045
Чтобы проверить, что подбор кривой имеет более высокое качество и визуализировать измеренный выходной сигнал и подходящий выходной сигнал, мы отображаем данные на графике.
outDataPA_fit = simrfV2_powamp_dpd_helper('signalGenerator', ... inDataPA, fitCoefMat, modType); plot((1:numDataPts)*Tstep, abs(outDataPA), 'o-', ... (1:numDataPts)*Tstep, abs(outDataPA_fit), '.-') xlabel('Time (s)') ylabel('Voltage (V)') xlim([0 1e-5]) legend('Abs(Out)','Abs(OutFit)','Location','northeast') title('Absolute Values of Output and Fitted Output Signals')
TransferPA_fit = abs(outDataPA_fit./inDataPA(:)); plot(abs(inDataPA), 20*log10(TransferPA), 'o', ... abs(inDataPA), 20*log10(TransferPA_fit), '.') xlabel('Input Voltage Absolute Value(V)') ylabel('Magnitude Power Gain (dB)') legend('Abs Gain','Abs Gain Fit','Location','northeast') title('Power Gain Transfer Function')
Наконец, мы сохраняем матрицу коэффициентов модели PA, которую мы будем импортировать и использовать в RF Blockset для симуляции в уровне системы.
save('PAcoefficients.mat','fitCoefMat')
Откройте модель Simulink RF Blockset включая модель PA и адаптивный алгоритм DPD [2]:
Модель включает двухцветный генератор сигнала, который используется для тестирования отнесенной к выводу точки пересечения третьего порядка системы. Модель включает повышающее преобразование в частоту РФ с помощью модулятора I-Q, модели PA с коэффициентами, которым мы соответствовали, разветвитель, чтобы осуществить сниффинг вывода PA и блока S-параметра, представляющего эффект загрузки антенны. Цепочка получателя выполняет понижающее преобразование к низкой промежуточной частоте. Заметьте, что пропускная способность симуляции этой системы составляет 50 МГц.
Модель может быть моделирована без DPD, когда переключатель переключателя находится в положение.
model = 'simrfV2_powamp_dpd';
open_system(model)
sim(model)
Ручной переключатель переключается, чтобы включить алгоритм DPD. Когда переключено, TOI (точка пересечения третьего порядка) улучшается с 36 dBm приблизительно до 48 dBm в 0,5 мс времени симуляции. Осмотрите измерение искажения в Спектре Анализатор, чтобы подтвердить эти результаты и видеть, как мощность гармоник уменьшена благодаря линеаризации DPD.
set_param([model '/Manual Switch'], 'action', '1') sim(model)
Путем изменения степени и глубины памяти задал в блоке DPD Coefficient Estimator, можно найти самый подходящий компромисс между производительностью и стоимостью внедрения.
Чтобы оценить коэффициенты DPD правильно, входные сигналы к блоку DPD Coefficient Estimator, PA В и PA, должны быть выровнены во временном интервале. Это проверяется блоком Find Delay, который показывает, что задержка, введенная системой РФ, 0. Желаемое амплитудное усиление средства оценки важно, чтобы убедиться, что общее линейное усиление системы не изменяется, когда DPD активен. Для этой конкретной модели усиление было оценено с помощью отдельных методов [2].
close_system(model,0)
close all; clear
Откройте модель Simulink RF Blockset включая модель PA и адаптивный алгоритм DPD, взволнованный с 16-QAM модулируемой формой волны.
Системная модель PA+DPD с 16-QAM
Без линеаризации DPD система имеет Ошибочное Отношение Модуляции 15 дБ, когда это видно от измерения графика совокупности.
model = 'simrfV2_powamp_dpd_comms';
open_system(model)
sim(model)
Ручной переключатель переключается, чтобы включить алгоритм DPD. Когда переключено, средний MER улучшается с 15 дБ приблизительно до 28 дБ в 0,5 мс времени симуляции.
set_param([model '/Manual Switch'], 'action', '1') sim(model)
close_system(model,0)
close all; clear
Морган, Деннис Р., Чжэнсян Ма, Джэехиеонг Ким, Михаэль Г. Цирдт и Джон Пэсталан. "Обобщенная Модель Полинома Памяти для Цифрового Предварительного искажения Усилителей мощности". IEEE® Transactions на Обработке сигналов. Издание 54, № 10, октябрь 2006, стр 3852–3860.
Гань, Литий и Эмэд Абд-Элрэди. "Цифровое Предварительное искажение Систем Полинома Памяти Используя Прямое и Косвенное Изучение Архитектуры". В Продолжениях Одиннадцатой Международной конференции IASTED по вопросам Обработки сигналов и Обработки изображений (SIP) (Ф. Крус-Ролдан и Н. Б. Смит, редакторы), № 654-802. Калгари, AB: Нажатие ACTA, 2009.