comm.IQImbalanceCompensator

Компенсируйте разбаланс I/Q

Описание

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

Для компенсации разбаланса I/Q:

  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 создает Системный объект компенсатора, 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

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

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

AdaptInputPort

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

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

CoefficientOutputPort

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

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

Методы

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

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

reset

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

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

Примеры

свернуть все

Уменьшите влияния амплитуды и разбаланса фазы по модулированному сигналу QPSK с помощью Системного объекта comm.IQImbalanceCompensator?.

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

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

Создайте компенсатор разбаланса I/Q.

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 Compensator.

Показана обобщенная модель разбаланса I/Q, где g - амплитудный дисбаланс, а ϕ - разбаланс фазы (в идеале g = 1 и ϕ = 0). На рисунке H(f) - номинальная частотная характеристика ветвей, обусловленная, например, lowpass. 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(jϕ)]/2G2(f)=[HI(f)+HQ(f)gexp(jϕ)]/2

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

Это предполагает структуру компенсатора, как показано, в которой обозначение в дискретном времени используется для выражения переменных. Компенсированный сигнал выражается как 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., Л. Анттила, И. Цзоу и М. Волкама, «Передовой проект приемника для смягчения нескольких нарушений РФ в системах OFDM: алгоритмы и измерения РФ», журнал электротехники и вычислительной техники, издания 2012.

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

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