коммуникация. 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

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

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

Переменный размер поддержки объектов вводит по размерностям, в которых происходит усреднение. Однако входной размер для неусредненных размерностей должен остаться постоянным между вызовами step. Например, если вход имеет размер, [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.

Методы

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

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

Примеры

развернуть все

Создайте объект 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')

Создайте модулятор 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 = dsp.TimeScope('YLabel','EVM (%)','YLimits',[0 40], ...
    'SampleRate',1000,'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)Pв среднем

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

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

Где:

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

  • Ik = Синфазное измерение k th символ в пакете

  • Qk = измерение фазы Quadrature k th символ в пакете

  • N = длина Входного вектора

  • Pavg = значение для Average constellation power

  • Pmax = значение для Peak constellation power

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

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

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

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

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

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

EVMk=100ekPв среднем

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

EVMk=100ekPmax

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

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

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

| |

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