Texo Sequencing

From WikiSonix
Jump to: navigation, search

Sequencing Overview[edit]

Sequencing can be defined as the ordering and arrangement of transmit and receive pulses for a given ultrasound frame. An ultrasound frame can be made up of any sort of data, for instance envelope detected B mode data, or RF data. A typical sequence in ultrasound runs across the transducer from one end to the other, such as in B mode. Other sequences for M mode and Pulsed Doppler will stay in a single position on the transducer, and modes like Color Doppler will have complex sequences used to time the PRF of an ensemble of scanlines used as input into an autocorrelation algorithm. Texo allows for all these types of sequences to be built, plus whatever other ideas can be creatively implemented. The SDK allows for a transmit to occur at one location of the transducer, and for the receive to occur at a completely different one, which can be useful for angular beams and/or picking up weaker signals from the backscatter.

Each sequence programmed will result in single frame of ultrasound data being collected. Frames will continue to be collected into a cyclic cine buffer, where they can be read in real-time or once the imaging has been frozen.


Sequencing Flow


Sequencing Examples[edit]

Simple pseudo-code for creating a linear sequence would look as follows:

void main()
{
  elem = texoGetProbeNumElements()

  for (i = 0; i < elem; i++)
  {
    tx.center = rx.center = i
    texoAddLine(tx, rx)
  }
}

A simple M mode sequence could look as follows:

void main()
{
  tx.center = rx.center = X
  rx.lineduration = PRF_setting

  texoAddLine(tx, rx)
}

It is important to note the setting of the line duration for a single line sequence. If the acquisition PRF is based purely on the acquisition depth that was set, then it may be too high for the power settings used. Always use caution when creating high PRF sequences.

Finally, a more complex sequence may look like:

void main()
{
  for (i = 0; i < numBlocks; i++)
  {
    for (j = 0; j < ensemble; j++)
    {
      for (k = 0; k < linesPerBlock; k++)
      {
        tx.center = rx.center = (i * linesPerBlock) + k
        tx.pulseShape = getPulseBasedOnEnsemble(j)
        texAddLine(tx, rx)
      }
    }
  }
}