В этом примере показано, как получать синхросигналы и анализировать переходы, импульсы и вычислять метрики, включая время нарастания, время падения, скорость нарастания, переполнение, недоделку, длительность импульса и рабочий цикл. В этом примере используется панель инструментов сбора данных совместно с панелью инструментов обработки сигналов.
Используйте панель инструментов сбора данных для настройки сбора данных. Используйте функции статистики и измерения в панели инструментов обработки сигналов для анализа сигнала данных.
Использовать daq для создания DataAcquisition и addinput добавить канал из NI-9205 National Instruments ® с идентификатором 'cDAQ1Mod1'.
dq = daq("ni"); addinput(dq,"cDAQ1Mod1","ai0","Voltage");
По умолчанию DataAcquisition настроен на выполнение со скоростью 1000 сканирований в секунду.
Измените скорость сканирования на 250000 сканирований в секунду.
dq.Rate = 250000;
Использовать read для получения нескольких сканирований в течение 2 мс.
[data, time] = read(dq, milliseconds(2), "OutputFormat", "Matrix");
Постройте график полученного тактового сигнала (обратите внимание, что он является избыточным).
plot(time, data) xlabel('Time (s)') ylabel('Voltage (V)')

Использовать statelevels без выходного аргумента для визуализации уровней состояния в гистограмме.
statelevels(data)
ans =
0.0138 5.1848

Вычисленная гистограмма делится на две области одинакового размера между первым и последним ячейками. Режим каждой области гистограммы возвращается как оцененное значение уровня состояния в окне команд.
Дополнительные входные аргументы используются для указания количества ячеек гистограммы, границ гистограммы и метода оценки уровня состояния.
Использовать risetime без выходного аргумента для визуализации времени нарастания положительных ребер.
risetime(data,time)
ans =
1.0e-04 *
0.5919
0.8344
0.7185
0.8970
0.6366

Опорные уровни по умолчанию для вычисления времени нарастания и времени спада устанавливаются на уровне 10% и 90% амплитуды сигнала.
Измерьте время падения, указав пользовательские опорные уровни и уровни состояний.
falltime(data,time,'PercentReferenceLevels',[20 80],'StateLevels',[0 5])
ans =
1.0e-04 *
0.4294
0.5727
0.5032
0.4762

Получайте измерения программно, вызывая функции с одним или несколькими выходными аргументами. Для данных с равномерной выборкой можно указать частоту выборки вместо вектора времени. Использовать slewrate для измерения уклона каждой положительной или отрицательной кромки.
sr = slewrate(data(1:100), dq.Rate)
sr = 7.0840e+04
Получение нового пониженного тактового сигнала.
[data, time] = read(dq, milliseconds(4), "OutputFormat", "Matrix"); plot(time, data) xlabel('Time (s)') ylabel('Voltage (V)')

Пониженные тактовые сигналы показывают превышение. Превышение выражается в процентах от разницы между уровнями состояний. Переполнение может произойти сразу после края, в начале области постпереходной аберрации. Это называется «postshoot» overshoot. Измерение превышения с помощью overshoot.
overshoot(data(95:270),dq.Rate) legend('Location','NorthEast')
ans =
4.9451
2.5399

Переполнение также может произойти непосредственно перед краем, в конце области предпереходной аберрации. Это называется «preshoot» overshoot.
Недоделка может происходить в областях до аберрации и после аберрации и выражается в процентах от разницы между уровнями состояний. Измерение недоделки с помощью необязательных входных аргументов, указывающих область для измерения аберраций.
undershoot(data(95:270),dq.Rate,'Region','Postshoot') legend('Location','NorthEast')
ans =
3.8499
4.9451

Использовать pulsewidth без выходного аргумента для визуализации выделенной ширины импульса.
pulsewidth(data, time, 'Polarity', 'Positive');

При этом отображаются импульсы положительной полярности. Выберите отрицательную полярность для просмотра ширины импульсов отрицательной полярности.
Использовать dutycycle вычисляют отношение длительности импульса к периоду импульса для каждого импульса положительной или отрицательной полярности. Рабочие циклы выражаются в процентах от периода импульса.
d = dutycycle(data,time,'Polarity','negative')
d =
0.4979
0.5000
0.5000
Использовать pulseperiod для получения периодов каждого цикла формы сигнала. Эта информация используется для вычисления других показателей, таких как средняя частота сигнала или общее наблюдаемое дрожание.
pp = pulseperiod(data, time); avgFreq = 1./mean(pp) totalJitter = std(pp)
avgFreq =
1.2500e+03
totalJitter =
1.9866e-06