comm.DPD

Цифровое предыскажение

Описание

The comm.DPD Система object™ применяет цифровое предварительное искажение (DPD) к комплексному сгенерированному модулированному сигналу частот путем использования полинома памяти для компенсации нелинейностей в усилителе степени. Для получения дополнительной информации см. Раздел «Цифровое предварительное искажение».

Для предопределения сигналов:

  1. Создайте comm.DPD Объекту и установите его свойства.

  2. Вызывайте объект с аргументами, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

dpd = comm.DPD создает цифровое предыскажение Системный объект, чтобы предопределить сигнал.

пример

dpd = comm.DPD(Name,Value) устанавливает свойства с помощью одной или нескольких пар "имя-значение". Для примера, comm.DPD('PolynomialType','Cross-term memory polynomial') конфигурирует предварительный Системный объект, чтобы предопределить входной сигнал с помощью полинома памяти с перекрестными терминами. Заключайте каждое имя свойства в кавычки.

Свойства

расширить все

Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release функция разблокирует их.

Если свойство настраивается, можно изменить его значение в любой момент.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

Полиномиальный тип, используемый для предварительного искажения, заданный как одно из следующих значений:

  • 'Memory polynomial' - Предопределяет входной сигнал при помощи полинома памяти без перекрестных членов.

  • 'Cross-term memory polynomial' - Предопределяет входной сигнал при помощи полинома памяти с перекрестными терминами.

Для получения дополнительной информации см. Раздел «Цифровое предварительное искажение».

Полиномиальные коэффициенты памяти, заданные как матрица. Количество строк в матрице должно равняться глубине памяти полинома памяти.

  • Если PolynomialType является 'Memory polynomial', количество столбцов в матрице является степенью полинома памяти.

  • Если PolynomialType является 'Cross-term memory polynomial', количество столбцов в матрице должно равняться m (n -1) + 1. m - глубина памяти полинома, а n - степень полинома памяти.

Для получения дополнительной информации см. Раздел «Цифровое предварительное искажение».

Типы данных: double
Поддержка комплексного числа: Да

Использование

Синтаксис

Описание

пример

out = dpd(in) предопределяет комплексный сгенерированный модулированный сигнал помощи полинома памяти для компенсации нелинейностей в усилителе степени.

Входные параметры

расширить все

Вход сгенерированного модулированного сигнала, заданная как вектор-столбец.

Типы данных: double
Поддержка комплексного числа: Да

Выходные аргументы

расширить все

Предварительно искаженные сгенерированные модулированные сигналы, возвращенные как вектор-столбец той же длины, что и входной сигнал.

Функции объекта

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Примените цифровое предварительное искажение (DPD) к входному сигналу усилителя степени. Системный объект оценки коэффициентов DPD использует записанный сигнал, содержащий входные и выходные сигналы усилителя степени, чтобы определить матрицу коэффициентов предварительного искажения.

Загрузите файл, содержащий входные и выходные сигналы для усилителя степени.

load('commpowamp_dpd_data.mat','PA_input','PA_output')

Сгенерируйте системный объект оценки коэффициента DPD и системный объект передающего фильтра приподнятого косинуса.

estimator = comm.DPDCoefficientEstimator( ...
    'DesiredAmplitudeGaindB',10, ...
    'PolynomialType','Memory polynomial', ...
    'Degree',5,'MemoryDepth',3,'Algorithm','Least squares');

rctFilt = comm.RaisedCosineTransmitFilter('OutputSamplesPerSymbol',2);

Оцените цифровые коэффициенты памяти-полинома перед искажением.

coef = estimator(PA_input,PA_output);

Сгенерируйте объект DPD System с помощью coef, оценочные коэффициенты, выводимые из оценки коэффициента DPD, как для матрицы коэффициентов.

dpd = comm.DPD('PolynomialType','Memory polynomial', ...
    'Coefficients',coef);

Сгенерируйте 2000 случайных символов и примените 16-QAM модуляцию к сигналу. Примените фильтр передачи приподнятого косинуса к модулированному сигналу.

s = randi([0,15],2000,1);
u = qammod(s,16);
x = rctFilt(u);

Примените цифровое предварительное искажение к данным. Объект DPD System возвращает предварительно искаженный сигнал, чтобы предоставить в качестве входного сигнала усилителю степени.

