В этом примере показано, как получить сигналы часов и анализировать переходы, импульсы, и вычислить метрики включая время нарастания, время спада, скорость нарастания, перерегулирование, отклонение от номинала, ширину импульса и рабочий цикл. Этот пример использует Data Acquisition Toolbox в сочетании с Signal Processing Toolbox.
Используйте Data Acquisition Toolbox, чтобы сконфигурировать захват. Используйте статистику и функции измерения в Signal Processing Toolbox, чтобы анализировать сигнал данных.
Используйте daq создать DataAcquisition и addinput добавить канал из Национального Instruments® NI 9205 с ID 'cDAQ1Mod1'.
dq = daq("ni"); addinput(dq,"cDAQ1Mod1","ai0","Voltage");
По умолчанию DataAcquisition сконфигурирован, чтобы достигнуть 1 000 сканов/секунда.
Измените частоту развертки в 250 000 сканов/секунда.
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
Получите новый сигнал часов underdamped.
[data, time] = read(dq, milliseconds(4), "OutputFormat", "Matrix"); plot(time, data) xlabel('Time (s)') ylabel('Voltage (V)')

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

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