Этот пример показывает, как проанализировать импульсы и переходы и вычислить метрики включая время нарастания, время спада, скорость нарастания, перерегулирование, отклонение от номинала, ширину импульса и рабочий цикл.
Сначала посмотрим выборки из шумного синхросигнала.
load clocksig clock1 time1 Fs plot(time1,clock1) xlabel('Time (seconds)') ylabel('Voltage')
Использование statelevels
без выходного аргумента для визуализации уровней состояний. Уровни состояния оцениваются с помощью гистограммы.
statelevels(clock1)
ans = 1×2
0.0138 5.1848
Вычисленная гистограмма разделена на две области равных размеров между первым и последним интервалом. Режим каждой области гистограммы возвращается как расчетное значение уровня состояния в командном окне.
Используйте необязательные входные параметры, чтобы задать количество интервалов гистограммы, границы гистограммы и метод оценки уровня состояния.
Использование risetime
без выходного аргумента, чтобы визуализировать время нарастания положительных ребер.
risetime(clock1,time1)
ans = 5×1
10-4 ×
0.5919
0.8344
0.7185
0.8970
0.6366
Уровни ссылки по умолчанию для вычисления времени нарастания и времени спада заданы на уровне 10% и 90% от амплитуды формы волны.
Задайте пользовательские ссылки и состояния с помощью необязательных входных параметров, как показано ниже для измерения времени спада.
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
Теперь посмотрим данные с часов со значительным перерегулированием и недорегулированием.
load clocksig clock2 time2 Fs plot(time2,clock2) xlabel('Time (seconds)') ylabel('Voltage')
Заниженные тактовые сигналы имеют перерегулирования. Перерегулирования выражаются в процентах от различия между уровнями состояния. Перерегулирования могут происходить сразу после ребра, в начале области аберрации после перехода. Они называются постшут- перерегулированиями. Можно измерить их с помощью overshoot
функция.
overshoot(clock2(95:270),Fs)
ans = 2×1
4.9451
2.5399
legend('Location','NorthEast')
Перерегулирования могут также происходить непосредственно перед ребром в конце области аберрации перед переходом. Они называются preshoot overshoots. Точно так же можно измерить подколы в областях до и после аберрации. Недопуски также выражаются в процентах от различия между уровнями состояния. Используйте необязательные входные параметры, чтобы задать области, в которых можно измерить аберрации.
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