comm.EyeDiagram

Отобразите глазковую диаграмму для сигналов временной области

Описание

comm.EyeDiagram Система object™ отображает несколько трассировок модулируемого сигнала произвести глазковую диаграмму. Можно использовать объект показать характеристики модуляции сигнала, такие как эффекты импульсного формирования или искажений канала. Глазковая диаграмма может измерить характеристики сигнала и построить горизонтальные и вертикальные кривые ванны, когда дрожание и шум выполняют модель [1] двойного Дирака.

Отобразить глазковую диаграмму для входного сигнала:

  1. Создайте comm.EyeDiagram объект и набор его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Описание

ed = comm.EyeDiagram создает Системный объект глазковой диаграммы со значениями свойств по умолчанию.

пример

ed = comm.EyeDiagram(Name,Value) свойства наборов с помощью одного или нескольких аргумент пары "имя-значение". Заключите каждое имя свойства в одинарные кавычки. Незаданные свойства имеют значения по умолчанию.

Пример: comm.EyeDiagram('SampleRate',2,'DisplayMode','2D color histogram')

Свойства

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

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

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

Заголовок окна глазковой диаграммы в виде вектора символов.

Настраиваемый: да

Типы данных: char

Частота дискретизации входного сигнала в герц в виде положительного скаляра с действительным знаком.

Типы данных: double

Количество выборок на символ в виде положительного целого числа.

Настраиваемый: да

Типы данных: double

Количество выборок, чтобы пропустить прежде, чем построить первую точку в виде неотрицательного целого числа. Чтобы избежать непорядочного поведения, задайте смещение, чтобы быть меньше продукта свойств SamplesPerSymbol и SymbolsPerTrace.

Настраиваемый: да

Типы данных: double

Количество символов на трассировку в виде положительного целого числа. Чтобы получить измерения глаза и визуализировать кривые ванны, используйте значение по умолчанию 2.

Настраиваемый: да

Типы данных: double

Количество трассировок, чтобы отобразиться в виде положительного целого числа.

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите свойство DisplayMode на 'Line plot'.

Типы данных: double

Режим отображения глазковой диаграммы в виде одного из этих значений.

  • 'Line plot' — Наложите трассировки путем строения одного графика для каждой из последних трассировок TracesToDisplay.

  • '2D color histogram' — Отобразите цветовой градиент, который показывает, как часто вход совпадает с различным временем и амплитудными значениями.

Настраиваемый: да

Типы данных: char

Опция, чтобы включить измерения глазковой диаграммы в виде true или false. Установите это свойство на true отобразить панель измерения и вычисления в глазковой диаграмме.

Настраиваемый: да

Типы данных: логический

Опция, чтобы включить визуализацию ванны изгибается в виде 'None', 'Horizontal', 'Vertical', или 'Both'.

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите свойство EnableMeasurements на true.

Типы данных: char

Наложение гистограммы в виде 'None', 'Jitter', или 'Noise'.

  • Чтобы наложить горизонтальную гистограмму на глазковой диаграмме, установите это свойство на 'Jitter'.

  • Чтобы наложить вертикальную гистограмму на глазковой диаграмме, установите это свойство на 'Noise'.

  • Чтобы не отобразить наложение гистограммы, установите это свойство на 'None'.

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите свойство DisplayMode на '2D color histogram' и свойство EnableMeasurements к true.

Типы данных: char

Амплитудный порог уровня в вольтах в виде скаляра с действительным знаком. Это свойство разделяет различные сигнальные области для горизонтали (дрожание) гистограммы. Сброс гистограмм дрожания, когда это свойство изменяется.

Для сигналов невозврата к нулю (NRZ), набор DecisionBoundary к 0. Для сигналов возврата к нулю (RZ), набор DecisionBoundary к половине максимальной амплитуды.

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите свойство EnableMeasurements на true.

Типы данных: double

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

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите свойство EnableMeasurements на true.

Типы данных: double

Амплитудные уровни переходов взлета и падения в виде двухэлементного вектора-строки. Задайте векторные значения как проценты амплитуды глаза. Пересекающиеся гистограммы порогового сброса взлета и падения, когда это свойство изменяется.

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите свойство EnableMeasurements на true.

Типы данных: double

Амплитудный допуск горизонтальных пересечений в вольтах в виде скаляра с действительным знаком. Увеличьте это значение, чтобы предоставить больше допуска побочным пересечениям из-за шума. Дрожите и сброс гистограмм взлета и падения, когда это свойство изменится.

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите свойство EnableMeasurements на true.

Типы данных: double

Частота ошибок по битам (BER), используемая в измерениях глаза в виде скаляра в области значений [0, 0.5]. Системный объект использует это значение, чтобы измерить случайное дрожание, общее дрожание, горизонтальные открытия глаза и вертикальные открытия глаза.

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите свойство EnableMeasurements на true.

