exponenta event banner

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

Компенсация дисбаланса ввода/вывода

Описание

IQImbalanceCompensator Система object™ компенсирует дисбаланс между синфазной и квадратурной составляющими модулированного сигнала.

Для компенсации дисбаланса ввода/вывода:

  1. Определение и настройка IQImbalanceCompensator объект. См. раздел Строительство.

  2. Звонить step для компенсации дисбаланса I/Q в соответствии со свойствами comm.IQImbalanceCompensator. Поведение step относится к каждому объекту на панели инструментов.

Адаптивный алгоритм, присущий компенсатору дисбаланса I/Q, совместим со схемами модуляции M-PSK, M-QAM и OFDM, где M > 2.

Примечание

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

Примечание

Начиная с R2016b, вместо использования step для выполнения операции, определенной системным object™, можно вызвать объект с аргументами, как если бы это была функция. Например, y = step(obj,x) и y = obj(x) выполнять эквивалентные операции.

Строительство

H = comm.IQImbalanceCompensator создает объект compensator System, H, что компенсирует дисбаланс между синфазной и квадратурной составляющими входного сигнала.

H = comm.IQImbalanceCompensator(Name,Value) создает объект компенсатора дисбаланса I/Q, H, с каждым указанным свойством Name установить в указанное значение Value. Можно указать дополнительные аргументы пары имя-значение в любом порядке как (Name1,Value1,...,NameN,ValueN).

Свойства

CoefficientSource

Источник коэффициентов компенсатора

Укажите либо Estimated from input signal или Input port. Если CoefficientSource свойство имеет значение Estimated from input signalкомпенсатор использует адаптивный алгоритм для оценки коэффициента компенсатора по входному сигналу. Если CoefficientSource свойство имеет значение Input port, все остальные свойства отключены, и коэффициенты компенсатора должны быть предоставлены step функция в качестве входного аргумента. Значение по умолчанию: Estimated from input signal. Это свойство не настраивается.

InitialCoefficent

Начальный коэффициент, используемый для компенсации дисбаланса I/Q

Начальный коэффициент - это комплексный скаляр, который может быть либо одинарной, либо двойной точностью. Значение по умолчанию: 0+0i. Это свойство не настраивается.

StepSizeSource

Источник размера шага для адаптации коэффициента

Укажите либо Property или Input port. Если StepSizeSource имеет значение Property, вы указываете размер шага через StepSize собственность. В противном случае размер шага предоставляется step функция в качестве входного аргумента. Значение по умолчанию: Property. Это свойство не настраивается.

StepSize

Размер шага адаптации

Задает размер шага, используемый алгоритмом при оценке дисбаланса ввода/вывода. Это свойство доступно только в том случае, если StepSizeSource имеет значение Property. Значение по умолчанию: 1e-5. Это свойство можно настроить.

AdaptInputPort

Создает входной порт для управления адаптацией коэффициентов компенсатора

Когда это логическое свойство имеет значение true, входной порт создается для включения или отключения адаптации коэффициентов. Если AdaptInputPort является false, коэффициенты обновляются после каждой выходной выборки. Значение по умолчанию: false. Это свойство не настраивается.

CoefficientOutputPort

Создание порта для вывода коэффициентов компенсатора

Когда это логическое свойство имеет значение true, коэффициенты компенсатора дисбаланса I/Q становятся доступными через выходной аргумент step функция. Значение по умолчанию: false. Это свойство не настраивается.

Методы

шагКомпенсация дисбаланса I/Q
Общие для всех системных объектов
release

Разрешить изменение значения свойства объекта системы

reset

Сброс внутренних состояний объекта System

При использовании resetэтот способ сбрасывает подоконный суффикс с последнего символа в ранее обработанном кадре.

Примеры

свернуть все

Смягчить влияние амплитудного и фазового дисбаланса на QPSK-модулированный сигнал с помощью объекта comm.IQImbalureCompensator System?.

Создайте объект диаграммы созвездий. Укажите пары имя-значение, чтобы на диаграмме созвездия отображались только последние 100 символов данных.

constDiagram = comm.ConstellationDiagram(...
    'SymbolsToDisplaySource','Property', ...
    'SymbolsToDisplay',100);

Создайте компенсатор дисбаланса ввода/вывода.

iqImbComp = comm.IQImbalanceCompensator;

Формирование случайных символов данных и применение модуляции QPSK.

data = randi([0 3],1e7,1);
txSig = pskmod(data,4,pi/4);

Примените к передаваемому сигналу амплитудный и фазовый дисбаланс.

