exponenta event banner

Прием и анализ шумных синхросигналов

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

Используйте панель инструментов сбора данных для настройки сбора данных. Используйте функции статистики и измерения в панели инструментов обработки сигналов для анализа сигнала данных.

Создание сбора данных и получение тактового сигнала

Использовать daq для создания DataAcquisition и addinput добавить канал из NI-9205 National Instruments ® с идентификатором 'cDAQ1Mod1'.

dq = daq("ni");
addinput(dq,"cDAQ1Mod1","ai0","Voltage");

По умолчанию DataAcquisition настроен на выполнение со скоростью 1000 сканирований в секунду.

Измените скорость сканирования на 250000 сканирований в секунду.

dq.Rate = 250000;

Использовать read для получения нескольких сканирований в течение 2 мс.

[data, time] = read(dq, milliseconds(2), "OutputFormat", "Matrix");

Постройте график полученного тактового сигнала (обратите внимание, что он является избыточным).

plot(time, data)
xlabel('Time (s)')
ylabel('Voltage (V)')

Оценить уровни состояния

Использовать statelevels без выходного аргумента для визуализации уровней состояния в гистограмме.

statelevels(data)
ans =

    0.0138    5.1848

Вычисленная гистограмма делится на две области одинакового размера между первым и последним ячейками. Режим каждой области гистограммы возвращается как оцененное значение уровня состояния в окне команд.

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

Измерить время нарастания, время падения и скорость нарастания

Использовать risetime без выходного аргумента для визуализации времени нарастания положительных ребер.

risetime(data,time)
ans =

   1.0e-04 *

    0.5919
    0.8344
    0.7185
    0.8970
    0.6366

Опорные уровни по умолчанию для вычисления времени нарастания и времени спада устанавливаются на уровне 10% и 90% амплитуды сигнала.

Измерьте время падения, указав пользовательские опорные уровни и уровни состояний.

falltime(data,time,'PercentReferenceLevels',[20 80],'StateLevels',[0 5])
ans =

   1.0e-04 *

    0.4294
    0.5727
    0.5032
    0.4762

Получайте измерения программно, вызывая функции с одним или несколькими выходными аргументами. Для данных с равномерной выборкой можно указать частоту выборки вместо вектора времени. Использовать slewrate для измерения уклона каждой положительной или отрицательной кромки.

sr = slewrate(data(1:100), dq.Rate)
sr =

   7.0840e+04

Анализ превышения и недоделки

Получение нового пониженного тактового сигнала.

[data, time] = read(dq, milliseconds(4), "OutputFormat", "Matrix");
plot(time, data)
xlabel('Time (s)')
ylabel('Voltage (V)')

Пониженные тактовые сигналы показывают превышение. Превышение выражается в процентах от разницы между уровнями состояний. Переполнение может произойти сразу после края, в начале области постпереходной аберрации. Это называется «postshoot» overshoot. Измерение превышения с помощью overshoot.

overshoot(data(95:270),dq.Rate)
legend('Location','NorthEast')
ans =

    4.9451
    2.5399

Переполнение также может произойти непосредственно перед краем, в конце области предпереходной аберрации. Это называется «preshoot» overshoot.

Недоделка может происходить в областях до аберрации и после аберрации и выражается в процентах от разницы между уровнями состояний. Измерение недоделки с помощью необязательных входных аргументов, указывающих область для измерения аберраций.

undershoot(data(95:270),dq.Rate,'Region','Postshoot')
legend('Location','NorthEast')
ans =

    3.8499
    4.9451

Измерение ширины импульса и рабочего цикла

Использовать pulsewidth без выходного аргумента для визуализации выделенной ширины импульса.

pulsewidth(data, time, 'Polarity', 'Positive');

При этом отображаются импульсы положительной полярности. Выберите отрицательную полярность для просмотра ширины импульсов отрицательной полярности.

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

d = dutycycle(data,time,'Polarity','negative')
d =

    0.4979
    0.5000
    0.5000

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

pp = pulseperiod(data, time);

avgFreq = 1./mean(pp)
totalJitter = std(pp)
avgFreq =

    1.2500e+03


totalJitter =

   1.9866e-06