Типы данных: double

Значения BER раньше вычисляли открытия кривых ванны в виде вектора элементов в области значений [0, 0.5]. Горизонтальные и вертикальные открытия глаза вычисляются для каждого из значений, заданных этим свойством.

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите свойство EnableMeasurements на true и свойство ShowBathtub к 'Both', 'Horizontal', или 'Vertical'.

Типы данных: double

Длительность исходных данных отбрасывается от измерений в секундах в виде неотрицательного скаляра.

Зависимости

Чтобы включить это свойство, установите свойство EnableMeasurements на true.

Типы данных: double

Сверхдискретизация метода в виде 'None', 'Input interpolation', или 'Histogram interpolation'.

Чтобы построить глазковые диаграммы как можно быстрее, установите OversamplingMethod к 'None'. Недостаток к не сверхдискретизации - то, что графики выглядят пикселизированными, когда количество sybomls на трассировку мало.

Чтобы создать более сглаженные, менее пикселизированные графики с помощью небольшого количества символов на трассировку, установите OversamplingMethod to'Input interpolation' или 'Histogram interpolation'. В этом случае, 'Input interpolation' более быстрый метод интерполяции и приводит к хорошим результатам, когда отношение сигнал-шум (SNR) высоко. С низким ОСШ не рекомендуется этот метод сверхдискретизации, потому что он вводит смещение центрам областей значений гистограммы. 'Histogram interpolation' не с такой скоростью, как другие методы, но это обеспечивает хорошие результаты, даже когда ОСШ является низким.

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите свойство DisplayMode на '2D color histogram'.

Типы данных: char

Цветовая шкала гистограммы в виде 'Linear' или 'Logarithmic'. Измените это свойство, если определенные области гистограммы включают диспропорциональное число точек. Используйте 'Logarithmic' опция для глазковых диаграмм с резким peaks, где сигнал повторяющимся образом совпадает с определенным временем и амплитудными значениями.

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите свойство DisplayMode на '2D color histogram'.

Типы данных: char

Цвет, исчезающий в виде true или false. Чтобы исчезнуть точки в отображении как, интервал времени после того, как они будут сначала построены увеличения, установил это свойство на true. Эта анимация напоминает осциллограф.

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите свойство DisplayMode на 'Line plot'.

Типы данных: логический

Покажите мнимый компонент сигнала в виде true или false. Чтобы просмотреть мнимый компонент или квадратурный компонент входного сигнала, установите это свойство на true.

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите свойство EnableMeasurements на false.

Типы данных: логический

Y- глазковой диаграммы в вольтах в виде двухэлементного вектора. Первый элемент соответствует ymin и второму к ymax. Второй элемент должен быть больше первого.

Настраиваемый: да

Типы данных: double

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

Настраиваемый: да

Типы данных: логический

Определите объем положения окна в пикселях в виде четырехэлементного вектора-строки из формы [left bottom width height].

Настраиваемый: да

Типы данных: double

Использование

Синтаксис

Описание

ed(x) отображения и анализируют входной сигнал x в глазковой диаграмме.

Входные параметры

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

Входной сигнал, который будет анализироваться и отображаться в глазковой диаграмме в виде вектора или матрицы. x может быть или вектор действительных чисел или комплексный вектор или действительная матрица 2D столбца.

Типы данных: double
Поддержка комплексного числа: Да

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

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

showОкно Show scope
hideСкройте окно scope
horizontalBathtubГоризонтальная кривая ванны
verticalBathtubВертикальная кривая ванны
jitterHistogramГистограмма дрожания
noiseHistogramШумовая гистограмма
measurementsИзмерьте параметры глазковой диаграммы
stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

свернуть все

Задайте частоту дискретизации и количество выходных выборок на параметры символа.

fs = 1000;
sps = 4;

Создайте фильтр передачи и объекты глазковой диаграммы.

txfilter = comm.RaisedCosineTransmitFilter('OutputSamplesPerSymbol',sps);
ed = comm.EyeDiagram('SampleRate',fs*sps,'SamplesPerSymbol',sps);

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

data = randi([0 3],1000,1);
modSig = pskmod(data,4,pi/4);

txSig = txfilter(modSig);
ed(txSig)

Покажите эффекты различных методов интерполяции для 2D гистограмм для различных условий отношения сигнал-шум (SNR).

Создайте модулятор GMSK и Системные объекты глазковой диаграммы. Укажите, что отображения глазковой диаграммы с помощью 2D цветной гистограммы и строят действительные и мнимые сигналы.

gmsk = comm.GMSKModulator('PulseLength',3);
ed = comm.EyeDiagram('DisplayMode','2D color histogram', ...
    'ShowImaginaryEye',true,'YLimits',[-2 2]);

