comm.IQImbalanceCompensator

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

Описание

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. Это свойство является ненастраиваемым.

Методы

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

Позвольте изменения значения свойства Системного объекта

Примеры

свернуть все

Смягчите удары амплитуды и разбаланса фазы на 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')

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

Алгоритмы

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

Обобщенную модель разбаланса 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*(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] Anttila, L., М. Волкама и М. Ренфорс. “Слепая компенсация выборочной частотой неустойчивости I/Q в квадратурных радиоприемниках: основанный на зацикливании подход”, Proc. IEEE ICASSP, pp.III-245–248, 2007.

[2] Kiayani, A., Л. Анттила, И. Цзоу и М. Волкама, “Усовершенствованный проект приемника для смягчения нескольких нарушений RF в системах OFDM: алгоритмы и измерения RF”, журнал электротехники и вычислительной техники, издания 2012.

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

Смотрите также

| |

Введенный в R2014b