Этот пример измеряет импульсную и переходную метрики шумного прямоугольного импульса. Импульсные метрики включают время нарастания, время спада, ширину импульса и период импульса. Метрики перехода включают средние перекрестные события, перерегулирование и недорегулирование областей аберрации после переноса шумного прямоугольного импульса.
Сгенерируйте шумный прямоугольный импульс. Шум является белым Гауссовым шумом с нулевым средним и стандартным отклонением 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)');
The 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
The 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 и вычислить постперерегулирование и постзадание прямоугольного импульса. Чтобы измерить метрики postshoot, установите 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