Сгенерируйте данные, содержащие положительные и отрицательные значения и примените модуляцию GMSK.

d = 2*randi([0 1],1e4,1)-1;
x = gmsk(d);
%Pass the signal through an AWGN channel having a 25 dB SNR and with a fixed seed for repeatable results.
randStream = RandStream('mt19937ar','Seed',5489);
y = awgn(x,25,'measured',randStream);

Отобразите глазковую диаграмму.

ed(y)

Для небольшого количества выборок на трассировку (16), отсутствие интерполяции вызывает кусочно-непрерывное поведение.

Чтобы компенсировать кусочно-непрерывное поведение, установите OversamplingMethod свойство к 'Input interpolation'. Сбросьте объект и отобразите глазковую диаграмму.

ed.OversamplingMethod = 'Input interpolation';
reset(ed)
ed(y)

Интерполяция сглаживает глазковую диаграмму.

Теперь передайте модулируемый GMSK сигнал через канал AWGN, имеющий ОСШ на 10 дБ. Отобразите глазковую диаграмму.

y = awgn(x,10,'measured',randStream);
reset(ed)
ed(y)

Вертикальное чередование является результатом входной интерполяции, которая ограничила точность в условиях низкого ОСШ.

Установите OversamplingMethod свойство к 'Histogram interpolation'. Постройте глазковую диаграмму.

ed.OversamplingMethod = 'Histogram interpolation';
reset(ed)
ed(y)

График глазковой диаграммы теперь представляет точно, потому что метод интерполяции гистограммы работает на все значения ОСШ. Этот метод заканчивается в увеличенное время выполнения.

Визуализируйте глазковую диаграмму для входного сигнала двойного Дирака. Вычислите измерения глаза и визуализируйте горизонтальные и вертикальные кривые ванны. Наложите горизонталь (дрожание) гистограмма.

Задайте частоту дискретизации, выборки на символ и количество трассировок.

fs = 10000;
sps = 200;
numTraces = 2000;

Создайте объект глазковой диаграммы, имеющий эти свойства:

  • 2D цветное отображение гистограммы

  • Логарифмическая цветовая шкала

  • Наложение гистограммы дрожания

  • Горизонтальные и вертикальные кривые ванны

  • Пределы оси Y [-1.3 1.3]

  • Увеличенная высота окна

ed = comm.EyeDiagram('SampleRate',fs,'SamplesPerSymbol',sps,'SampleOffset',sps/2, ...
    'DisplayMode','2D color histogram','ColorScale','Logarithmic', ...
    'EnableMeasurements',true,'OverlayHistogram','Jitter', ...
    'ShowBathtub','Both','YLimits', [-1.3 1.3]);
ed.Position = ed.Position + [0 0 0 120];

Сгенерируйте форму волны, имеющую двойного Дирака и случайное дрожание. Задайте времена взлета и падения на 3 мс.

src = commsrc.pattern('SamplesPerSymbol',sps,'RiseTime',3e-3,'FallTime', 3e-3);
src.Jitter = commsrc.combinedjitter('RandomJitter','on','DiracJitter','on', ...
    'DiracDelta',[-10e-04 10e-04],'RandomStd',5e-4);

Сгенерируйте два символа для каждой трассировки.

symbols = src.generate(numTraces*2);

Обработайте данные в пакетах 40e3 символы, добавьте шум и отобразите глазковую диаграмму.

for idx = 1:(numTraces-1)/100
    x = symbols(1+(idx-1)*100*2*sps:idx*100*2*sps); % Read 40,000 symbols
    y = awgn(x,30);                                 % Add noise
    ed(y);                                          % Display eye diagram
end

Отобразите глазковую диаграмму для формы волны, имеющей двойного Дирака и случайное дрожание. Постройте дрожание и шумовые гистограммы.

Задайте частоту дискретизации, выборки на символ и количество параметров трассировок.

fs = 1000;
sps = 200;
numTraces = 1000;

Создайте объект глазковой диаграммы.

ed = comm.EyeDiagram('SampleRate',fs,'SamplesPerSymbol',sps,'SampleOffset',sps/2, ...
    'DisplayMode','2D color histogram','ColorScale','Logarithmic', ...
    'EnableMeasurements',true,'YLimits',[-1.2 1.2]);

Сгенерируйте форму волны, имеющую двойного Дирака и случайное дрожание. Задайте времена взлета и падения на 3 мс.

src = commsrc.pattern('SamplesPerSymbol',sps,'RiseTime',3e-3,'FallTime', 3e-3);
src.Jitter = commsrc.combinedjitter('RandomJitter','on','DiracJitter','on', ...
    'DiracDelta',[-10e-04 10e-04],'RandomStd',5e-4);

Сгенерируйте два символа для каждой трассировки.

x = src.generate(numTraces*2);

Передайте сигнал через канал AWGN с фиксированным seed для повторяемых результатов.

