В этом примере показано, как анализировать импульсы и переходы и вычислить метрики включая время нарастания, время спада, скорость нарастания, перерегулирование, отклонение от номинала, ширину импульса, рабочий цикл и импульсный период.
Сначала просмотрите выборки от шумного сигнала часов.
load clocksig clock1 time1 Fs plot(time1,clock1) xlabel('Time (seconds)') ylabel('Voltage')
Используйте statelevels
без выходного аргумента, чтобы визуализировать государственные уровни. Метод гистограммы используется, чтобы оценить государственные уровни с этими шагами:
Определите минимальные и максимальные амплитуды данных.
Для конкретного количества интервалов гистограммы определите ширину интервала, которая является отношением амплитудной области значений к количеству интервалов. Используйте дополнительные входные параметры, чтобы задать количество границ гистограммы и интервалов гистограммы.
Сортировка значений данных в интервалы гистограммы.
Идентифицируйте самые низкие и самые высокие индексируемые интервалы гистограммы с ненулевыми количествами.
Разделите гистограмму на две подгистограммы.
Вычислите государственные уровни путем определения режима или среднего значения верхних и более низких гистограмм.
statelevels(clock1)
ans = 1×2
0.0138 5.1848
Вычисленная гистограмма разделена на две равных размерных области между первым и последним интервалом. Режим каждой области гистограммы возвращен как предполагаемое значение государственного уровня в командном окне.
Время нарастания является длительностью между моментами, где возрастающий переход каждого импульса пересекается от ниже к верхним контрольным уровням. Время спада является длительностью между моментами, где падающий переход каждого импульса пересекается от верхнего до более низких контрольных уровней. Контрольные уровни по умолчанию для вычислительного времени нарастания и времени спада установлены в 10% и 90% амплитуды формы волны.
Используйте risetime
без выходного аргумента, чтобы визуализировать время нарастания положительно идущих ребер. Затем используйте falltime
без выходного аргумента, чтобы визуализировать время спада отрицательно идущих ребер. Задайте контрольные уровни как [20
80 ] и государственные уровни как [
0
5 ].
risetime(clock1,time1)
ans = 5×1
10-4 ×
0.5919
0.8344
0.7185
0.8970
0.6366
falltime(clock1,time1,'PercentReferenceLevels',[20 80],'StateLevels',[0 5])
ans = 4×1
10-4 ×
0.4294
0.5727
0.5032
0.4762
Получите измерения программно путем вызывания функций с одним или несколькими выходными аргументами. Для однородно выборочных данных можно обеспечить частоту дискретизации вместо временного вектора. Используйте slewrate
измерять наклон каждого положительно идущего или отрицательно идущего ребра.
sr = slewrate(clock1(1:100),Fs)
sr = 7.0840e+04
Данные о представлении Now из часов со значительным перерегулированием и отклонением от номинала.
load clocksig clock2 time2 Fs plot(time2,clock2) xlabel('Time (seconds)') ylabel('Voltage')
Сигналы часов Underdamped имеют перерегулирования. Перерегулирования описываются как процент различия между государственными уровнями. Перерегулирования могут произойти сразу после ребра, в начале области аберрации постперехода. Используйте overshoot
функционируйте, чтобы измерить эти перерегулирования постохоты.
overshoot(clock2(95:270),Fs)
ans = 2×1
4.9451
2.5399
legend('Location','NorthEast')
Перерегулирования могут также произойти незадолго до ребра, в конце области аберрации перед переходом. Они называются перерегулированиями перед охотой.
Точно так же можно измерить отклонения от номинала в пред - и области постаберрации. Отклонения от номинала также описываются как процент различия между государственными уровнями. Используйте дополнительные входные параметры, чтобы задать области, в которых можно измерить аберрации.
undershoot(clock2(95:270),Fs,'Region','Postshoot')
ans = 2×1
3.8499
4.9451
legend('Location','NorthEast')
Ширина является длительностью между пересечениями середины контрольного уровня первых и вторых переходов каждого импульса. Используйте pulsewidth
без выходного аргумента, чтобы построить подсвеченную ширину импульса. Задайте положительную полярность.
pulsewidth(clock2, time2,'Polarity','Positive');
Используйте dutycycle
вычислить отношение ширины импульса к импульсному периоду для каждого импульса отрицательной полярности.
d = dutycycle(clock2,time2,'Polarity','negative')
d = 3×1
0.4979
0.5000
0.5000
Используйте pulseperiod
получить периоды каждого цикла формы волны. Период является длительностью между первым переходом импульса тока и первым переходом следующего импульса. Используйте эту информацию, чтобы вычислить другие метрики как средняя частота формы волны или общего наблюдаемого дрожания.
pp = pulseperiod(clock2, time2); avgFreq = 1./mean(pp)
avgFreq = 1.2500e+03
totalJitter = std(pp)
totalJitter = 1.9866e-06
dutycycle
| falltime
| overshoot
| pulseperiod
| pulsewidth
| risetime
| slewrate
| statelevels
| undershoot