коммуникация. 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 модулируемый сигнал при помощи коммуникации. Системный объект 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, стр. III-245–248, 2007.

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

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

Введенный в R2014b