Этот пример измеряет импульс и метрики перехода шумного меандра. Импульсные метрики включают время нарастания, осеннее время, ширина импульса и импульсный период. Метрики перехода включают средние перекрестные события, перерегулирование и отклонение от номинала областей аберрации постперехода шумного меандра.
Сгенерируйте шумный меандр. Шум является белым Гауссовым шумом с нулевым средним значением и стандартным отклонением 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
использует метод гистограммы, чтобы оценить государственные уровни двухуровневой формы волны. Метод гистограммы включает следующие шаги:
Определите максимальные и минимальные амплитуды данных.
Для конкретного количества интервалов гистограммы определите ширину интервала, которая является отношением амплитудной области значений к количеству интервалов.
Сортировка значений данных в интервалы гистограммы.
Идентифицируйте самый низкий индексируемый интервал гистограммы и самый высокий индексируемый интервал гистограммы с ненулевыми количествами.
Разделите histgram на две подгистограммы.
Вычислите государственные уровни путем определения режима или среднего значения верхних и более низких гистограмм.
Постройте государственные уровни меандра.
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
установлено в ложь, объект обрабатывает каждый вызов процесса независимо. Если последний импульс является неполным, объект вычисляет любые метрики, которые это может возвратить с доступными данными. Например, если импульс является половиной завершенного, объект может возвратить время нарастания последнего импульса, но не импульсный период.
Учитывая, что полярность положительна, и рабочие метрики установлены в ложь, меандр имеет:
Первый положительный переход в 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
к истине.
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
| risetime
| statelevels
| undershoot