Работа с захваченными осциллограммами в Python

В осциллографах Rohde & Schwarz используются передовые технологии для получения надежных и воспроизводимых результатов.
В осциллографах Rohde & Schwarz используются передовые технологии для получения надежных и воспроизводимых результатов.

Измерительная задача

Инженеры-разработчики и инженеры-испытатели применяют осциллографы R&S®RTP, R&S®RTO и R&S®RTE для решения повседневных задач. Записанные осциллограммы сохраняются для архивирования и документирования или для дальнейшей обработки, выходящей за рамки функциональных возможностей осциллографа. Использование формата ASCII (расширение csv) для хранения осциллограмм может привести к исчерпанию емкости хранилища. Для передачи и обработки файлов в этом формате также требуется значительное количество времени. Кроме того, при использовании формата ASCII вместо двоичного формата некоторая информация оказывается недоступна.

Решение компании Rohde & Schwarz

Для хранения осциллограмм в лабораторных и высокопроизводительных осциллографах Rohde & Schwarz (R&S®RTP, R&S®RTO, R&S®RTE) используется один и тот же двоичный формат. Высокопроизводительный вспомогательный пакет Python RTxReadBin позволяет обрабатывать двоичные файлы и получать все необходимые данные для документации.

Применение

Для передачи осциллограмм из прибора в среду Python необходимо подготовить IDE Python.

  • Загрузите пакет RTxReadBin с веб-сайта Rohde & Schwarz.
  • Установите пакет в системе.
  • Произведите захват осциллограммы на осциллографе и сохраните ее в виде двоичного файла.

Будет создано два файла: файл описания осциллограммы (*.bin) и файл данных осциллограммы (*.wfm.bin). Данные осциллограммы (загруженные через RTxReadBin) могут содержать следующую информацию:

  • аналоговые каналы;
  • цифровые каналы (MSO);
  • параллельные шины (полученные через MSO);
  • аналоговые каналы (через ZVC);
  • расчетные осциллограммы, включая спектр;
  • треки (осциллограммы на основе автоматических измерений).

Для всех этих источников сигналов поддерживается несколько выборок и несколько каналов (если применимо).

После захвата данных с помощью осциллографа Rohde & Schwarz их можно загрузить в среду Python для дальнейшей обработки. Однако для большего удобства можно оставить осциллограмму в текущем месте хранения и включить сетевой доступ к данным, смонтировав общий ресурс CIFS на компьютере. Выполните следующие подготовительные действия на осциллографе.

  • Перейдите к расширенным настройкам общего доступа.
  • Выберите общедоступный профиль и измените следующие настройки.
    - Включите сетевое обнаружение.
    - Включите общий доступ к файлам и принтерам
    - Разрешите запись в общедоступные папки.

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

r’\\<name of scope or IP address>\Users\Public\Documents\Rohde-Schwarz\RTx\RefWaveforms\<filename>.bin’

Поскольку Python интерпретирует строку, последовательность символов \U будет интерпретирована, что приведет к ошибке. Чтобы избежать этого, просто добавьте «r» (от слова raw, или необработанная) в начале строки. Может появиться запрос на ввод учетных данных. Убедитесь, что аутентификация выполняется не на локальном сервере домена Windows. Для этого добавьте перед локальной учетной записью instrument обратную косую черту.

account: \instrument
password: <your oscilloscope pw>

Также можно загрузить осциллограмму из осциллографа, перетащив ее в проводнике Windows.

Выполнив эти предварительные условия, можно загрузить модуль через функцию импорта Python и вызвать RTxReadBin. Самый простой способ сделать это — указать имя файла. Функция возвращает три параметра: данные осциллограммы по вертикальной оси (y), данные по горизонтальной оси (x) и параметр сбора данных (S).

> from RTxReadBin import RTxReadBin
> import numpy
> y, x, S = RTxReadBin(’<wfm filename>.bin’)
> y.shape

