Этот пример показывает, как получить тактовые сигналы и анализировать переходы, импульсы и вычислительные метрики, включая время нарастания, время спада, скорость нарастания, перерегулирование, недорегулирование, ширину импульса и коэффициент заполнения. Этот пример использует Data Acquisition Toolbox в сочетании с Signal Processing Toolbox.
Чтобы настроить сбор, используйте Data Acquisition Toolbox. Используйте функции статистики и измерения в Signal Processing Toolbox, чтобы проанализировать сигнал данных.
Использование 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)')

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

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