comm.DPD

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

Описание

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

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

  • Создание цифрового Системного объекта предыскажения, сконфигурированного с помощью матрицы коэффициентов полинома памяти перекрестного термина с набором глубины памяти к 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