comm.EVM

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

Описание

The 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 -percentile EVM, установите это свойство равным true. Измерения X -percentile EVM сохраняются до тех пор, пока вы не сбросите объект. Эти измерения вычисляются при помощи всех входных кадров с момента последнего сброса. Значение по умолчанию является false.

XPercentileValue

X значение -percentile

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 принятого сигнала.

Создайте канал и фильтр System 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. The axes 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 обеспечивают три метода нормализации. Можно нормировать измерения в соответствии со средней степенью опорного сигнала, средней степенью созвездия или пиковой степенью созвездия. Одним из таких методов нормализации являются различные промышленные стандарты.

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

Метод нормализации 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

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

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

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

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

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

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

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

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

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

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

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

EVMk=100ekPavg

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

EVMk=100ekPmax

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

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

.

См. также

| |

Введенный в R2012a