ampImb = 5; % dB
phImb = 15; % deg
gainI = 10.^(0.5*ampImb/20);
gainQ = 10.^(-0.5*ampImb/20);
imbI = real(txSig)*gainI*exp(-0.5i*phImb*pi/180);
imbQ = imag(txSig)*gainQ*exp(1i*(pi/2 + 0.5*phImb*pi/180));
rxSig = imbI + imbQ;

Постройте график созвездия принятого сигнала. Обратите внимание, что принятый сигнал испытывал амплитудный и фазовый сдвиг.

constDiagram(rxSig)

Примените алгоритм компенсации I/Q и просмотрите совокупность. Скомпенсированная совокупность сигналов почти выровнена с опорной совокупностью.

compSig = iqImbComp(rxSig);
constDiagram(compSig)

Скомпенсировать амплитудный и фазовый дисбаланс в 8-PSK сигнале с помощью comm.IQImbalanceCompensator object™ системы с внешними коэффициентами.

Создание модулятора 8-PSK и диаграммы созвездий Системные объекты. Используйте пары «имя-значение», чтобы убедиться, что на диаграмме созвездия отображаются только последние 100 символов данных, и предоставить эталонное созвездие.

hMod = comm.PSKModulator(8);
refC = constellation(hMod);
hScope = comm.ConstellationDiagram(...
    'SymbolsToDisplaySource','Property', ...
    'SymbolsToDisplay',100, ...
    'ReferenceConstellation',refC);

Создайте объект компенсатора дисбаланса I/Q с входным портом для коэффициентов алгоритма.

hIQComp = comm.IQImbalanceCompensator('CoefficientSource','Input port');

Генерировать случайные символы данных и применять 8-PSK модуляцию.

data = randi([0 7],1000,1);
txSig = step(hMod,data);

Примените к передаваемому сигналу амплитудный и фазовый дисбаланс.

ampImb = 5; % dB
phImb = 15; % deg
gainI = 10.^(0.5*ampImb/20);
gainQ = 10.^(-0.5*ampImb/20);
imbI = real(txSig)*gainI*exp(-0.5i*phImb*pi/180);
imbQ = imag(txSig)*gainQ*exp(1i*(pi/2 + 0.5*phImb*pi/180));
rxSig = imbI + imbQ;

Постройте график созвездия принятого сигнала. Обратите внимание, что принятый сигнал испытывал амплитудный и фазовый сдвиг.

step(hScope,rxSig);

Используйте iqimbal2coef функция определения коэффициента компенсации, заданного амплитудным и фазовым дисбалансом.

compCoef = iqimbal2coef(ampImb,phImb);

Примените коэффициент компенсации к принятому сигналу с помощью step функции comm.IQImbalanceCompensator и просмотрите результирующее созвездие. Можно видеть, что скомпенсированная группировка сигналов теперь почти выровнена с опорной.

compSig = step(hIQComp,rxSig,compCoef);
step(hScope,compSig)

Удалите дисбаланс I/Q из 64-QAM сигнала и сделайте оцененные коэффициенты доступными извне, установив размер шага алгоритма из входного порта.

Создайте объект диаграммы созвездий. Используйте пары имя-значение, чтобы убедиться, что диаграмма созвездия отображает только последние 256 символов данных, задайте пределы осей и укажите ссылочное созвездие.

M = 64;
refC = qammod(0:M-1,M);
constDiagram = comm.ConstellationDiagram(...
    'SymbolsToDisplaySource','Property', ...
    'SymbolsToDisplay',256, ...
    'XLimits',[-10 10],'YLimits',[-10 10], ...
    'ReferenceConstellation',refC);

Создайте системный объект компенсатора дисбаланса I/Q, в котором размер шага задается в качестве входного аргумента, а оценочные коэффициенты становятся доступными через выходной порт.

iqImbComp = comm.IQImbalanceCompensator('StepSizeSource','Input port', ...
    'CoefficientOutputPort',true);

Генерировать случайные символы данных и применять 64-QAM модуляцию.

nSym = 25000;
data = randi([0 M-1],nSym,1);
txSig = qammod(data,M);

Примените к передаваемому сигналу амплитудный и фазовый дисбаланс.

ampImb = 2; % dB
phImb = 10; % deg
gainI = 10.^(0.5*ampImb/20);
gainQ = 10.^(-0.5*ampImb/20);
imbI = real(txSig)*gainI*exp(-0.5i*phImb*pi/180);
imbQ = imag(txSig)*gainQ*exp(1i*(pi/2 + 0.5*phImb*pi/180));
rxSig = imbI + imbQ;

Постройте график созвездия принятого сигнала.

constDiagram(rxSig);

Укажите параметр размера шага для компенсатора дисбаланса I/Q.

stepSize = 1e-5;

Компенсируйте дисбаланс I/Q при установке размера шага с помощью входного аргумента. Можно видеть, что скомпенсированная группировка сигналов теперь почти выровнена с опорной.

