exponenta event banner

коммуникация. EVM

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

Описание

comm.EVM Система object™ измеряет характеристики модулятора или демодулятора нарушенного сигнала.

Для измерения величины вектора ошибки:

  1. Определите и настройте объект EVM. См. раздел Строительство.

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

Примечание

Начиная с R2016b, вместо использования step для выполнения операции, определенной объектом System, можно вызвать объект с аргументами, как если бы это была функция. Например, 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, которая измеряет среднеквадратичное 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

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

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

XPercentileValue

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

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

SymbolCountOutputPort

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

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

Методы

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

Разрешить изменение значения свойства объекта системы

reset

Сброс внутренних состояний объекта System

Примеры

свернуть все

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

Создайте отфильтрованные данные КАМ и передайте их через канал 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.

  • Фильтрация принятых данных через фильтр raised cosine 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 сигнала, используя оба объекта. SNR увеличивается на 1 дБ от подкадра к подкадру. Для evm1500 самых последних символов используются для вычисления оценки. В этом случае используется скользящее окно, в котором всегда обрабатывается весь кадр данных. Для 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 более точно отражают текущее SNR.

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 обеспечивают три метода нормализации. Можно нормализовать измерения в соответствии со средней мощностью опорного сигнала, средней мощностью созвездия или пиковой мощностью созвездия. Различные отраслевые стандарты следуют одному из этих методов нормализации.

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

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

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

Средняя мощность

EVMRMS (%) =1001N∑k=1N (ek) Павг

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

EVMRMS (%) =1001N∑k=1N (ek) Pmax

Где:

  • ek = ek = (Ik−I˜k) 2 + (Qk−Q˜k) 2

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

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

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

  • Pavg = Значение средней мощности созвездия

  • Pmax = Значение пиковой мощности созвездия

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

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

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

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

EVMk=ek1N∑k=1N (Ik2 + Qk2) * 100

Средняя мощность

EVMk = 100ekPavg

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

EVMk = 100ekPmax

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

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

.

См. также

| |

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