y = dpd(x);

Эти примеры показывают формат матрицы коэффициентов для полинома памяти DPD при помощи случайным образом сгенерированной матрицы коэффициентов. Пример:

  • Создает цифровое предварительное искажение Системного объекта сконфигурированное с помощью матрицы коэффициентов полинома памяти с установленной глубиной памяти 3 и полиномиальную степень, установленную на 5 состоящий из случайных значений.

  • Предопределяет сигнал с помощью полинома памяти матрицы коэффициентов.

  • Сравнивает один предварительно искаженный элемент выхода с соответствующим элементом входа, который был вручную вычислен с помощью полинома памяти матрицы коэффициентов.

Создайте матрицу коэффициентов, представляющую предыскажение с выходом, равным входу, сгенерировав матрицу нулей коэффициентов 3 на 5 и установив coef(1,1) элемент в 1. Добавьте малые случайные комплексные нелинейные условия к матрице коэффициентов.

coef = zeros(3,5);
coef(1,1) = 1;
coef = coef + 0.01*(randn(3,5)+1j*randn(3,5));

Создайте объект DPD System с помощью матрицы полиномиальных коэффициентов памяти, coef.

dpd = comm.DPD('PolynomialType','Memory polynomial','Coefficients',coef);

Сгенерируйте входной сигнал и предопределите его с помощью dpd Системный объект.

x = randn(20,1) + 1j*randn(20,1);
y = dpd(x);

Сравните искаженные вручную выходы для входа соответствующего элемента выхода y(18) чтобы показать, как матрица коэффициентов используется для вычисления этого конкретного выходного значения.

u = x(18:-1:(18-3+1));
isequal(y(18),sum(sum(coef.*[u u.*abs(u) u.*(abs(u).^2) u.*(abs(u).^3) u.*(abs(u).^4)])))
ans = logical
   1

Эти примеры показывают формат матрицы коэффициентов для полинома памяти DPD при помощи случайным образом сгенерированной матрицы коэффициентов. Пример:

  • Создает объект digital предыскажения System, сконфигурированный с помощью межтермической памяти полинома матрицы коэффициентов с установленной глубиной памяти 3 и полиномиальную степень, установленную на 5 состоящий из случайных значений.

  • Предопределяет сигнал, используя перекрестную память полинома матрицы коэффициентов.

  • Сравнивает один предварительно искаженный элемент выхода с соответствующим элементом входа, который был вручную вычислен с помощью межтермической матрицы коэффициентов полинома памяти.

Создайте матрицу коэффициентов, представляющую предыскажение с выходом, равным входу, сгенерировав матрицу нулей коэффициентов 3 на 5 и установив coef(1,1) элемент в 1. Добавьте малые случайные комплексные нелинейные условия к матрице коэффициентов.

coef = zeros(3,3*(5-1)+1);
coef(1,1) = 1;
coef = coef + 0.01*(randn(3,13) + 1j*randn(3,13));

Создайте Системный объект DPD, используя перекрестную память полинома матрицы коэффициентов, coef.

dpd = comm.DPD('PolynomialType','Cross-term memory polynomial','Coefficients',coef);

Сгенерируйте входной сигнал и предопределите его с помощью dpd Системный объект.

x = randn(20,1) + 1j*randn(20,1);
y = dpd(x);

Сравните искаженные вручную выходы для входа соответствующего элемента выхода y(18) чтобы показать, как матрица коэффициентов используется для вычисления этого конкретного выходного значения.

u = x(18:-1:(18-3+1));
isequal(y(18),sum(sum(coef.*[u u*abs(u.') u*(abs(u.').^2) u*(abs(u.').^3) u*(abs(u.').^4)])))
ans = logical
   1

Подробнее о

расширить все

Ссылки

[1] Морган, Деннис Р., Чжэнсян Ма, Джейхён Ким, Майкл Г. Зиердт и Джон Пасталан. «Обобщенная модель Полинома памяти для цифрового предварительного искажения Степени усилителей». IEEE® Транзакции по обработке сигналов. Том 54, № 10, октябрь 2006, стр. 3852-3860.

[2] М. Схетцен. Теории Вольтерры и Винера нелинейных систем. Нью-Йорк: Уайли, 1980.

Расширенные возможности

.
Введенный в R2019a