В этом примере показано, как получить сигналы часов и анализировать переходы, импульсы, и вычислить метрики включая время нарастания, время спада, скорость нарастания, перерегулирование, отклонение от номинала, ширину импульса и рабочий цикл. Этот пример использует Data Acquisition Toolbox™ в сочетании с Signal Processing Toolbox™.
Используйте основанный на сеансе интерфейс в Data Acquisition Toolbox, чтобы сконфигурировать приобретение. Используйте статистику и функции измерения в Signal Processing Toolbox, чтобы анализировать сигнал данных.
Используйте daq.createSession
создать сеанс приобретения и добавить канал 0 из Национального Instruments® NI 9205 с ID 'cDAQ1Mod1'.
s = daq.createSession('ni'); addAnalogInputChannel(s,'cDAQ1Mod1', 0, 'Voltage');
По умолчанию сеанс сконфигурирован, чтобы запуститься для 1 000 сканирований/секунда.
Измените частоту развертки в 250 000 сканирований/секунда и установите длительность на 2 мс.
s.Rate = 250000; s.DurationInSeconds = 0.002;
Используйте startForeground
получать несколько сканирований.
[data, time] = s.startForeground; whos data time
Name Size Bytes Class Attributes data 500x1 4000 double time 500x1 4000 double
Полученные данные возвращены в парах TIME-DATA. ВРЕМЕНЕМ Является m x 1
матрица, где m
количество сканирований. ДАННЫМИ является m x n
матрица, где m
количество сканирований и n
количество каналов аналогового входа на сеансе.
Постройте сверхослабленный сигнал часов, который что вы только получили.
plot(time, data); xlabel('Time (secs)'), ylabel('Voltage');
Используйте 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), s.Rate)
sr = 7.0840e+04
Измените свою длительность сеанса приобретения и получите новый сигнал часов underdamped.
s.DurationInSeconds = 0.004; [data, time] = s.startForeground; plot(time, data); xlabel('Time (secs)'), ylabel('Voltage');
Сигналы часов Underdamped имеют перерегулирования. Перерегулирования выражаются как процент различия между государственными уровнями. Перерегулирования могут произойти сразу после ребра, в начале области аберрации постперехода. Они называются перерегулированиями постохоты. Измерьте перерегулирование с помощью overshoot
.
overshoot(data(95:270),s.Rate) legend('Location','NorthEast')
ans = 4.9451 2.5399
Перерегулирования могут также произойти незадолго до ребра, в конце области аберрации перед переходом. Они называются перерегулированиями перед охотой.
Отклонения от номинала могут произойти в пред и области постаберрации и выражаются как процент различия между государственными уровнями. Измерьте отклонение от номинала с дополнительными входными параметрами, задающими область, чтобы измерить аберрации.
undershoot(data(95:270),s.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