Насколько резко включается и выключается сигнал включения/выключения? Как часто и как долго он активируется? Определите все эти характеристики для выхода синхроимпульса.
Загрузите сигнал и постройте график. Время измеряется в секундах, а уровень в вольтах.
load('clock.mat') plot(tclock,clocksig) xlabel('Time (s)') ylabel('Level (V)')
Использование statelevels
найти нижний и верхний уровни сигнала с помощью гистограммы. Если вы не задаете выход, графики функций сигнала, помечает уровни и отображает гистограмму.
levels = statelevels(clocksig)
levels = 1×2
0.0138 5.1848
statelevels(clocksig);
Определите, насколько быстро сигнал повышается при каждом переходе. risetime
использует нижний и верхний уровни, найденные по statelevels
. Это определяет время нарастания как время, в течение которого сигнал увеличивается с 10% до 90% различия между уровнями.
[Rise,LoTime,HiTime,LoLev,HiLev] = risetime(clocksig,tclock); Levels = [LoLev HiLev; (levels(2)-levels(1))*[0.1 0.9]+levels(1)]
Levels = 2×2
0.5309 4.6677
0.5309 4.6677
Если вы звоните risetime
без выходов функция рисует аннотированный график сигнала. Времена нарастания затенены, точки пересечения отмечены, а уровни отображены. Можно использовать временной вектор или частоту дискретизации как вход.
risetime(clocksig,Fs);
overshoot
и undershoot
показать, как далеко сигнал отклоняется от уровней состояния на каждом переходе. Результаты выражены в процентах от различия между уровнями. Дальнейшие выходы определяют фактическое время и значения сигналов.
overshoot(clocksig,Fs); [pctgs,values,times] = undershoot(clocksig,Fs); hold on text(1.1e-3,2,' Undershoot','Background','w','Edge','k') plot([times;1.17e-3],[values;2],'^m','HandleVisibility','off') hold off
Определите, как быстро падает сигнал falltime
. Уровни состояния и процентные базовые уровни можно задать вручную. То же самое можно сделать и с risetime
.
falltime(clocksig,tclock, ... 'PercentReferenceLevels',[30 80],'StateLevels',[0 5]);
Найдите период сигнала. По умолчанию период определяется как время, прошедшее между последовательными восходящими пересечениями базового уровня на полпути между уровнями состояния. Можно изменить полярность пересечений, задать уровни состояния или настроить уровень ссылки.
per = pulseperiod(clocksig,tclock)
per = 4×1
10-3 ×
0.4143
0.4200
0.4188
0.4111
pulseperiod(clocksig,Fs,'Polarity','negative','MidPct',25);
Коэффициент заполнения является отношением ширины импульса к периоду импульса. Определите его непосредственно или с помощью специальной функции.
dut = dutycycle(clocksig,Fs); wdt = pulsewidth(clocksig,Fs); compare = [wdt./per dut]
compare = 4×2
0.4862 0.4862
0.4756 0.4756
0.4871 0.4871
0.4886 0.4886
dutycycle
| falltime
| overshoot
| pulseperiod
| pulsewidth
| risetime
| slewrate
| statelevels
| undershoot