Данные по вертикальной оси (y) представляют собой массив NumPy вида [<record Length = длина записи>, <# of acquisitions = количество захватов>, <# of active channels = количество активных каналов>]. В случае осциллограммы MSO используется логический тип данных (Boolean), а в случае параллельной шины используется целое число без знака (uint16), побитно упакованное с использованием максимального индекса MSO (старший бит). Например, предположим, линии MSO D12, D7, D2 и D0 подключены и сконфигурированы как параллельная шина. Тогда записанное слово данных будет сохранено как D12 ∙ 23 + D7 ∙ 22 + D2 ∙ 21 + D0 ∙ 20. Для остальных типов данных осциллограмм используется тип float32. Важно отметить, что способ подсчета выборок в архиве осциллографа отличается от используемого в Python. Осциллограф начинает счет с (1 - <# of acquisitions = количество захватов>) и считает до 0, который соответствует последней выборке. В Python подсчет сдвинут и начинается с 0, а последней выборкой является (<# of acquisitions = число выборок> - 1).

Данные по горизонтальной оси (x) представляют собой массив 64-битных чисел с плавающей запятой NumPy формы [<record length = длина записи>]. Если данные хранятся в формате с чередованием x/y, массив расширяется для охвата всех выборок [<record length = длина записи>, <# of acquisitions = число выборок>]. В случае сохранения спектра ось x будет содержать ось частот спектра.

Длину записи, число выборок и число каналов можно получить, обратившись к свойству shape возвращаемого значения y.

Если требуются не все параметры, их можно игнорировать при помощи стандартных методов Python. Например, можно добавить спецификатор списка (см. пример ниже) или использовать символ подчеркивания в качестве позиционного возвращаемого параметра.

> y, x =
RTxReadBin(’<wfm filename>.bin’)[0,2]

Чтобы уменьшить объем выделяемой памяти, можно настроить два дополнительных (необязательных) параметра. Первый параметр задает интересующие выборки. Второй параметр задает интересующие интервал, время или частоту. Оба параметра требуют списка длиной в два элемента. Имейте в виду, что параметр выборки следует нотации списка Python. В примере возвращается две выборки (2,3).

> y, x, S = RTxReadBin(’<wfm filename>.bin’,
acquisitions = [2,4],
xInterval = [-2e-7,3e-7])

Оставшийся параметр S содержит все данные, доступные в заголовочном файле. Он реализован как словарь Python. Не все эти параметры важны для пользователя. Однако некоторые из них могут быть полезны для документирования и анализа. Поскольку данные осциллограммы в векторе y являются просто числами с плавающей запятой, по ним нельзя определить исходные настройки. Однако, изучив параметры в заголовке, можно получить необходимую информацию для документирования и постобработки. Например, чтобы понять ограничения по шуму во время измерения, важно иметь информацию о настройках вертикального масштаба, отстройки, положения и связи.

Другим примером является анализ интервала повторения импульсов (PRI) в устройствах радиолокации. Если в сегментированную память1) заносится один импульс радара на выборку, список временных меток из сегментированных данных предоставляетсобытия запуска во времени, которые нельзя получить иным способом (S[’Timestamps’]). Разница времени для последовательных событий запуска предоставляет последовательность PRI.

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

  • синусоидальный сигнал 1 МГц с отстройкой;
  • попеременный ЛЧМ-сигнал радара вверх/вниз;
  • шум — сигнал не подключен.

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

1)См. раздел «Демодуляция радиолокационных ВЧ-импульсов с помощью осциллографа» на веб-сайте Rohde & Schwarz:

Заключение

Осциллографы R&S®RTP, R&S®RTO и R&S®RTE являются мощными инструментами. Модуль Python (RTxReadBin) расширяет функциональные возможности инструментов, предоставляя доступ к сохраненным осциллограммам. Все данные осциллограмм теперь доступны в мощной среде Python для постобработки, документирования или последующего анализа, например сравнения осциллограмм.

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

Связанные решения