Измерение характеристик импульса и перехода

Этот пример показывает, как анализировать импульсы и переходы и вычислить метрики включая время нарастания, осеннее время, скорость просмотра, перерегулирование, отклонение от номинала, ширина импульса и рабочий цикл.

Сигнал часов с шумом

Сначала давайте просмотрим выборки от шумного сигнала часов.

load clocksig clock1 time1 Fs
plot(time1, clock1)
xlabel('Time (secs)')
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 (secs)')
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