[compSig,estCoef] = iqImbComp(rxSig,stepSize);
constDiagram(compSig)

Постройте график действительных и мнимых значений оценочных коэффициентов. Видно, что они достигают стационарного решения.

plot((1:nSym)'/1000,[real(estCoef),imag(estCoef)])
grid
xlabel('Symbols (thousands)')
ylabel('Coefficient Value')
legend('Real','Imag','location','best')

Управление алгоритмом адаптации компенсатора дисбаланса I/Q с помощью внешнего аргумента.

Применение модуляции QPSK к символам случайных данных.

data = randi([0 3],600,1);
txSig = pskmod(data,4,pi/4,'gray');

Создайте компенсатор дисбаланса I/Q, в котором алгоритм адаптации управляется через входной порт, размер шага задается через StepSize и оценочные коэффициенты становятся доступными через выходной порт.

iqImbComp = comm.IQImbalanceCompensator('AdaptInputPort',true, ...
    'StepSize',0.001,'CoefficientOutputPort',true);

Примените к передаваемому сигналу амплитудный и фазовый дисбаланс.

ampImb = 5; % dB
phImb = 15; % deg
gainI = 10.^(0.5*ampImb/20);
gainQ = 10.^(-0.5*ampImb/20);
imbI = real(txSig)*gainI*exp(-0.5i*phImb*pi/180);
imbQ = imag(txSig)*gainQ*exp(1i*(pi/2 + 0.5*phImb*pi/180));
rxSig = imbI + imbQ;

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

[~,estCoef1] = iqImbComp(rxSig(1:200),true);
[~,estCoef2] = iqImbComp(rxSig(201:400),false);
[~,estCoef3] = iqImbComp(rxSig(401:600),true);

Объедините коэффициенты комплексного алгоритма и постройте график их действительной и мнимой частей.

estCoef = [estCoef1; estCoef2; estCoef3];
plot((1:600)',[real(estCoef) imag(estCoef)])
grid
xlabel('Symbols')
ylabel('Coefficient Value')
legend('Real','Imaginary','location','best')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Real, Imaginary.

Обратите внимание, что коэффициенты не адаптируются во время отключения компенсатора.

Алгоритмы

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

Показана обобщенная модель дисбаланса I/Q, где g - амплитудный дисбаланс, а λ - фазовый дисбаланс (в идеале, g = 1 и λ = 0). На чертеже H (f) - номинальная частотная характеристика ветвей, обусловленная, например, фильтрами нижних частот. HI (f) и HQ (f) представляют части синфазных и квадратурных амплитудных и фазовых откликов, которые отличаются от номинального отклика. При полном совпадении HI (f) = HQ (f) = 1.

Пусть z (t) - идеальный эквивалентный сигнал основной полосы принимаемого сигнала r (t), где его преобразование Фурье обозначается как Z (f). Учитывая обобщенную модель дисбаланса I/Q, преобразование Фурье несбалансированного сигнала, x (t) = xI (t) + xQ (t), равно

X (f) = G1 (f) Z (f) + G2 (f) Z * (− f)

где G1 (f) и G2 (f) являются прямыми и сопряженными компонентами I/Q дисбаланса. Эти компоненты определяются как

G1 (f) = [HI (f) + HQ (f) gexp (jstart) ]/2G2 (f) = [HI (f) + HQ (f) gexp (jstart) ]/2

Применяя обратное преобразование Фурье к X (f), модель сигнала становится x (t) = g1 (t) * z (t) + g2 (t) * z * (t).

Это предполагает структуру компенсатора, как показано, в которой дискретно-временная нотация используется для выражения переменных. Компенсированный сигнал выражается как y (n) = x (n) + wx * (n).

Простой алгоритм формы

{y (n) = x (n) + w (n) x * (n) w (n + 1) = w (n) − My2 (n)

используется для определения весов, поскольку обеспечивает «правильный» выход, то есть E [y2 (n)] = 0 [1]. Начальное значение w определяется по InitialCoefficient свойство, которое имеет значение по умолчанию 0 + 0i. M - размер шага, как указано в StepSize собственность.

Избранная библиография

[1] Анттила, Л., М. Валкама и М. Ренфорс. «Слепая компенсация частотно-селективных дисбалансов I/Q в квадратурных радиоприемниках: Подход на основе круговой полярности», Proc. IEEE ICASSP, pp.III-245-248, 2007.

[2] Kiayani, A., L. Anttila, Y. Zou и M. Valkama, «Advanced Receiver Design for Competing Multiple RF Displements in OFDM Systems: Algorithms and RF Measurements», Журнал электротехнической и компьютерной инженерии, том. 2012.

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

.
Представлен в R2014b