comm.EVM

Измерьте величину вектора ошибок

Описание

comm.EVM (величина вектора ошибок), Система object™ измеряет модулятор или эффективность демодулятора сигнала, которому повреждают.

Измерять величину вектора ошибок:

  1. Задайте и настройте свой объект EVM. Смотрите Конструкцию.

  2. Вызовите step измерять модулятор или эффективность демодулятора согласно свойствам comm.EVM. Поведение step характерно для каждого объекта в тулбоксе.

Примечание

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

Конструкция

EVM = comm.EVM создает объект величины вектора ошибок, EVM. Этот объект измеряет сумму ухудшения в модулируемом сигнале.

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

Пример: EVM = comm.EVM('ReferenceSignalSource','Estimated from reference constellation') создает объект, EVM, это измеряет RMS EVM полученного сигнала при помощи ссылочного созвездия.

Свойства

Normalization

Метод нормализации

Метод нормализации использовал в вычислении EVM в виде одного из следующего: 'Average reference signal power' (значение по умолчанию), 'Average constellation power', или 'Peak constellation power'.

AverageConstellationPower

Средняя степень созвездия

Средняя степень созвездия, заданная в ваттах как положительный действительный скаляр. Это свойство доступно когда Normalization 'Average constellation power'. Значением по умолчанию является 1.

PeakConstellationPower

Пиковая степень созвездия

Пиковая степень созвездия, заданная в ваттах как положительный действительный скаляр. Это свойство доступно когда Normalization 'Peak constellation power'. Значением по умолчанию является 1.

ReferenceSignalSource

Источник опорного сигнала

Источник опорного сигнала в виде любого 'Input port' (значение по умолчанию) или 'Estimated from reference constellation'. Чтобы обеспечить сигнал прямой ссылки, против которого измеряется входной сигнал, устанавливает это свойство на 'Input port'. Чтобы измерить EVM входного сигнала против ссылочного созвездия, установите это свойство на 'Estimated from reference constellation'.

ReferenceConstellation

Ссылочное созвездие

Ссылочное созвездие в виде вектора. Это свойство доступно когда ReferenceSignalSource свойством является 'Estimated from reference constellation'.

Значением по умолчанию является [0.7071 - 0.7071i; -0.7071 - 0.7071i; -0.7071 + 0.7071i; 0.7071 + 0.7071i], который соответствует стандартному созвездию QPSK. Можно вывести точки созвездия при помощи функций модуляции или объектов. Например, чтобы вывести ссылочное созвездие для 16-QAM сигнала, можно использовать qammod(0:15,16).

MeasurementIntervalSource

Источник интервала измерения

Источник интервала измерения в виде одного из следующего: 'Input length' (значение по умолчанию), 'Entire history', 'Custom', или 'Custom with periodic reset'. Это свойство влияет на RMS и максимальный EVM выходные параметры только.

  • Чтобы вычислить EVM использование только текущих выборок, установите это свойство на 'Input length'.

  • Чтобы вычислить EVM для всех выборок, установите это свойство на 'Entire history'.

  • Чтобы вычислить EVM на интервале, вы задаете и использовать раздвижное окно, установить это свойство на 'Custom'.

  • Чтобы вычислить EVM на интервале, вы задаете и сбрасывать объект каждый раз, когда интервал измерения заполнен, установите это свойство на 'Custom with periodic reset'.

MeasurementInterval

Интервал измерения

Интервал измерения, на котором вычисляется EVM, задал в выборках как действительное положительное целое число. Это свойство доступно когда MeasurementIntervalSource 'Custom' или 'Custom with periodic reset'. Значением по умолчанию является 100.

AveragingDimensions

Усреднение размерностей

Усреднение размерностей, по которым можно насчитать измерения EVM в виде целочисленного или вектора-строки из целых чисел со значениями элемента в области значений [1, 3]. Например, к среднему значению через строки, устанавливает это свойство на 2. Значением по умолчанию является 1.

Переменный размер поддержки объектов вводит по размерностям, в которых происходит усреднение. Однако входной размер для неусредненных размерностей должен остаться постоянным между вызовами объекта. Например, если вход имеет размер [4 3 2] и Averaging dimensions [1 3], выходным размером является [1 3 1], и второе измерение должно остаться фиксированным в 3.

MaximumEVMOutputPort

Максимальный выходной порт измерения EVM

Максимальный выходной порт измерения EVM в виде логического скаляра. Чтобы создать выходной порт для максимальных измерений EVM, установите это свойство на true. Значением по умолчанию является false.

XPercentileEVMOutputPort

X- выходной порт измерения EVM

