В этом примере измеряются импульсные и переходные метрики шумного прямоугольного импульса. Метрики импульса включают в себя время нарастания, время падения, длительность импульса и период импульса. Метрики перехода включают в себя события среднего пересечения, переполнение и недоделку областей аберрации после перехода шумного прямоугольного импульса.
Создайте шумный прямоугольный импульс. Шум представляет собой белый гауссов шум с нулевым средним значением и стандартным отклонением 0,1. Сохранить данные в rectData.
t = 0:.01:9.99; % time vector w = 1; % pulse width d = w/2:w*2:10; % delay vector y2 = pulstran(t,d,'rectpuls',w); rectData = y2'+0.1*randn(1000,1); % rectangular pulse with noise plot(rectData); xlabel('Samples'); ylabel('Level (volts)');

dsp.StateLevels Системный объект использует метод гистограммы для оценки уровней состояния двухуровневого сигнала. Способ гистограммы включает следующие этапы:
Определите максимальную и минимальную амплитуды данных.
Для заданного количества ячеек гистограммы определите ширину ячейки, которая является отношением диапазона амплитуд к количеству ячеек.
Сортировка значений данных в ячейки гистограммы.
Определите самую низкую индексированную ячейку гистограммы и самую высокую индексированную ячейку гистограммы с ненулевыми счетчиками.
Разделить гистограмму на две субгистограммы.
Вычислите уровни состояния путем определения режима или среднего значения верхней и нижней гистограмм.
Постройте график уровней состояния прямоугольного импульса.
sLevel = dsp.StateLevels; levels = sLevel(rectData); figure(1); plot(sLevel);

Использование dsp.PulseMetrics Системный объект позволяет вычислить такие метрики, как время нарастания, время падения, длительность импульса и период импульса прямоугольного импульса. Постройте график импульса с уровнями состояния и эталонными уровнями.
pMetrics = dsp.PulseMetrics('StateLevels',levels,'CycleOutputPort',true); [pulse,cycle] = pMetrics(rectData); plot(pMetrics); xlabel('Samples');

Время нарастания - это длительность между моментами, когда восходящий переход каждого импульса пересекает нижний и верхний опорные уровни. Просмотр времени нарастания каждого импульса.
pulse.RiseTime
ans = 4×1
0.8864
0.8853
1.6912
1.7727
Время падения - это длительность между моментами, когда переход падения каждого импульса пересекает верхний и нижний опорные уровни. Просмотр времени падения каждого импульса.
pulse.FallTime
ans = 4×1
2.4263
0.7740
1.7339
0.9445
Ширина - это длительность между пересечениями среднего опорного уровня первого и второго переходов каждого импульса. Просмотр ширины каждого импульса.
pulse.Width
ans = 4×1
99.8938
100.0856
100.1578
100.1495
Период - это длительность между первым переходом импульса тока и первым переходом следующего импульса. Просмотр периода каждого импульса.
cycle.Period
ans = 3×1
199.9917
199.9622
199.9291
Polarity имущества pMetrics объект имеет значение 'Positive'. Следовательно, объект вычисляет метрики импульсов, начиная с первого положительного перехода.
Если RunningMetrics свойство имеет значение trueобъект обрабатывает данные как непрерывный поток выполняемых данных. Если в конце имеется неполный импульс, объект возвращает метрики последнего импульса на следующем этапе процесса, как только у него будет достаточно данных для завершения импульса. Если RunningMetrics свойство имеет значение false, объект обрабатывает каждый вызов независимо. Если последний импульс является неполным, объект вычисляет все метрики, которые он может вернуть с доступными данными. Например, если импульс наполовину завершен, объект может возвратить время нарастания последнего импульса, но не период импульса.
Учитывая, что полярность положительная и метрики выполнения установлены в значение false, прямоугольный импульс имеет:
Первый положительный переход в 200 секунд
Три полных и два неполных импульса (первый и последний)
Четыре положительных перехода и четыре отрицательных перехода
В зависимости от метрики количество элементов в метрическом векторе равно либо количеству переходов, либо количеству полных импульсов. Вектор времени подъема имеет четыре элемента, что соответствует числу переходов. Период цикла имеет три элемента, что соответствует количеству полных импульсов.
Установите RunningMetrics свойство для true.
release(pMetrics);
pMetrics.RunningMetrics = true;
[pulse,cycle] = pMetrics(rectData);
plot(pMetrics);
xlabel('Samples');
Объект pMetrics имеет три положительных перехода и три отрицательных перехода. Объект ожидает завершения последнего импульса, прежде чем он вернет метрики для последнего импульса.
Разделите входные данные на два кадра по 500 выборок в каждом кадре. Вычислите импульсные метрики данных в рабочем режиме. Количество циклов итерации соответствует количеству обработанных кадров данных.
release(pMetrics); framesize = 500; for i = 1:2 data = rectData((((i-1)*framesize)+1):i*framesize); [pulse,cycle] = pMetrics(data); pulse.RiseTime end
ans = 0.8864
ans = 2×1
0.8853
1.6912
Первый кадр содержит один полный импульс и 2 неполных импульса. Значение времени нарастания, отображаемое на первом этапе итерации, соответствует переходу возрастания в этом полном импульсе. Время нарастания последнего полного импульса на этом шаге итерации не отображается. Алгоритм ожидает завершения импульсных данных. Второй кадр данных содержит оставшуюся часть этого импульса и другой полный импульс. Вектор времени нарастания на втором этапе итерации имеет два элемента - первое значение соответствует возрастающему переходу неполного импульса на предыдущем этапе, а второе значение соответствует возрастающему переходу полного импульса на текущем этапе.
Метрики перехода соответствуют метрикам первого и второго переходов. Использование dsp.TransitionMetrics В системном объекте можно определить события middlecross и вычислить время после превышения и время после понижения прямоугольного импульса. Чтобы измерить метрики постшута, установите PostshootOutputPort имущество dsp.TransitionMetrics к true.
tMetrics = dsp.TransitionMetrics('StateLevels',levels,'PostshootOutputPort',true); [transition,postshoot] = tMetrics(rectData); plot(tMetrics); xlabel('Samples');

Средне-перекрестные события являются моментами времени, когда импульсные переходы пересекают средний опорный уровень. Просмотр средне-поперечных событий импульса.
transition.MiddleCross
ans = 9×1
99.4345
199.4582
299.3520
399.4499
499.5355
599.4121
699.5699
799.3412
899.4907
Переполнения и недоработки выражаются в процентах от разницы между уровнями состояний. Вскрытия и недоделки, возникающие после области посттрансляционной аберрации, называются послепересечениями и постподвертышами. Значение превышения прямоугольного импульса является максимальным из значений превышения всех переходов. Просмотр постобработок импульса.
postshoot.Overshoot
ans = 9×1
5.6062
6.1268
10.8393
1.8311
11.2240
13.2285
9.2560
2.2735
14.0357
Значение нижнего предела прямоугольного импульса является минимальным из значений нижнего предела всех переходов.
postshoot.Undershoot
ans = 9×1
5.6448
12.5596
6.2156
16.8403
-1.9859
7.6490
11.7320
17.3856
2.0221
falltime | overshoot | pulseperiod | pulsewidth | risetime | statelevels | undershoot