randStream = RandStream('mt19937ar','Seed',5489);
y = awgn(x,30,'measured',randStream);
ed(y)

Вычислите счет гистограммы дрожания для каждого интервала при помощи jitterHistogram метод. Постройте гистограмму.

jbins = jitterHistogram(ed);
plot(jbins)

Вычислите шумовой счет гистограммы для каждого интервала при помощи noiseHistogram метод. Постройте гистограмму.

nbins = noiseHistogram(ed);
plot(nbins)

Отобразите глазковую диаграмму для формы волны, имеющей двойного Дирака и случайное дрожание. Сгенерируйте и постройте горизонтальные и вертикальные кривые ванны.

Задайте частоту дискретизации, выборки на символ и количество параметров трассировок.

fs = 1000;
sps = 200;
numTraces = 1000;

Создайте объект глазковой диаграммы.

ed = comm.EyeDiagram('SampleRate',fs,'SamplesPerSymbol',sps,'SampleOffset',sps/2, ...
    'DisplayMode','2D color histogram','ColorScale','Logarithmic', ...
    'EnableMeasurements',true,'ShowBathtub','Both','YLimits',[-1.2 1.2]);

Сгенерируйте форму волны, имеющую двойного Дирака и случайное дрожание. Задайте времена взлета и падения на 3 мс.

src = commsrc.pattern('SamplesPerSymbol',sps,'RiseTime',3e-3,'FallTime', 3e-3);
src.Jitter = commsrc.combinedjitter('RandomJitter','on','DiracJitter','on', ...
    'DiracDelta',[-5e-04 5e-04],'RandomStd',2e-4);

Сгенерируйте два символа для каждой трассировки.

x = src.generate(numTraces*2);

Передайте сигнал через канал AWGN с фиксированным seed для повторяемых результатов.

randStream = RandStream('mt19937ar','Seed',5489);
y = awgn(x,30,'measured',randStream);

Отобразите глазковую диаграмму.

ed(y)

Сгенерируйте горизонтальные данные о ванне для глазковой диаграммы. Постройте кривую.

hb = horizontalBathtub(ed)
semilogy([hb.LeftThreshold],[hb.BER],'b',[hb.RightThreshold],[hb.BER],'b')
grid
hb = 

  1x13 struct array with fields:

    BER
    LeftThreshold
    RightThreshold

Сгенерируйте вертикальные данные о ванне для глазковой диаграммы. Постройте кривую.

vb = verticalBathtub(ed)
semilogx([vb.BER],[vb.LowerThreshold],'b',[vb.BER],[vb.UpperThreshold],'b')
grid
vb = 

  1x13 struct array with fields:

    BER
    UpperThreshold
    LowerThreshold

Создайте объединенный объект дрожания, имеющий случайное дрожание с 2e-4 стандартным отклонением.

jtr = commsrc.combinedjitter('RandomJitter','on','RandomStd',2e-4);

Сгенерируйте сигнал NRZ, имеющий случайное дрожание и времена взлета и падения на 3 мс.

genNRZ = commsrc.pattern('Jitter',jtr,'RiseTime',3e-3,'FallTime',3e-3);
x = generate(genNRZ,2000);

Передайте сигнал через канал AWGN с фиксированным seed для повторяемых результатов.

randStream = RandStream('mt19937ar','Seed',5489);
y = awgn(x,30,'measured',randStream);

Создайте объект глазковой диаграммы. Включите измерения.

ed = comm.EyeDiagram('SamplesPerSymbol',genNRZ.SamplesPerSymbol, ...
    'SampleRate',genNRZ.SamplingFrequency,'SampleOffset',genNRZ.SamplesPerSymbol/2, ...
    'EnableMeasurements',true,'DisplayMode','2D color histogram', ...
    'OversamplingMethod','Input interpolation','ColorScale','Logarithmic','YLimits',[-1.2 1.2]);

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

ed(y)

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

ed(y)
hide(ed)

Отобразите данные при помощи measurements метод.

eyestats = measurements(ed);
riseTime = eyestats.RiseTime
fallTime = eyestats.FallTime
riseTime =

    0.0030


fallTime =

    0.0030

Измеренные значения совпадают со спецификацией на 3 мс.

Больше о

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

Ссылки

[1] Стивенс, Выкуп. "Анализ дрожания: модель двойного Дирака, RJ/DJ и Q-шкала". Техническое примечание Agilent (2004).

[2] Оу, N., Т. Фарахмэнд, А. Куо, С. Тэбэйтабэеи и А. Иванов. “Модели дрожания для Проекта и Теста Скорости Гбит/с Последовательные Межсоединения”. Проект IEEE и Тест Компьютеров 21, № 4 (июль 2004): 302–13. https://doi.org/10.1109/MDT.2004.34.

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

Введенный в R2017b