X - процентиль выходной порт измерения EVM в виде логического скаляра. Чтобы создать выходной порт для X - процентиль измерения EVM, установите это свойство на true. X - процентиль, которую сохраняют измерения EVM, пока вы не сбрасываете объект. Эти измерения вычисляются при помощи всех входных кадров начиная с последнего сброса. Значением по умолчанию является false.

XPercentileValue

X- значение процентили

X- значение процентили, ниже которого % X измерений EVM падают в виде действительного скаляра от 0 к 100. Это свойство доступно когда XPercentileEVMOutputPort true. Значением по умолчанию является 95.

SymbolCountOutputPort

Выходной порт количества символа

Выходной порт количества символа в виде логического скаляра. Выводить количество накопленных символов раньше вычисляло X - процентиль измерения EVM, устанавливало это свойство на true. Это свойство доступно когда XPercentileEVMOutputPort true. Значением по умолчанию является false.

Методы

шагИзмерьте величину вектора ошибок
Характерный для всех системных объектов
release

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

reset

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

Примеры

свернуть все

Создайте объект EVM. Сконфигурируйте его с помощью пар "имя-значение", чтобы вывести максимальный EVM, 90-ю процентиль EVM и количество символа.

evm = comm.EVM('MaximumEVMOutputPort',true,...
    'XPercentileEVMOutputPort',true, 'XPercentileValue',90,...
    'SymbolCountOutputPort',true);

Сгенерируйте случайные символы данных. Примените 16-QAM модуляцию. Модулируемый сигнал служит ссылкой для последующих измерений EVM.

data = randi([0 15],1000,1);
refSym = qammod(data,16,'UnitAveragePower',true);

Передайте модулируемый сигнал через канал AWGN.

rxSym = awgn(refSym,20);

Измерьте EVM сигнала с шумом.

[rmsEVM,maxEVM,pctEVM,numSym] = evm(refSym,rxSym)
rmsEVM = 9.8775
maxEVM = 26.8385
pctEVM = 14.9750
numSym = 1000

Сгенерируйте отфильтрованные данные QAM и передайте их через канал AWGN. Вычислите коэффициент ошибок символа и оцените EVM полученного сигнала.

Создайте канал и отфильтруйте Систему objects™.

M = 16;
refConst = qammod(0:M-1,M);
channel = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (SNR)',...
    'SNR',15,'SignalPower',10);

txfilter = comm.RaisedCosineTransmitFilter('OutputSamplesPerSymbol',4);
rxfilter = comm.RaisedCosineReceiveFilter('InputSamplesPerSymbol',4, ...
    'DecimationFactor',4);

Создайте объект EVM к выходу RMS и максимальным измерениям EVM.

evm = comm.EVM('MaximumEVMOutputPort',true, ...
    'ReferenceSignalSource','Estimated from reference constellation', ...
    'ReferenceConstellation',refConst);

Создайте коэффициент ошибок, возражают и составляют задержку сигнала через передачу и получают фильтры. Для фильтра групповая задержка равна 1/2 FilterSpanInSymbols свойство.

rxd = (txfilter.FilterSpanInSymbols + rxfilter.FilterSpanInSymbols)/2;
errorRate = comm.ErrorRate('ReceiveDelay',rxd);

Выполните следующие операции канала:

  • Сгенерируйте случайные символы данных.

  • Примените 16-QAM модуляцию.

  • Пропустите модулируемые данные через повышенный косинус фильтр Tx.

  • Передайте переданный сигнал через канал AWGN.

  • Пропустите принятые данные через повышенный косинус фильтр Rx.

  • Демодулируйте отфильтрованные данные.

txData = randi([0 15],1000,1);
modData = qammod(txData,M);
txSig = txfilter(modData);
rxSig = channel(txSig);
filtSig = rxfilter(rxSig);
rxData = qamdemod(filtSig,M);

Вычислите статистику ошибок и отобразите коэффициент ошибок символа.

errStats = errorRate(txData,rxData);
symErrRate = errStats(1)
symErrRate = 0.0222

Измерьте и отобразите полученную RMS EVM и максимальные значения EVM. Примите задержку фильтра во внимание путем удаления первого rxd+1 символы. Поскольку существуют ошибки символа, EVM не может быть полностью точным.

[rmsEVM,maxEVM] = evm(filtSig(rxd+1:end))
rmsEVM = 17.2966
maxEVM = 40.1595

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

d = randi([0 7],2000,1);
txSig = pskmod(d,8,pi/8);

Передайте модулируемый сигнал через канал AWGN.

rxSig = awgn(txSig,30);

Создайте объект EVM. Измерьте RMS EVM использование переданного сигнала как ссылка.

