коммуникация. DPD

Описание

Система comm.DPD object™ применяет цифровое предварительное искажение (DPD) к комплексному основополосному сигналу при помощи полинома памяти, чтобы компенсировать нелинейность в усилителе мощности. Для получения дополнительной информации смотрите Цифровое Предварительное искажение.

Предварительно исказить сигналы:

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

dpd = comm.DPD
dpd = comm.DPD(Name,Value)

Описание

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

пример

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

Свойства

развернуть все

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (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)

Описание

пример

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 с помощью coef, предполагаемых коэффициентов вывод от содействующего средства оценки DPD, что касается матрицы коэффициентов.

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

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

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

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

y = dpd(x);

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

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

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

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

Создайте матрицу коэффициентов, представляющую predistorter с выводом, равным входу путем генерации матрицы коэффициентов 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 с помощью матрицы коэффициентов полинома памяти, 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 при помощи случайным образом сгенерированной матрицы коэффициентов. Пример:

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

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

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

Создайте матрицу коэффициентов, представляющую predistorter с выводом, равным входу путем генерации матрицы коэффициентов 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® Transactions на Обработке сигналов. Издание 54, Номер 10, октябрь 2006, стр 3852–3860.

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

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

Введенный в R2019a