This feature is available only with a License - Contact us for more details

This object maps to an existing channel in one DDC Bank, allocated with the DDCBank.createChannel() method.
It is possible to allocate a DDCBankChannel from any task given the channel unique id.


Object DDCBankChannel {
    constructor DDCBankChannel( uuid ) ;
    string getUUID(); 

    bool setOffset( number Hz );
    bool setCenterFrequency( number MHz );
    number getCenterFrequency();
    number getCenterOffset();
    number getSampleRate();

    bool start();
    bool isRunning();
    bool release() ; // destroy all

    IQData getIQ([optional bool wait if nothing]);


Returns the globally unique identifier for this DDC Channel. This string can be used in any task to access the DDC channel.

var bank = new DDCBank(rx,8);
var channel = bank.createChannel( 100e3 );
var uuid = channel.getUUID();

print('Channel UUID:' + uuid);


Retunes the DDC internal oscillator; parameter number is in Hertz and relative to the center frequency of the incoming stream.
This has no effect on the hardware receiver parameters.


Retunes the DDC internal oscillator, parameter number is in MHz and is the absolute frequency.
This has no effect on the hardware receiver parameters: the current center frequency of the receiver is used to estimate the offset, internally this function calls setOffset()


Returns the absolute frequency (in Hz) of the current DDC channel.


Returns the current value of the internal oscillator. Value in Hz.


Returns the current sampling rate (equals the bandwidth) of the current DDC channel.


Starts streaming on this DDC channel.

  • If the attached receiver was off, it turns on the attached receiver.
  • If the receiver was already running, this command has no effect.


Stops streaming on this DDC channel.

  • if this is the only running channel in the DDC Bank, the attached receiver is turned off,
  • if other DDCs are currently running, this command has no effect.

The allocated resources are not released. The DDC channel might be turned on again.


Returns true if the DDC channel is currently streaming.


Stops and destroys the curent DDC channel. It cannot be restarted.


Extracts one IQ data block from the DDC channel output. Unless a boolean true value is passed as parameters, this call is non-blocking :

  • If no data is available, and empty IQData block is returned (length=0).


// open and tune RF input
var rx = BladeRF.makeDevice({"device_name" : "bladerf"});
rx.setGain( 50 ) ;

// Create a DDC Bank connected to the second input of the BladeRF (rx2)
var bank = new DDCBank(rx,2);

// allocate one single DDC channel, 1MHz wide
var channel = bank.createChannel( 1e6 );
print('Channel UUID:' + channel.getUUID());
// tune it to +990kHz
channel.setOffset( 990e3 );

// start
if( channel.start() == false ) {
    print(' error starting channel id : ' + channel_name );
print('Running ' + channel.getCenterFrequency());
var blk = 0 ;
for( ; ; ) {
    var iq = channel.getIQ(true);
    // do something with IQ
    print( 'received : ' + blk );
    blk++ ;
Last update: May 1, 2022