evm = comm.EVM;
rmsEVM1 = evm(txSig,rxSig);

Выпустите объект EVM. Сконфигурируйте объект оценить EVM полученного сигнала против ссылочного созвездия.

release(evm)
evm.ReferenceSignalSource = 'Estimated from reference constellation';
evm.ReferenceConstellation = pskmod(0:7,8,pi/8);

Измерьте RMS EVM использование только полученного сигнала как вход. Проверьте, что это совпадает с результатом, полученным при использовании опорного сигнала.

rmsEVM2 = evm(rxSig);
[rmsEVM1 rmsEVM2]
ans = 1×2

    3.1524    3.1524

Измерьте EVM шумного сигнала 8-PSK использование двух типов пользовательских интервалов измерения. Отобразите результаты.

Установите количество кадров, M, и количество подкадров на систему координат, K.

M = 2;
K = 5;

Определите номер символов в подкадре. Вычислите соответствующую длину системы координат.

sfLen = 100;
frmLen = K*sfLen
frmLen = 500

Создайте объект EVM. Сконфигурируйте объект использовать пользовательский интервал измерения, равный длине системы координат.

evm1 = comm.EVM('MeasurementIntervalSource','Custom', ...
    'MeasurementInterval',frmLen);

Сконфигурируйте объект измерить EVM использование созвездия ссылки 8-PSK.

evm1.ReferenceSignalSource = 'Estimated from reference constellation';
evm1.ReferenceConstellation = pskmod(0:7,8,pi/8);

Создайте объект EVM и сконфигурируйте его, используют интервал измерения с 500 символами с периодическим сбросом. Сконфигурируйте объект измерить EVM использование созвездия ссылки 8-PSK.

evm2 = comm.EVM('MeasurementIntervalSource','Custom with periodic reset', ...
    'MeasurementInterval',frmLen);
evm2.ReferenceSignalSource = 'Estimated from reference constellation';
evm2.ReferenceConstellation = pskmod(0:7,8,pi/8);

Инициализируйте массивы сигнала к шуму и EVM.

rmsEVM1 = zeros(K,M);
rmsEVM2 = zeros(K,M);
snrdB = zeros(K,M);

Измерьте EVM для шумного сигнала 8-PSK, использующего оба объекта. ОСШ увеличивается на 1 дБ от подкадра до подкадра. Для evm1, 500 новых символов используются для расчета оценка. В этом случае раздвижное окно используется так, чтобы целый кадр данных всегда обрабатывался. Для evm2, символы очищены каждый раз, когда с новой системой координат сталкиваются.

for m = 1:M
    for k = 1:K
        data = randi([0 7],sfLen,1);
        txSig = pskmod(data,8,pi/8);
        snrdB(k,m) = k+(m-1)*K+7;
        rxSig = awgn(txSig,snrdB(k,m));
        rmsEVM1(k,m) = evm1(rxSig);
        rmsEVM2(k,m) = evm2(rxSig);
    end
end

Отобразитесь EVM измерил использование двух подходов. Работа с окнами, используемая в первом случае, обеспечивает усреднение через подкадры. Во втором случае, сброс объекта EVM после первой системы координат так, чтобы расчетные значения EVM более точно отразили текущий ОСШ.

stairs(snrdB(:),[rmsEVM1(:) rmsEVM2(:)])
xlabel('SNR (dB)')
ylabel('EVM (%)')
legend('No Reset','Periodic Reset')

Figure contains an axes object. The axes object contains 2 objects of type stair. These objects represent No Reset, Periodic Reset.

Создайте модулятор OFDM и объекты демодулятора.

ofdmmod = comm.OFDMModulator('FFTLength',32,'NumSymbols',4);
ofdmdemod = comm.OFDMDemodulator('FFTLength',32,'NumSymbols',4);

Определите количество поднесущих и символов в сигнале OFDM.

ofdmDims = info(ofdmmod);
numSC = ofdmDims.DataInputSize(1)
numSC = 21
numSym = ofdmDims.DataInputSize(2)
numSym = 4

Сгенерируйте случайные символы и примените модуляцию QPSK.

msg = randi([0 3],numSC,numSym);
modSig = pskmod(msg,4,pi/4);

OFDM модулируют сигнал QPSK. Передайте сигнал через канал AWGN. Демодулируйте сигнал с шумом.

txSig = ofdmmod(modSig);
rxSig = awgn(txSig,10,'measured');
demodSig = ofdmdemod(rxSig);

Создайте объект EVM, где результат усреднен по поднесущим. Измерьте EVM. Существует четыре записи, соответствующие каждому из 4 символов OFDM.

