Working with Complex Data

If the StreamSRI mode field of the incoming data is set to 1, the associated input data is complex (i.e., it is composed of real and imaginary parts). Complex data is sent as alternating real and imaginary values. A developer can work with this data in any fashion; however, this section provides common methods for converting the data into a more workable form.

Converting Complex Data in C++

In C++, the incoming Bulk Input/Output (BulkIO) data block provides a complex() method to check whether the data is complex, and a cxbuffer() method to reinterpret the sample data as a redhawk::shared_buffer of std::complex values. For example:

bulkio::ShortDataBlock block = stream.read();
if (block.complex()) {
    redhawk::shared_buffer<std::complex<short> > data = block.cxbuffer();
    const size_t size = data.size();
}

Converting Complex Data in Python

In Python, the incoming BulkIO data block provides a complex attribute to check whether the data is complex, and a cxbuffer attribute that gives the sample data as a list of Python complex values. For example:

block = stream.read()
if block.complex:
    data = block.cxbuffer
    size = len(data)

Converting Complex Data in Java

Unlike with C++ and Python, Java does not have a ubiquitous means for representing complex numbers; therefore, when using Java, users are free to map the incoming BulkIO data to the complex data representation of their choosing.