Skip to content

tutorials.3

Vincent Le Garrec edited this page Oct 10, 2025 · 4 revisions

Tutorial - RF-Data

This tutorial demonstrates how to extract RF data from an URX file.

Every times an ultrasound acquisition executes a group, the URX can associate a new group_data to record the RF data. The field group_data.raw_data is a one-dimensional array. The addressing of the raw_data is explained in the group_data documentation.

Python

import pathlib

import matplotlib.pyplot as plt
import ultrasound_rawdata_exchange as urx


def getRfFromGroupsData(groupData: urx.GroupData):

    groupDataReader = urx.GroupDataReader(groupData)

    Nsamples = groupDataReader.samplesCount(0)

    Nchannels = groupDataReader.channelsCount(0)

    Nevents = groupDataReader.eventsCount()

    Nsequences = groupDataReader.sequencesCount()

    return groupData.raw_data.reshape(Nsamples, Nchannels, Nevents, Nsequences)


# read the input file
dataset = urx.loadFromFile("single_int16_rf.urx")

# groups_data identifier, if there are multiples in the same URX.
gid = 0

# size(rf) = [Nsamples, Nchannels, Nevents, Nsequences]
rf = getRfFromGroupsData(dataset.acquisition.groups_data[gid])
fig = plt.figure()
plt.plot(rf[:, 0, 0, 0])

MATLAB

dataset = urx.loadFromFile('single_int16_rf.urx');

% groups_data identifier, if there are multiples in the same URX.
gid = 1;

% size(rf) = [Nsamples, Nchannels, Nevents, Nsequences]
rf = getRfFromGroupsData(dataset.acquisition.groupsData(gid));
window = figure;
plot(rf(:,1,1,1))

function rf = getRfFromGroupsData(groupData)
  groupDataReader = urx.GroupDataReader(groupData);

  Nsamples = groupDataReader.samplesCount(1);

  Nchannels = groupDataReader.channelsCount(1);

  Nevents = groupDataReader.eventsCount();

  Nsequences = groupDataReader.sequencesCount();

  rf = reshape(groupData.rawData.data, Nsamples, Nchannels, Nevents, Nsequences);
end

C++

#include <cstddef>
#include <ios>
#include <iostream>
#include <memory>
#include <ostream>
#include <string>
#include <utility>
#include <vector>

#include <urx/acquisition.h>
#include <urx/dataset.h>
#include <urx/group_data.h>
#include <urx/utils/group_data_reader.h>
#include <urx/utils/io/reader.h>

int main(int argc, char** argv) {
  // read the input file
  const std::shared_ptr<urx::Dataset> dataset = urx::utils::io::reader::loadFromFile(
      "single_int16_rf.urx");

  const size_t gid = 0;

  const auto group_data_reader = urx::utils::GroupDataReader{dataset->acquisition.groups_data[gid]};

  std::cout << "Samples count: " << group_data_reader.samplesCount(0) << "\n";
  std::cout << "Channels count: " << group_data_reader.channelsCount(0) << "\n";
  std::cout << "Events count: " << group_data_reader.eventsCount() << "\n";
  std::cout << "Sequences count: " << group_data_reader.sequencesCount() << "\n";

  return 0;
}
Clone this wiki locally