evm = comm.EVM('AveragingDimensions',1);
rmsEVM = evm(demodSig,modSig)
rmsEVM = 1×4

   27.4354   23.6279   22.6772   23.1699

Перезапишите объект EVM, где результат усреднен по символам OFDM. Измерьте EVM. Существует 21 запись, соответствующая каждой из этой 21 поднесущей.

evm = comm.EVM('AveragingDimensions',2);
rmsEVM = evm(demodSig,modSig)
rmsEVM = 21×1

   28.8225
   17.8536
   18.6809
   20.8872
   22.3532
   24.7197
   30.1954
   33.4899
   36.2847
   21.4230
      ⋮

Измерьте EVM и среднее значение и по поднесущим и по символам OFDM.

evm = comm.EVM('AveragingDimensions',[1 2]);
rmsEVM = evm(demodSig,modSig)
rmsEVM = 24.2986

Вычислите и постройте EVM сигнала OFDM. Сигнал состоит из двух пакетов, разделенных интервалом.

Создайте Системные объекты к:

  • OFDM модулируют сигнал

  • Введите шум фазы

  • Постройте изменяющиеся во времени сигналы

ofdmmod = comm.OFDMModulator('FFTLength',256,'NumSymbols',2);

pnoise = comm.PhaseNoise('Level',-60,'FrequencyOffset',20,'SampleRate',1000);

tscope = timescope('YLabel','EVM (%)','YLimits',[0 40], ...
    'SampleRate',1000,'TimeSpanSource','Property','TimeSpan',1.2, ...
    'ShowGrid',true);

Создайте объект EVM. Чтобы сгенерировать изменяющуюся во времени оценку EVM, установите AveragingDimensions свойство к 2.

evm = comm.EVM('MaximumEVMOutputPort',false, ...
    'ReferenceSignalSource','Input port', ...
    'AveragingDimensions',2);

Определите размерности входных данных модулятора OFDM.

modDims = info(ofdmmod)
modDims = 

  struct with fields:

    DataInputSize: [245 2]
       OutputSize: [544 1]

Создайте модулируемые QPSK случайные данные для первого пакета. Примените модуляцию OFDM.

data = randi([0 3],modDims.DataInputSize);
qpskSig = pskmod(data,4,pi/4);
txSig1 = ofdmmod(qpskSig);

Создайте второй пакет данных.

data = randi([0 3],modDims.DataInputSize);
qpskSig = pskmod(data,4,pi/4);
txSig2 = ofdmmod(qpskSig);

Конкатенация этих двух пакетов и включает интервал, в котором ничто не передается.

txSig = [txSig1; zeros(112,1); txSig2];

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

rxSigIQimb = iqimbal(txSig,2,5);

Примените шум фазы.

rxSig = pnoise(rxSigIQimb);

Измерьте EVM полученного сигнала и постройте его изменяющийся во времени EVM.

e = evm(txSig,rxSig);
tscope(e)

Алгоритмы

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

Блок или объект вычисляют RMS значение EVM по-другому для каждого метода нормализации.

Метод нормализации EVMАлгоритм
Опорный сигнал

EVMRMS=1Nk=1N(ek)1Nk=1N(Ik2+Qk2)*100

Средняя степень

EVMRMS(%)=1001Nk=1N(ek)Pavg

Пиковая мощность

EVMRMS(%)=1001Nk=1N(ek)Pmax

Где:

  • ek = ek=(IkI˜k)2+(QkQ˜k)2

  • I k является синфазным измерением k-ого символа в пакете

  • Q k является квадратурным измерением фазы k-ого символа в пакете

  • N является длиной входного вектора

  • P в среднем является средней степенью созвездия

  • P макс. является пиковой степенью созвездия

  • I k и Q k представляют идеальные (ссылочные) значения. I˜k и Q˜k представляйте измеренные (полученные) символы.

Макс. EVM является максимальным значением EVM в системе координат или EVMmax=max k[1,...,N]{EVMk}, где k является k-ым символом в пакете длины N.

Определение для EVMk варьируется, в зависимости от которого метода нормализации вы выбираете для вычислительных измерений. Блок или поддержка объектов эти алгоритмы.

Нормализация EVMАлгоритм
Опорный сигнал

EVMk=ek1Nk=1N(Ik2+Qk2)*100

Средняя степень

EVMk=100ekPavg

Пиковая мощность

EVMk=100ekPmax

Блок или объект вычисляют X - процентиль EVM путем создания гистограммы всего входящего EVM k значения. Выход вводит значение EVM, ниже которого падает X % значений EVM.

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

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

| |

Представленный в R2012a