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

В этом примере показано, как получить сигналы часов и анализировать переходы, импульсы, и вычислить метрики включая время нарастания, время спада, скорость нарастания, перерегулирование, отклонение от номинала, ширину импульса и рабочий цикл. Этот пример использует Data Acquisition Toolbox™ в сочетании с Signal Processing Toolbox™.

Используйте основанный на сеансе интерфейс в Data Acquisition Toolbox, чтобы сконфигурировать приобретение. Используйте статистику и функции измерения в Signal Processing Toolbox, чтобы анализировать сигнал данных.

Создайте сеанс приобретения и получите сигнал часов

Используйте daq.createSession создать сеанс приобретения и добавить канал 0 из Национального Instruments® NI 9205 с ID 'cDAQ1Mod1'.

s = daq.createSession('ni');
addAnalogInputChannel(s,'cDAQ1Mod1', 0, 'Voltage');

По умолчанию сеанс сконфигурирован, чтобы запуститься для 1 000 сканирований/секунда.

Измените частоту развертки в 250 000 сканирований/секунда и установите длительность на 2 мс.

s.Rate = 250000;
s.DurationInSeconds = 0.002;

Используйте startForeground получать несколько сканирований.

[data, time] = s.startForeground;
whos data time
  Name        Size            Bytes  Class     Attributes

  data      500x1              4000  double              
  time      500x1              4000  double              

Полученные данные возвращены в парах TIME-DATA. ВРЕМЕНЕМ Является m x 1 матрица, где m количество сканирований. ДАННЫМИ является m x n матрица, где m количество сканирований и n количество каналов аналогового входа на сеансе.

Постройте сверхослабленный сигнал часов, который что вы только получили.

plot(time, data);
xlabel('Time (secs)'), ylabel('Voltage');

Оцените государственные уровни

Используйте 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), s.Rate)
sr =

   7.0840e+04

Анализируйте перерегулирование и отклонение от номинала

Измените свою длительность сеанса приобретения и получите новый сигнал часов underdamped.

s.DurationInSeconds = 0.004;
[data, time] = s.startForeground;
plot(time, data);
xlabel('Time (secs)'), ylabel('Voltage');

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

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

    4.9451
    2.5399

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

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

undershoot(data(95:270),s.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

Для просмотра документации необходимо авторизоваться на сайте