LMS API - Quick start guide -

Size: px
Start display at page:

Download "LMS API - Quick start guide -"

Transcription

1 LMS API - Quick start guide - Document version: 1 Document revision: 03 Last modified: :36:40 PM 1

2 Contents 1 Introduction LMS API LMS API compilation LMS API function documentation LMS API Examples Example 1: basicrx Opening a device Device configuration Sample streaming setup Receiving samples Closing the device Application output Example 2: singlerx Opening a device Device configuration Sample streaming setup Receiving samples Application output Example 3: dualrxtx Opening a device Device configuration Sample streaming setup Streaming samples Application output

3 Revision History Version v01r01 Started: 23 Apr, 2016 Initial version Version v01r02 Started: 19 Apr, 2017 Updated LimeSuite installation instructions Version v01r03 Started: 28 July 2017 Added source code and detailed descriptions of examples 1

4 1 Introduction The scope of this document is compilation of the LMS API and detailed description of the example applications that utilize LMS API. 2

5 2 LMS API This chapter contains brief description of LMS API. 2.1 LMS API compilation LMS API and examples are part of LimeSuite software. It can be downloaded using git : git clone To compile LMS API and examples follow the instructions provided in docs/lime_suite_compilation_guide.pdf.pdf file. Note that wxwidgets library is not required to compile LMS API and examples. 2.2 LMS API function documentation LMS API function definitions and descriptions can be found in LimeSuite.h file (scr/lime/limesuite.h). They are documented using Doxygen comments. Doxygen HTML documentation can also be generated while building LimeSuite. Generating of doxygen documentation is automatically enabled in CMake if doxygen is detected in the system 3

6 3 LMS API Examples This chapter contains description of 3 example applications that demonstrate usage of LMS API. The source code of the example applications can be found in src/examples/ directory. After compilation the executable files of the examples should be located in build/bin/release/ directory on Windows systems or in build/bin/ directory on Linux systems. On Linux systems with GNU plot installed, all examples should plot received samples. The sub-sections of this chapter contain the source code of each example. The source code is broken down to smaller parts and description of each part is provided. 3.1 Example 1: basicrx Demonstrates basic functionality required to receive data from one channel: Open device Set center frequency Set sample rate Configure data stream Receive samples Close device The example application connects to the first detected LimeSDR device, configures it and receives samples for 5 seconds. The number of samples received per read call is printed while receiving samples. 4

7 3.1.1Opening a device First of all, there is some code before main() function that is common to all examples. At the top of the source file there are some include files. Among them, the file of most interest is 'lime/limesuite.h' that provides API for interfacing with LimeSDR. Other includes are standard includes for the console output and timing functions, also header for using GNUPlot in case it is enabled. #include "lime/limesuite.h" #include <iostream> #include <chrono> #ifdef USE_GNU_PLOT #include "gnuplotpipe.h" #endif using namespace std; After includes there is a declaration of device handle (lms_device_t*) that is used by various API calls later in code. Initially, it has to be set to 'NULL' and will be modified when device is opened. There is also helper function for printing error messages in case some API call fails. It is used in the examples after API function calls to do error reporting. The function calls LMS_GetLastErrorMessage() to get the last error message from LimeSuite libraty and then prints it to the console. After that the device is closed by calling LMS_Close() and the program exits. lms_device_t* device = NULL; //Device structure, should be initialize to NULL int error() //print last error message cout << "ERROR:" << LMS_GetLastErrorMessage(); if (device!= NULL) LMS_Close(device); exit(-1); To connect to a device, at first a device list is obtained and then the program connect to one of the devices from the list. The code bellow does the following: Creates a device list of size 8 (this should be large enough) Populates the device list using LMS_GetDeviceList(). This function returns number of devices found and fills the device list that is passed to it. 'Null' can be passed as device list parameter in order to obtain device count only. The number of devices found is printed to the console. The first device from the list is opened using LMS_Open(). int main(int argc, char** argv) //Find devices int n; lms_info_str_t list[8]; //should be large enough to hold all detected devices if ((n = LMS_GetDeviceList(list)) < 0) //NULL can be passed to only get number of devices cout << "Devices found: " << n << endl; //print number of devices if (n < 1) return -1; if (LMS_Open(&device, list[0], NULL)) //open the first device 5

8 After connecting to the device, the example loads device with working configuration using LMS_Init(). This is not always necessary. It can be skipped to retain the current configuration of the device or LMS_LoadConfig() can be used to load configuration from a file. //Initialize device with default configuration //Do not use if you want to keep existing configuration //Use LMS_LoadConfig(device, "/path/to/file.ini") to load config from INI if (LMS_Init(device)!= 0) 3.1.2Device configuration The example is using single (first) RX channel. Note that channels are indexed starting from '0' in LMS API. The code snippet bellow does the following: Enables the first Rx channel by calling LMS_EnableChannel(). It makes sure that all LMS7 modules required for the first channel are powered up. In this case it is not really necessary as required modules should be enabled after LMS_Init(). Sets Rx center frequency to 800 MHz using LMS_SetLOFrequency(). Sets the sample rate to 8 MHz. API function LMS_SetSampleRate() sets sample rate for all channels (Tx and Rx). It also allows to specify oversampling that should be used in hardware. In this case oversampling is 2, which means that hardware will be sampling RF signal at 16 MHz rate and downsampling it to 8 MHz before sending samples to PC. //Enable RX channel //Channels are numbered starting at 0 if (LMS_EnableChannel(device, LMS_CH_RX, 0, true)!= 0) //Set center frequency to 800 MHz if (LMS_SetLOFrequency(device, LMS_CH_RX, 0, 800e6)!= 0) //Set sample rate to 8 MHz, ask to use 2x oversampling in RF //This set sampling rate for all channels if (LMS_SetSampleRate(device, 8e6, 2)!= 0) Before proceeding to streaming setup, the example also enables test signal in Rx using LMS_SetTestSignal(). The example code bellow configures LMS7 to produce NCO generated signal with 8 point constellation in Rx. Note that to receive data from RF, test signal should to be disabled by removing LMS_SetTestSignal() entirely (it is disabled after LMS_Init()) or passing 'LMS_TESTSIG_NONE' instead of 'LMS_TESTSIG_NCODIV8'. The selected antenna port after LMS_Init() should be LNA_H. //Enable test signal generation //To receive data from RF, remove this line or change signal to LMS_TESTSIG_NONE if (LMS_SetTestSignal(device, LMS_CH_RX, 0, LMS_TESTSIG_NCODIV8, 0, 0)!= 0) 6

9 3.1.3Sample streaming setup Data stream is configured by passing a configuration structure (lms_stream_t) to SetupStream() function. The configuration structure (lms_stream_t) also serves as a stream handle that is used by the other LMS API streaming functions. The example configures the stream as follows: Use the first channel (channel=0). Set the size of FIFO buffer to ~1 Msample (fifosize = 1024*1024). This sets the size of LMS API buffer for this stream on host PC. The actual size may not be exactly as requested. Optimize for a higher data throughput (throughputvslatency=1.0). This parameter hints whether a lower latency (lower value) or a higher throughput (higher value) is preferred. It affects the size of data transfers from hardware. Set up Rx stream (istx=false), Use 12-bit data format (streamid.datafmt=lms_stream_t::lms_fmt_i12). Using this format, the samples received from LMS API are 16-bit integer values that range from to Data between hardware and PC is transferred using 3 bytes (I(12-bit) +Q(12-bit)) per sample. //Streaming Setup //Initialize stream lms_stream_t streamid; //stream structure streamid.channel = 0; //channel number streamid.fifosize = 1024 * 1024; //fifo size in samples streamid.throughputvslatency = 1.0; //optimize for max throughput streamid.istx = false; //RX channel streamid.datafmt = lms_stream_t::lms_fmt_i12; //12-bit integers if (LMS_SetupStream(device, &streamid)!= 0) After setting up the stream, basicrx example allocates some buffers for receiving samples and starts streaming by calling LMS_StartStream(). Note that allocated buffers have 16-bit integer data type as it will be receiving 16-bit integers from LMS API. Also, the example is going to read 5000 samples to the buffer at once and one sample has two 16-bit values (I+Q), so buffer that can hold twice as many 16-bit values is required. //Initialize data buffers const int samplecnt = 5000; //complex samples per buffer int16_t buffer[samplecnt * 2]; //buffer to hold complex values (2*samples)) //Start streaming LMS_StartStream(&streamId); 7

10 3.1.4Receiving samples Receiving samples is done in a while() loop. The loop in basicrx example runs for 5 seconds. The only LMS API functions in the loop is LMS_RecvStream() that read samples from the stream FIFO into the buffer and returns the number of samples read. In this example 'NULL' is passed in place of a metadata structure, therefore timestamps are not obtained. The other code in the loop prints the number of samples read and plots the samples using GNUplot (if enabled.) //Streaming #ifdef USE_GNU_PLOT GNUPlotPipe gp; gp.write("set size square\n set xrange[-2050:2050]\n set yrange[-2050:2050]\n"); #endif auto t1 = chrono::high_resolution_clock::now(); while (chrono::high_resolution_clock::now() - t1 < chrono::seconds(5)) //run for 5 seconds //Receive samples int samplesread; = LMS_RecvStream(&streamId, buffer, samplecnt, NULL, 1000); //I and Q samples are interleaved in buffer: IQIQIQ... printf("received %d samples\n", samplesread); /* INSERT CODE FOR PROCESSING RECEIVED SAMPLES */ #ifdef USE_GNU_PLOT //Plot samples gp.write("plot '-' with points\n"); for (int j = 0; j < samplesread; ++j) gp.writef("%i %i\n", buffer[2 * j], buffer[2 * j + 1]); gp.write("e\n"); gp.flush(); #endif 3.1.5Closing the device At the end of the program streaming is stopped and the device is closed using the following sequence: LMS_StopStream() - stops the stream. It does not deallocate the stream so if there is something in the stream FIFO, it can still be read. Also, the stream can be quickly started again using LMS_StartStream(). LMS_DestroyStream() - deallocates the stream from memory. After this the stream structure can no longer be used. LMS_Close() - disconnects from the device and deallocates the device from memory. //Stop streaming LMS_StopStream(&streamId); //stream is stopped but can be started again with LMS_StartStream() LMS_DestroyStream(device, &streamid); //stream is deallocated and can no longer be used //Close device LMS_Close(device); return 0; 8

11 3.1.6Application output The application outputs the number of samples received with each call to LMS_RecvStream() to console (Figure 1). If GNUplot is enabled it also plots constellation of IQ samples (Figure 2). Figure 1: console output of basixrx example Figure 2: GNUplot output of basicrx example 9

12 3.2 Example 2: singlerx More in-depth Rx example than basicrx. Additionally shows how to: Obtain the allowed value range from a device Obtain currently set device parameters Set gains Perform auto-calibration Set up a low-pass filter Select antenna port Get a stream status (data rate, FIFO size). The example application connects to the first detected LimeSDR device, configures it and receives samples for 10 seconds. The data transfer rate and FIFO status is printed every second while streaming is active Opening a device The code at the beginning of singlerx examples is the same as in basicrx example, so it is not detailed again in this section. #include "lime/limesuite.h" #include <iostream> #include <chrono> #ifdef USE_GNU_PLOT #include "gnuplotpipe.h" #endif using namespace std; lms_device_t* device = NULL; //Device structure, should be initialize to NULL int error() cout << "ERROR:" << LMS_GetLastErrorMessage(); if (device!= NULL) LMS_Close(device); exit(-1); //print last error message int main(int argc, char** argv) This example uses a little different sequence to connect to a device compared to basicrx. It shows how to obtain the number of devices before filling the device list. The code bellow does the following: Obtains the number of devices connected to the system by calling LMS_GetDeviceList() and passing 'NULL' as a device list parameter. Prints number of devices found to the console. Allocates the list based on the number of devices found Populates the device list by calling LMS_GetDeviceList() Prints the device list to the console Opens the first device from the list using LMS_Open(). Deallocates the device list 10

13 /Find devices //First we find number of devices, then allocate large enough list, and then populate the list int n; if ((n = LMS_GetDeviceList(NULL)) < 0) //Pass NULL to only obtain number of devices cout << "Devices found: " << n << endl; if (n < 1) return -1; lms_info_str_t* list = new lms_info_str_t[n]; //allocate device list if (LMS_GetDeviceList(list) < 0) //Populate device list for (int i = 0; i < n; i++) //print device list cout << i << ": " << list[i] << endl; cout << endl; //Open the first device if (LMS_Open(&device, list[0], NULL)) delete [] list; //free device list After connecting to the device, an initial configuration is loaded using LMS_Init() and the first Rx channel is enabled using LMS_EnableChannel(). //Initialize device with default configuration //Do not use if you want to keep existing configuration //Use LMS_LoadConfig(device, "/path/to/file.ini") to load config from INI if (LMS_Init(device)!= 0) //Enable RX channel //Channels are numbered starting at 0 if (LMS_EnableChannel(device, LMS_CH_RX, 0, true)!= 0) 3.2.2Device configuration In this example it is shown how to set and obtain values of commonly used parameters: Center frequency Antenna port Sample rate Analog filter bandwidth Gain Perform calibration First of all center frequency is set using LMS_SetLOFrequency() and a read-back is performed using LMS_GetLOFrequency() right after that. Then, the center frequency obtained from the device is printed to the console. //Set center frequency to 800 MHz if (LMS_SetLOFrequency(device, LMS_CH_RX, 0, 800e6)!= 0) //print currently set center frequency float_type freq; if (LMS_GetLOFrequency(device, LMS_CH_RX, 0, &freq)!= 0) cout << "\ncenter frequency: " << freq / 1e6 << " MHz\n"; 11

14 The setup continues with Rx RF port selection. The related code that is shown bellow does the following: Creates a list for antenna (RF port) names Fills the list with the names of Rx RF ports by calling LMS_GetAntennaList() Prints the obtained port names to the console Obtains the currently set RF port index of the first RX channel using LMS_GetAntenna() and outputs its name to the console. Selects RF port for first Rx channel by calling LMS_SetAntenna() and requesting to set RF port to LNAW. Obtains the currently set RF port index again and prints its name to the console. //select antenna port lms_name_t antenna_list[10]; //large enough list for antenna names. //Alternatively, NULL can be passed to LMS_GetAntennaList() to obtain number of antennae if ((n = LMS_GetAntennaList(device, LMS_CH_RX, 0, antenna_list)) < 0) cout << "Available antennae:\n"; //print available antennae names for (int i = 0; i < n; i++) cout << i << ": " << antenna_list[i] << endl; if ((n = LMS_GetAntenna(device, LMS_CH_RX, 0)) < 0) //get currently selected antenna index //print antenna index and name cout << "Automatically selected antenna: " << n << ": " << antenna_list[n] << endl; if (LMS_SetAntenna(device, LMS_CH_RX, 0, LMS_PATH_LNAW)!= 0) // manually select antenna if ((n = LMS_GetAntenna(device, LMS_CH_RX, 0)) < 0) //get currently selected antenna index //print antenna index and name cout << "Manually selected antenna: " << n << ": " << antenna_list[n] << endl; The example sets the sample rate to 8 MHz with 8 times oversampling in RF. The resulting sample rates are then obtained using LMS_GetSampleRate(). This function obtains sample rate of the data stream to PC as well as the rate at which the RF signal is sampled in hardware. If only one of those rates is of interest, a 'NULL' can be safely passed in place of the other. In the example code bellow both rates are obtained and printed to the console. //Set sample rate to 8 MHz, preferred oversampling in RF 8x //This set sampling rate for all channels if (LMS_SetSampleRate(device, 8e6, 8)!= 0) //print resulting sampling rates (interface to host, and ADC) float_type rate, rf_rate; if (LMS_GetSampleRate(device, LMS_CH_RX, 0, &rate, &rf_rate)!= 0) //NULL can be passed cout<<"\nhost interface sample rate: "<<rate/1e6<<" MHz\nRF ADC sample rate: "<<rf_rate/ 1e6<<"MHz\n\n"; The next step that is performed is low-pass filter (LPF) configuration. At first, the example obtains a valid Rx LPF range via LMS_GetLPFBWRange() and prints it to the console. Then the LPF bandwidth for the first Rx channel is set to 8 MHz by calling LMS_SetLPFBW(). Note that the bandwidth passed to this function is bandwidth in RF. 12

15 //Example of getting allowed parameter value range //There are also functions to get other parameter ranges (check LimeSuite.h) //Get allowed LPF bandwidth range lms_range_t range; if (LMS_GetLPFBWRange(device,LMS_CH_RX,&range)!=0) cout<<"rx LPF bandwitdh range: "<< range.min/1e6<<" - "<<range.max/1e6 << " MHz\n\n"; //Configure LPF, bandwidth 8 MHz if (LMS_SetLPFBW(device, LMS_CH_RX, 0, 8e6)!= 0) The gain for the first Rx channel is set using normalized gain function LMS_SetNormalizedGain(). The gain range used by normalized gain functions is from 0.0 (minimum) to 1.0 (maximum). The gain can also be set in db using LMS_SetGaindB(). Gain values are then read-back using GetNormalizedGain() to obtain normalized gain and GetGaindB() to obtain gain in db. In functions that set/get gain in db, '0' represents the minimum gain and the larger values should result in the RF signal being higher by approximately that value in db. //Set RX gain if (LMS_SetNormalizedGain(device, LMS_CH_RX, 0, 0.7)!= 0) //Print RX gain float_type gain; //normalized gain if (LMS_GetNormalizedGain(device, LMS_CH_RX, 0, &gain)!= 0) cout << "Normalized RX Gain: " << gain << endl; unsigned int gaindb; //gain in db if (LMS_GetGaindB(device, LMS_CH_RX, 0, &gaindb)!= 0) cout << "RX Gain: " << gaindb << " db" << endl; At the end of the configuration stage, automatic calibration of the first RX channel is performed via LMS_Calibrate(). In this example calibrations is performed for 8 MHz RF bandwidth. Test signal is also enabled in this example before streaming setup. //Perform automatic calibration if (LMS_Calibrate(device, LMS_CH_RX, 0, 8e6, 0)!= 0) //Enable test signal generation //To receive data from RF, remove this line or change signal to LMS_TESTSIG_NONE if (LMS_SetTestSignal(device, LMS_CH_RX, 0, LMS_TESTSIG_NCODIV8, 0, 0)!= 0) 13

16 3.2.3Sample streaming setup Streaming setup in singlerx is very similar to the setup in basicrx. The main difference is that floating-point format is used for samples (datafmt=lms_stream_t::lms_fmt_f32). Note that buffer allocated for samples is also of float type. Floating-point format is not native for LimeSDR hardware and it is there only for convenience. The conversion is done in software. //Streaming Setup //Initialize stream lms_stream_t streamid; streamid.channel = 0; //channel number streamid.fifosize = 1024 * 1024; //fifo size in samples streamid.throughputvslatency = 1.0; //optimize for max throughput streamid.istx = false; //RX channel streamid.datafmt = lms_stream_t::lms_fmt_f32; //32-bit floats if (LMS_SetupStream(device, &streamid)!= 0) //Data buffers const int bufersize = 10000; //complex samples per buffer float buffer[bufersize * 2]; //must hold I+Q values of each sample //Start streaming LMS_StartStream(&streamId); 3.2.4Receiving samples Receiving samples is done in a while() loop. The loop in this example runs for 10 seconds and is very similar to the one in basicrx example. It reads samples from the stream FIFO via LMS_RecvStream() and plots them using GNUplot (if enabled). However, this example additionally prints some stream statistics every second. LMS_GetStreamStatus() is used to obtain information about the stream (link data, FIFO status, error counts). The example code bellow prints the link data rate and the percentage of FIFO filled to the console. Note that the error counters returned by LMS_GetStreamStatus() are reset each time this functions is called, so it returns the number of errors since the last call. #ifdef USE_GNU_PLOT GNUPlotPipe gp; gp.write("set size square\n set xrange[-1:1]\n set yrange[-1:1]\n"); #endif auto t1 = chrono::high_resolution_clock::now(); auto t2 = t1; while (chrono::high_resolution_clock::now() - t1 < chrono::seconds(10)) //run for 10 seconds int samplesread; //Receive samples samplesread = LMS_RecvStream(&streamId, buffer, bufersize, NULL, 1000); //I and Q samples are interleaved in buffer: IQIQIQ... /* INSERT CODE FOR PROCESSING RECEIVED SAMPLES */ //Plot samples #ifdef USE_GNU_PLOT gp.write("plot '-' with points\n"); for (int j = 0; j < samplesread; ++j) gp.writef("%f %f\n", buffer[2 * j], buffer[2 * j + 1]); gp.write("e\n"); 14

17 gp.flush(); #endif //Print stats (once per second) if (chrono::high_resolution_clock::now() - t2 > chrono::seconds(1)) t2 = chrono::high_resolution_clock::now(); lms_stream_status_t status; //Get stream status LMS_GetStreamStatus(&streamId, &status); cout << "RX rate: " << status.linkrate / 1e6 << " MB/s\n"; //link data rate cout << "RX fifo: " << 100 * status.fifofilledcount / status.fifosize << "%" << endl; //percentage of FIFO filled At the end of the program, the device is closed the same way as in basicrx example. //Stop streaming LMS_StopStream(&streamId); //stream is stopped but can be started again with LMS_StartStream() LMS_DestroyStream(device, &streamid); //stream is deallocated and can no longer be used //Close device LMS_Close(device); return 0; 15

18 3.2.5Application output In setup stage application outputs parameter values that are obtained by API functions to console. Also, link data rate and percentage of stream FIFO filled is printed every second while streaming is running. Console output is shown in Figure 3. If GNUplot is enabled constellation of IQ samples is also plotted (Figure 4). Figure 3: Console output of singlerx example Figure 4: GNUplot output of singlerx example 16

19 3.3 Example 3: dualrxtx Demonstrates receiving and sending of data using 2 RX and 2 TX channels. Compared to previous examples additionally demonstrates: Usage of multiple channels Transmitting data samples RX and TX synchronizations based on hardware timestamps The example application connects to the first detected LimeSDR device, configures it and receives and sends samples for 10 seconds. The application retransmits received samples using synchronization based on timestamps to keep a constant offset between TX and RX at RF. The data transfer rate and FIFO status is printed every second while streaming is active Opening a device The code at the beginning of dualrxtx example is the same as in basicrx example. The device is opened via LMS_Open() and working configuration is loaded by LMS_Init(). For more details refer to description of basicrx example. #include "lime/limesuite.h" #include <iostream> #include <chrono> #ifdef USE_GNU_PLOT #include "gnuplotpipe.h" #endif using namespace std; //Device structure, should be initialize to NULL lms_device_t* device = NULL; int error() //print last error message cout << "ERROR:" << LMS_GetLastErrorMessage(); if (device!= NULL) LMS_Close(device); exit(-1); int main(int argc, char** argv) //Find devices int n; lms_info_str_t list[8]; //should be large enough to hold all detected devices if ((n = LMS_GetDeviceList(list)) < 0) //NULL can be passed to only get number of devices cout << "Devices found: " << n << endl; //print number of devices if (n < 1) return -1; //open the first device if (LMS_Open(&device, list[0], NULL)) 17

20 3.3.2Device configuration This example is meant to demonstrate usage of multiple channels, so at first it shows how to obtain the number of Rx/Tx channels. The code below obtains the number of channel via LMS_GetNumChannels() and prints it to the console. //Get number of channels if ((n = LMS_GetNumChannels(device, LMS_CH_RX)) < 0) cout << "Number of RX channels: " << n << endl; if ((n = LMS_GetNumChannels(device, LMS_CH_TX)) < 0) cout << "Number of TX channels: " << n << endl; After that goes the device configuration. The functions used in the configuration code bellow are described in previous examples and are not detailed in this section. The following steps are done: Modules required for 2 Rx and 2 Tx channels are enabled The Rx frequency for both channels is set to 1 GHz while Tx frequency is set to 1.2 GHz. Note that setting different frequencies for the first and the second channel is not supported as LMS7 uses single oscillator for both channels. Sample rate for all channels is set to 10 MHz. Gains are set for Rx and Tx channels Generation of test signals is enabled for RX channels. //Enable RX channel //Channels are numbered starting at 0 if (LMS_EnableChannel(device, LMS_CH_RX, 0, true)!= 0) if (LMS_EnableChannel(device, LMS_CH_RX, 1, true)!= 0) //Enable TX channels if (LMS_EnableChannel(device, LMS_CH_TX, 0, true)!= 0) if (LMS_EnableChannel(device, LMS_CH_TX, 1, true)!= 0) //Set RX center frequency to 1 GHz if (LMS_SetLOFrequency(device, LMS_CH_RX, 0, 1e9)!= 0) if (LMS_SetLOFrequency(device, LMS_CH_RX, 1, 1e9)!= 0) //Set TX center frequency to 1 GHz //Automatically selects antenna port if (LMS_SetLOFrequency(device, LMS_CH_TX, 0, 1.2e9)!= 0) if (LMS_SetLOFrequency(device, LMS_CH_TX, 1, 1.2e9)!= 0) //Set sample rate to 10 MHz, preferred oversampling in RF 4x //This set sampling rate for all channels if (LMS_SetSampleRate(device, 10e6, 4)!= 0) //Set RX gain if (LMS_SetNormalizedGain(device, LMS_CH_RX, 0, 0.7)!= 0) if (LMS_SetNormalizedGain(device, LMS_CH_RX, 1, 0.7)!= 0) //Set TX gain 18

21 if (LMS_SetNormalizedGain(device, LMS_CH_TX, 0, 0.4)!= 0) if (LMS_SetNormalizedGain(device, LMS_CH_TX, 1, 0.4)!= 0) //Enable test signals generation in RX channels //To receive data from RF, remove these lines or change signal to LMS_TESTSIG_NONE if (LMS_SetTestSignal(device, LMS_CH_RX, 0, LMS_TESTSIG_NCODIV4, 0, 0)!= 0) if (LMS_SetTestSignal(device, LMS_CH_RX, 1, LMS_TESTSIG_NCODIV8F, 0, 0)!= 0) 3.3.3Sample streaming setup In this example four streams are set-up in total (2 Rx and 2 Tx). Note that, all streams should be set-up before starting the streaming. The stream setup has already been explained in previous examples. The notable differences in this example are: Multiple Rx/Tx streams are configured. They have different channel parameter, while in previous examples only the first (0) channel was used. Previous examples were only dealing with Rx stream. Tx stream is set-up by setting 'istx=true', while all other configuration is the same as for Rx stream. Parameter 'throughputvslatency' is set to '0.5' instead of 1.0. This should provide good balance between throughput and latency. Also, this example is going to use a constant offset between Tx and Rx, so there are a couple of parameter to consider. If short offset between Rx and Tx is required, the latency needs to be minimized. On the other hand if delay between Rx and Tx is long, sufficiently large FIFO buffers are required as samples will be staying in them waiting to be sent. //Streaming Setup const int chcount = 2; //number of RX/TX streams lms_stream_t rx_streams[chcount]; lms_stream_t tx_streams[chcount]; //Initialize streams //All streams setups should be done before starting streams. New streams cannot be set-up if at least stream is running. for (int i = 0; i < chcount; ++i) rx_streams[i].channel = i; //channel number rx_streams[i].fifosize = 1024 * 1024; //fifo size in samples rx_streams[i].throughputvslatency = 0.5; //something in the middle rx_streams[i].istx = false; //RX channel rx_streams[i].datafmt = lms_stream_t::lms_fmt_i12; //12-bit integers if (LMS_SetupStream(device, &rx_streams[i])!= 0) tx_streams[i].channel = i; //channel number tx_streams[i].fifosize = 1024 * 1024; //fifo size in samples tx_streams[i].throughputvslatency = 0.5; //something in the middle tx_streams[i].istx = true; //TX channel tx_streams[i].datafmt = lms_stream_t::lms_fmt_i12; //12-bit integers if (LMS_SetupStream(device, &tx_streams[i])!= 0) //Initialize data buffers const int bufersize = 1024 * 8; //complex samples per buffer int16_t * buffers[chcount]; for (int i = 0; i < chcount; ++i) 19

22 buffers[i] = new int16_t[bufersize * 2]; //buffer to hold complex values (2*samples)) //Start streaming for (int i = 0; i < chcount; ++i) LMS_StartStream(&rx_streams[i]); LMS_StartStream(&tx_streams[i]); 3.3.4Streaming samples The streaming code in this section has a lot of similarities to the code in singlerx example. Once again only the things that were not covered by previous examples are explained in this section. First of all, there are metadata structures for Tx and Rx. They are going to be passed to LMS_RecvStream() and LMS_SendStream() functions. In Rx metadata structure is going to be used to obtain hardware timestamp of the samples received. In Tx metadata structure will be used to signal that samples should be sent at s specific hardware timestamp. To do that 'waitfortimestamp' parameter is set to 'true' in Tx metadata structure. lms_stream_meta_t rx_metadata;//use metadata for additional control over sample receive function behavior rx_metadata.flushpartialpacket = false; //currently has no effect in RX rx_metadata.waitfortimestamp = false; //currently has no effect in RX lms_stream_meta_t tx_metadata; //Use metadata for additional control over sample send function behavior tx_metadata.flushpartialpacket = false; //do not force sending of incomplete packet tx_metadata.waitfortimestamp = true; //Enable synchronization to HW timestamp #ifdef USE_GNU_PLOT GNUPlotPipe gp; gp.write("set size square\n set xrange[-2050:2050]\n set yrange[-2050:2050]\n"); #endif auto t1 = chrono::high_resolution_clock::now(); auto t2 = t1; The streaming code in while() loop receives samples from two Rx channels and retransmits them with constant offset to two Tx channels. The following steps are performed for each channel: Samples are read to buffer from the Rx FIFO via LMS_RecvStream(). The number of samples read is obtained from the function return value and the metadata structure should contain the hardware timestamp of the first sample in the buffer. A constant offset is added to Rx timestamp and the resulting value is written to Tx metadata structure. Note that if the packet of samples arrives to hardware to late they are not transmitted to RF at all and 'L' character is printed to the console. The received buffer, the number of samples read, and Tx metadata (containing timestamp at which the samples should be transmitted to RF) are then passed to LMS_SendStream() function. 20

23 while (chrono::high_resolution_clock::now() - t1 < chrono::seconds(10)) //run for 10 seconds for (int i = 0; i < chcount; ++i) int samplesread; //Receive samples samplesread=lms_recvstream(&rx_streams[i], buffers[i], bufersize,&rx_metadata, 1000); //Send samples with 1024*256 sample delay from RX (waitfortimestamp is enabled) tx_metadata.timestamp = rx_metadata.timestamp * 256; LMS_SendStream(&tx_streams[i], buffers[i], samplesread, &tx_metadata, 1000); The remaining code in the while() loop plots samples using GNUplot (if enabled) as well as output these parameters: RX data link rate Filled percentage of the first channel RX FIFO TX data link rate Filled percentage of the first channel TX FIFO //Print stats every 1s if (chrono::high_resolution_clock::now() - t2 > chrono::seconds(1)) #ifdef USE_GNU_PLOT //Plot samples t2 = chrono::high_resolution_clock::now(); gp.write("plot '-' with points"); for (int i = 1; i < chcount; ++i) gp.write(", '-' with points\n"); for (int i = 0; i < chcount; ++i) for (uint32_t j = 0; j < bufersize / 8; ++j) gp.writef("%i %i\n", buffers[i][2 * j], buffers[i][2 * j + 1]); gp.write("e\n"); gp.flush(); #endif //Print stats lms_stream_status_t status; LMS_GetStreamStatus(rx_streams, &status); //Obtain RX stream stats cout << "RX rate: " << status.linkrate / 1e6 << " MB/s\n"; //link data rate (both channels)) cout << "RX 0 FIFO: " << 100 * status.fifofilledcount / status.fifosize << "%" << endl; //percentage of RX 0 fifo filled LMS_GetStreamStatus(tx_streams, &status); //Obtain TX stream stats cout << "TX rate: " << status.linkrate / 1e6 << " MB/s\n"; //link data rate (both channels)) cout << "TX 0 FIFO: " << 100 * status.fifofilledcount / status.fifosize << "%" << endl; //percentage of TX 0 fifo filled Finally, after the loop all streams are stopped and device is closed. //Stop streaming for (int i = 0; i < chcount; ++i) LMS_StopStream(&rx_streams[i]); //stream is stopped but can be started again with LMS_StartStream() LMS_StopStream(&tx_streams[i]); for (int i = 0; i < chcount; ++i) 21

24 LMS_DestroyStream(device, &rx_streams[i]); //stream is deallocated and can no longer be used LMS_DestroyStream(device, &tx_streams[i]); delete[] buffers[i]; //Close device LMS_Close(device); return 0; 3.3.5Application output The code at the beginning of dualrxtx example is the same as in basicrx example. The device is opened via LMS_Open() and working configuration is loaded by LMS_Init(). For more details refer to description of basicrx example. Figure 5: Console output of dualrxtx example Figure 6: GNU plot output of dualrxtx example 22

An Incomplete C++ Primer. University of Wyoming MA 5310

An Incomplete C++ Primer. University of Wyoming MA 5310 An Incomplete C++ Primer University of Wyoming MA 5310 Professor Craig C. Douglas http://www.mgnet.org/~douglas/classes/na-sc/notes/c++primer.pdf C++ is a legacy programming language, as is other languages

More information

[Download Tech Notes TN-11, TN-18 and TN-25 for more information on D-TA s Record & Playback solution] SENSOR PROCESSING FOR DEMANDING APPLICATIONS 29

[Download Tech Notes TN-11, TN-18 and TN-25 for more information on D-TA s Record & Playback solution] SENSOR PROCESSING FOR DEMANDING APPLICATIONS 29 is an extremely scalable and ultra-fast 10 Gigabit record and playback system. It is designed to work with D-TA sensor signal acquisition products that are 10 Gigabit (10GbE) network attached. The can

More information

Comp151. Definitions & Declarations

Comp151. Definitions & Declarations Comp151 Definitions & Declarations Example: Definition /* reverse_printcpp */ #include #include using namespace std; int global_var = 23; // global variable definition void reverse_print(const

More information

Department of Electrical and Computer Engineering Ben-Gurion University of the Negev. LAB 1 - Introduction to USRP

Department of Electrical and Computer Engineering Ben-Gurion University of the Negev. LAB 1 - Introduction to USRP Department of Electrical and Computer Engineering Ben-Gurion University of the Negev LAB 1 - Introduction to USRP - 1-1 Introduction In this lab you will use software reconfigurable RF hardware from National

More information

AlazarTech SDK Programmer s Guide. Version 5.8.2 May 28, 2010

AlazarTech SDK Programmer s Guide. Version 5.8.2 May 28, 2010 AlazarTech SDK Programmer s Guide Version 5.8.2 May 28, 2010 License Agreement Important By using this software you accept the following terms of this License Agreement. If you do not agree with these

More information

Member Functions of the istream Class

Member Functions of the istream Class Member Functions of the istream Class The extraction operator is of limited use because it always uses whitespace to delimit its reads of the input stream. It cannot be used to read those whitespace characters,

More information

Basics of I/O Streams and File I/O

Basics of I/O Streams and File I/O Basics of This is like a cheat sheet for file I/O in C++. It summarizes the steps you must take to do basic I/O to and from files, with only a tiny bit of explanation. It is not a replacement for reading

More information

V850E2/ML4 APPLICATION NOTE. Performance Evaluation Software. Abstract. Products. R01AN1228EJ0100 Rev.1.00. Aug. 24, 2012

V850E2/ML4 APPLICATION NOTE. Performance Evaluation Software. Abstract. Products. R01AN1228EJ0100 Rev.1.00. Aug. 24, 2012 APPLICATION NOTE V850E2/ML4 R01AN1228EJ0100 Rev.1.00 Abstract This document describes a sample code that uses timer array unit A (TAUA) of the V850E2/ML4 to evaluate performance of the user-created tasks

More information

Storage Classes CS 110B - Rule Storage Classes Page 18-1 \handouts\storclas

Storage Classes CS 110B - Rule Storage Classes Page 18-1 \handouts\storclas CS 110B - Rule Storage Classes Page 18-1 Attributes are distinctive features of a variable. Data type, int or double for example, is an attribute. Storage class is another attribute. There are four storage

More information

Bluetooth for device discovery. Networking Guide

Bluetooth for device discovery. Networking Guide Bluetooth for device discovery Networking Guide Index Document Version: v4.4-11/2014 Libelium Comunicaciones Distribuidas S.L. INDEX 1. Introduction... 3 1.1. General description...3 2. Hardware... 5 2.1.

More information

ns-3 Tutorial (Part IV) Wireless & Tracing System and Visualizing Results

ns-3 Tutorial (Part IV) Wireless & Tracing System and Visualizing Results Intelligent Wireless Network Group Department of Computer Engineering Faculty of Engineering, Kasetsart University http://iwing.cpe.ku.ac.th ns-3 Tutorial (Part IV) Wireless & Tracing System and Visualizing

More information

PicoScope 5000 Series (A API)

PicoScope 5000 Series (A API) PicoScope 5000 Series A API PC Oscilloscopes Programmer's Guide PicoScope 5000 Series A API Programmer's Guide I Contents 1 Introduction...1 1 Overview...1...2 2 Minimum PC requirements 3 License agreement...3

More information

Non-Data Aided Carrier Offset Compensation for SDR Implementation

Non-Data Aided Carrier Offset Compensation for SDR Implementation Non-Data Aided Carrier Offset Compensation for SDR Implementation Anders Riis Jensen 1, Niels Terp Kjeldgaard Jørgensen 1 Kim Laugesen 1, Yannick Le Moullec 1,2 1 Department of Electronic Systems, 2 Center

More information

Illustration 1: Diagram of program function and data flow

Illustration 1: Diagram of program function and data flow The contract called for creation of a random access database of plumbing shops within the near perimeter of FIU Engineering school. The database features a rating number from 1-10 to offer a guideline

More information

Using Xbee 802.15.4 in Serial Communication

Using Xbee 802.15.4 in Serial Communication Using Xbee 802.15.4 in Serial Communication Jason Grimes April 2, 2010 Abstract Instances where wireless serial communication is required to connect devices, Xbee RF modules are effective in linking Universal

More information

Name: Class: Date: 9. The compiler ignores all comments they are there strictly for the convenience of anyone reading the program.

Name: Class: Date: 9. The compiler ignores all comments they are there strictly for the convenience of anyone reading the program. Name: Class: Date: Exam #1 - Prep True/False Indicate whether the statement is true or false. 1. Programming is the process of writing a computer program in a language that the computer can respond to

More information

Quick Start Guide. MRB-KW01 Development Platform Radio Utility Application Demo MODULAR REFERENCE BOARD

Quick Start Guide. MRB-KW01 Development Platform Radio Utility Application Demo MODULAR REFERENCE BOARD Quick Start Guide MRB-KW01 Development Platform Radio Utility Application Demo MODULAR REFERENCE BOARD Quick Start Guide Get to Know the MRB-KW01x Module UART Selector ANT 1 RFIO (TX/RX) USB 2.0 Serial

More information

EARTH PEOPLE TECHNOLOGY SERIAL GRAPH TOOL FOR THE ARDUINO UNO USER MANUAL

EARTH PEOPLE TECHNOLOGY SERIAL GRAPH TOOL FOR THE ARDUINO UNO USER MANUAL EARTH PEOPLE TECHNOLOGY SERIAL GRAPH TOOL FOR THE ARDUINO UNO USER MANUAL The Serial Graph Tool for the Arduino Uno provides a simple interface for graphing data to the PC from the Uno. It can graph up

More information

Software Development to Control the Scorbot ER VII Robot With a PC

Software Development to Control the Scorbot ER VII Robot With a PC Software Development to Control the Scorbot ER VII Robot With a PC ANTÓNIO FERROLHO Electrical Engineering Department Superior School of Technology of the Polytechnic Institute of Viseu Campus Politécnico

More information

KLV encoder / decoder library for STANAG 4609

KLV encoder / decoder library for STANAG 4609 KLV (Key-Length-Value) is a data encoding standard used for binary data byte-packing and metadata embedding into video feeds. KLV encoder/decoder C++ library (available for both Windows and Linux) allows

More information

Timer A (0 and 1) and PWM EE3376

Timer A (0 and 1) and PWM EE3376 Timer A (0 and 1) and PWM EE3376 General Peripheral Programming Model Each peripheral has a range of addresses in the memory map peripheral has base address (i.e. 0x00A0) each register used in the peripheral

More information

WUA-0605 300Mbps Wireless USB Network Adapter

WUA-0605 300Mbps Wireless USB Network Adapter WUA-0605 300Mbps Wireless USB Network Adapter User Manual V1.0 Certification FCC CE FCC Statement This equipment has been tested and found to comply with the limits for a Class B digital device, pursuant

More information

An API for Reading the MySQL Binary Log

An API for Reading the MySQL Binary Log An API for Reading the MySQL Binary Log Mats Kindahl Lead Software Engineer, MySQL Replication & Utilities Lars Thalmann Development Director, MySQL Replication, Backup & Connectors

More information

The Answer to the 14 Most Frequently Asked Modbus Questions

The Answer to the 14 Most Frequently Asked Modbus Questions Modbus Frequently Asked Questions WP-34-REV0-0609-1/7 The Answer to the 14 Most Frequently Asked Modbus Questions Exactly what is Modbus? Modbus is an open serial communications protocol widely used in

More information

Virtuozzo Virtualization SDK

Virtuozzo Virtualization SDK Virtuozzo Virtualization SDK Programmer's Guide February 18, 2016 Copyright 1999-2016 Parallels IP Holdings GmbH and its affiliates. All rights reserved. Parallels IP Holdings GmbH Vordergasse 59 8200

More information

APPLICATION NOTE GaGe CompuScope 14200-based Lightning Monitoring System

APPLICATION NOTE GaGe CompuScope 14200-based Lightning Monitoring System APPLICATION NOTE GaGe CompuScope 14200-based Lightning Monitoring System Challenge A customer needed to upgrade an older data acquisition unit for a real-time lightning monitoring system. Unlike many lightning

More information

Analog Devices Welcomes Hittite Microwave Corporation NO CONTENT ON THE ATTACHED DOCUMENT HAS CHANGED

Analog Devices Welcomes Hittite Microwave Corporation NO CONTENT ON THE ATTACHED DOCUMENT HAS CHANGED Analog Devices Welcomes Hittite Microwave Corporation NO CONTENT ON THE ATTACHED DOCUMENT HAS CHANGED www.analog.com www.hittite.com THIS PAGE INTENTIONALLY LEFT BLANK PLL & PLL with Integrated VCO Evaluation

More information

Web Site: www.parallax.com Forums: forums.parallax.com Sales: [email protected] Technical: [email protected]

Web Site: www.parallax.com Forums: forums.parallax.com Sales: sales@parallax.com Technical: support@parallax.com Web Site: www.parallax.com Forums: forums.parallax.com Sales: [email protected] Technical: [email protected] Office: (916) 624-8333 Fax: (916) 624-8003 Sales: (888) 512-1024 Tech Support: (888) 997-8267

More information

LoRa FAQs. www.semtech.com 1 of 4 Semtech. Semtech Corporation LoRa FAQ

LoRa FAQs. www.semtech.com 1 of 4 Semtech. Semtech Corporation LoRa FAQ LoRa FAQs 1.) What is LoRa Modulation? LoRa (Long Range) is a modulation technique that provides significantly longer range than competing technologies. The modulation is based on spread-spectrum techniques

More information

AlazarTech SDK Programmer s Guide. Version 6.0.3 June 16, 2011

AlazarTech SDK Programmer s Guide. Version 6.0.3 June 16, 2011 AlazarTech SDK Programmer s Guide Version 6.0.3 June 16, 2011 License Agreement Important By using this software you accept the following terms of this License Agreement. If you do not agree with these

More information

AN3998 Application note

AN3998 Application note Application note PDM audio software decoding on STM32 microcontrollers 1 Introduction This application note presents the algorithms and architecture of an optimized software implementation for PDM signal

More information

Gigabit Ethernet Packet Capture. User s Guide

Gigabit Ethernet Packet Capture. User s Guide Gigabit Ethernet Packet Capture User s Guide Copyrights Copyright 2008 CACE Technologies, Inc. All rights reserved. This document may not, in whole or part, be: copied; photocopied; reproduced; translated;

More information

LogiCORE IP AXI Performance Monitor v2.00.a

LogiCORE IP AXI Performance Monitor v2.00.a LogiCORE IP AXI Performance Monitor v2.00.a Product Guide Table of Contents IP Facts Chapter 1: Overview Target Technology................................................................. 9 Applications......................................................................

More information

BLUETOOTH SERIAL PORT PROFILE. iwrap APPLICATION NOTE

BLUETOOTH SERIAL PORT PROFILE. iwrap APPLICATION NOTE BLUETOOTH SERIAL PORT PROFILE iwrap APPLICATION NOTE Thursday, 19 April 2012 Version 1.2 Copyright 2000-2012 Bluegiga Technologies All rights reserved. Bluegiga Technologies assumes no responsibility for

More information

TR-3 Channel Editor. Software Manual

TR-3 Channel Editor. Software Manual TR-3 Channel Editor Software Manual Trilithic Company Profile Trilithic is a privately held manufacturer founded in 1986 as an engineering and assembly company that built and designed customer-directed

More information

ELAD FDM-SW1 USER MANUAL. Ver. 1.0

ELAD FDM-SW1 USER MANUAL. Ver. 1.0 ELAD FDM-SW1 USER MANUAL Ver. 1.0 Index 1 FDM-SW1 Overview... 4 2 Graphical User Interface (GUI)... 5 2.1 Display Window... 6 2.1.1 Filter Spectrum... 6 2.1.2 Click Options... 7 2.1.3 Graphics Settings...

More information

Wireless Transmission of JPEG file using GNU Radio and USRP

Wireless Transmission of JPEG file using GNU Radio and USRP 1 Wireless Transmission of JPEG file using GNU Radio and USRP Sachin Hirve, Saikrishna Gumudavally, Department of Electrical and Computer Engineering, Cleveland State University Abstract Wireless applications

More information

Sources: On the Web: Slides will be available on:

Sources: On the Web: Slides will be available on: C programming Introduction The basics of algorithms Structure of a C code, compilation step Constant, variable type, variable scope Expression and operators: assignment, arithmetic operators, comparison,

More information

INSTALLATION MANUAL LCD TV / LED LCD TV

INSTALLATION MANUAL LCD TV / LED LCD TV INSTALLATION MANUAL LCD TV / LED LCD TV Please read this manual carefully before operating your set and retain it for future reference. P/NO: MFL6288369 (03-REV00) Printed in Korea www.lg.com CONTENTS

More information

What is LOG Storm and what is it useful for?

What is LOG Storm and what is it useful for? What is LOG Storm and what is it useful for? LOG Storm is a high-speed digital data logger used for recording and analyzing the activity from embedded electronic systems digital bus and data lines. It

More information

MOTOROLA Radio Service Software RSS Software GP60 Series

MOTOROLA Radio Service Software RSS Software GP60 Series MOTOROLA Radio Service Software RSS Software GP60 Series MOTOROLA Radio Service Software: MAIN MENU The MAIN Menu is the top level of the program from which you select the type of function that you wish

More information

GSM/EDGE Output RF Spectrum on the V93000 Joe Kelly and Max Seminario, Verigy

GSM/EDGE Output RF Spectrum on the V93000 Joe Kelly and Max Seminario, Verigy GSM/EDGE Output RF Spectrum on the V93000 Joe Kelly and Max Seminario, Verigy Introduction A key transmitter measurement for GSM and EDGE is the Output RF Spectrum, or ORFS. The basis of this measurement

More information

Signal Hound Broadband Spectrum Analyzer Application Programming Interface(API)

Signal Hound Broadband Spectrum Analyzer Application Programming Interface(API) TEST EQUIPMENT PLUS Signal Hound Broadband Spectrum Analyzer Application Programming Interface(API) Programmers Reference Manual Version 2.0.4 Justin Crooks & Andrew Montgomery 8/25/2014 Requirements,

More information

GM862 Arduino Shield

GM862 Arduino Shield User s Manual GM862 Arduino Shield Rev. 1.3 MCI-MA-0063 MCI Electronics Luis Thayer Ojeda 0115. Of. 402 Santiago, Chile Tel. +56 2 3339579 [email protected] MCI Ltda. Luis Thayer Ojeda 0115. Of. 402 Santiago,

More information

GSM Testers for Rent and Sale

GSM Testers for Rent and Sale GSM Testers for Rent and Sale ^ Introduction... 2 4202S Mobile Service Tester GSM Module Tester... 3 4107S Mobil Phone Tester... 4 Sales and rent information... 6 GSM tester for sale and to rent Page 1

More information

AN1754 APPLICATION NOTE

AN1754 APPLICATION NOTE AN1754 APPLICATION NOTE DATA LOGGING PROGRAM FOR TESTING ST7 APPLICATIONS VIA ICC by Microcontroller Division Application Team INTRODUCTION Data logging is the process of recording data. It is required

More information

Building a Simulink model for real-time analysis V1.15.00. Copyright g.tec medical engineering GmbH

Building a Simulink model for real-time analysis V1.15.00. Copyright g.tec medical engineering GmbH g.tec medical engineering GmbH Sierningstrasse 14, A-4521 Schiedlberg Austria - Europe Tel.: (43)-7251-22240-0 Fax: (43)-7251-22240-39 [email protected], http://www.gtec.at Building a Simulink model for real-time

More information

Informatica e Sistemi in Tempo Reale

Informatica e Sistemi in Tempo Reale Informatica e Sistemi in Tempo Reale Introduction to C programming Giuseppe Lipari http://retis.sssup.it/~lipari Scuola Superiore Sant Anna Pisa October 25, 2010 G. Lipari (Scuola Superiore Sant Anna)

More information

AXI Performance Monitor v5.0

AXI Performance Monitor v5.0 AXI Performance Monitor v5.0 LogiCORE IP Product Guide Vivado Design Suite Table of Contents IP Facts Chapter 1: Overview Advanced Mode...................................................................

More information

Hypertable Architecture Overview

Hypertable Architecture Overview WHITE PAPER - MARCH 2012 Hypertable Architecture Overview Hypertable is an open source, scalable NoSQL database modeled after Bigtable, Google s proprietary scalable database. It is written in C++ for

More information

Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C

Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C 1 An essential part of any embedded system design Programming 2 Programming in Assembly or HLL Processor and memory-sensitive

More information

Logging. Working with the POCO logging framework.

Logging. Working with the POCO logging framework. Logging Working with the POCO logging framework. Overview > Messages, Loggers and Channels > Formatting > Performance Considerations Logging Architecture Message Logger Channel Log File Logging Architecture

More information

EcgSoft. Software Developer s Guide to RestEcg. Innovative ECG Software. www.ecg-soft.com - e-mail: [email protected]

EcgSoft. Software Developer s Guide to RestEcg. Innovative ECG Software. www.ecg-soft.com - e-mail: info@ecg-soft.com EcgSoft Software Developer s Guide to RestEcg Innovative ECG Software www.ecg-soft.com - e-mail: [email protected] Open Interface This page is intentionally left blank Copyright EcgSoft, October 2012 Page

More information

OPTIMIZE DMA CONFIGURATION IN ENCRYPTION USE CASE. Guillène Ribière, CEO, System Architect

OPTIMIZE DMA CONFIGURATION IN ENCRYPTION USE CASE. Guillène Ribière, CEO, System Architect OPTIMIZE DMA CONFIGURATION IN ENCRYPTION USE CASE Guillène Ribière, CEO, System Architect Problem Statement Low Performances on Hardware Accelerated Encryption: Max Measured 10MBps Expectations: 90 MBps

More information

TCP/IP MODULE CA-ETHR-A INSTALLATION MANUAL

TCP/IP MODULE CA-ETHR-A INSTALLATION MANUAL TCP/IP MODULE CA-ETHR-A INSTALLATION MANUAL w w w. c d v g r o u p. c o m CA-ETHR-A: TCP/IP Module Installation Manual Page Table of Contents Introduction...5 Hardware Components... 6 Technical Specifications...

More information

Monitoring Network Traffic Using SPAN

Monitoring Network Traffic Using SPAN 22 CHAPTER This chapter describes the switched port analyzer (SPAN) features provided in switches in the Cisco MDS 9000 Family. It includes the following sections: About SPAN, page 22-2 SPAN Sources, page

More information

Site Master S251B Antenna and Cable Analyzer

Site Master S251B Antenna and Cable Analyzer Site Master S251B Antenna and Cable Analyzer Programming Manual Hand-Held Tester For Antennas, Transmission Lines And Other RF Components WARRANTY The Anritsu product(s) listed on the title page is (are)

More information

Single channel data transceiver module WIZ2-434

Single channel data transceiver module WIZ2-434 Single channel data transceiver module WIZ2-434 Available models: WIZ2-434-RS: data input by RS232 (±12V) logic, 9-15V supply WIZ2-434-RSB: same as above, but in a plastic shell. The WIZ2-434-x modules

More information

DVB-T 730. User s Manual

DVB-T 730. User s Manual EPG Program Reservation There are 10 program timers to bring up reminder for a reserved program. 20 seconds before the start of the reserved program, a pop-up window will remind viewer. If no further instruction,

More information

MultiDSLA v4.8.1: Release Notes at 07 October 2013

MultiDSLA v4.8.1: Release Notes at 07 October 2013 MultiDSLA v4.8.1: Release Notes at 07 October 2013 These Release Notes give you information about MultiDSLA v4.8, feature changes, known issues and possible workarounds for those issues. In 4.8 we have

More information

Moven Studio realtime. streaming

Moven Studio realtime. streaming Moven Studio realtime network streaming UDP protocol specification Document MV0305P Revision B, 19 December 2007 Xsens Technologies B.V. phone +31 88 XSENS 00 Pantheon 6a +31 88 97367 00 P.O. Box 559 fax

More information

MANUAL FOR RX700 LR and NR

MANUAL FOR RX700 LR and NR MANUAL FOR RX700 LR and NR 2013, November 11 Revision/ updates Date, updates, and person Revision 1.2 03-12-2013, By Patrick M Affected pages, ETC ALL Content Revision/ updates... 1 Preface... 2 Technical

More information

Disfer. Sink - Sensor Connectivity and Sensor Android Application. Protocol implementation: Charilaos Stais (stais AT aueb.gr)

Disfer. Sink - Sensor Connectivity and Sensor Android Application. Protocol implementation: Charilaos Stais (stais AT aueb.gr) Disfer Sink - Sensor Connectivity and Sensor Android Application Protocol implementation: Charilaos Stais (stais AT aueb.gr) Android development: Dimitri Balerinas (dimi.balerinas AT gmail.com) Supervised

More information

MEASURING WIRELESS NETWORK CONNECTION QUALITY

MEASURING WIRELESS NETWORK CONNECTION QUALITY Technical Disclosure Commons Defensive Publications Series January 27, 2016 MEASURING WIRELESS NETWORK CONNECTION QUALITY Mike Mu Avery Pennarun Follow this and additional works at: http://www.tdcommons.org/dpubs_series

More information

Software User Guide UG-461

Software User Guide UG-461 Software User Guide UG-461 One Technology Way P.O. Box 9106 Norwood, MA 02062-9106, U.S.A. Tel: 781.329.4700 Fax: 781.461.3113 www.analog.com ezlinx icoupler Isolated Interface Development Environment

More information

GnuRadio CONTACT INFORMATION: phone: +1.301.527.1629 fax: +1.301.527.1690 email: [email protected] web: www.hsc.com

GnuRadio CONTACT INFORMATION: phone: +1.301.527.1629 fax: +1.301.527.1690 email: whitepaper@hsc.com web: www.hsc.com GnuRadio CONTACT INFORMATION: phone: +1.301.527.1629 fax: +1.301.527.1690 email: [email protected] web: www.hsc.com PROPRIETARY NOTICE All rights reserved. This publication and its contents are proprietary

More information

PLL frequency synthesizer

PLL frequency synthesizer ANALOG & TELECOMMUNICATION ELECTRONICS LABORATORY EXERCISE 4 Lab 4: PLL frequency synthesizer 1.1 Goal The goals of this lab exercise are: - Verify the behavior of a and of a complete PLL - Find capture

More information

WRE6505. User s Guide. Quick Start Guide. Wireless AC750 Range Extender. Default Login Details. Version 1.00 Edition 1, 4 2014

WRE6505. User s Guide. Quick Start Guide. Wireless AC750 Range Extender. Default Login Details. Version 1.00 Edition 1, 4 2014 WRE6505 Wireless AC750 Range Extender Version 1.00 Edition 1, 4 2014 2.4G 5G Quick Start Guide User s Guide Default Login Details LAN IP Address 192.168.1.2 User Name admin www.zyxel.com Password 1234

More information

MBP_MSTR: Modbus Plus Master 12

MBP_MSTR: Modbus Plus Master 12 Unity Pro MBP_MSTR 33002527 07/2011 MBP_MSTR: Modbus Plus Master 12 Introduction This chapter describes the MBP_MSTR block. What s in this Chapter? This chapter contains the following topics: Topic Page

More information

Time Synchronization & Timekeeping

Time Synchronization & Timekeeping 70072-0111-14 TECHNICAL NOTE 06/2009 Time Synchronization & Timekeeping Time synchronization lets you synchronize the internal clocks of all networked PowerLogic ION meters and devices. Once synchronized,

More information

RFSPACE CLOUD-IQ #CONNECTED SOFTWARE DEFINED RADIO

RFSPACE CLOUD-IQ #CONNECTED SOFTWARE DEFINED RADIO CLOUD-IQ #CONNECTED SOFTWARE DEFINED RADIO 1 - SPECIFICATIONS Cloud-IQ INTRODUCTION The Cloud-IQ is a high performance, direct sampling software radio with an ethernet interface. It offers outstanding

More information

USB Human Interface Joystick Demonstration Create a HID USB Device (sample Joystick) By Jared St.Clare, October 2009 Version 1

USB Human Interface Joystick Demonstration Create a HID USB Device (sample Joystick) By Jared St.Clare, October 2009 Version 1 Create a HID USB Device (sample Joystick) By Jared St.Clare, October 2009 Version 1 1. Use EasyHid to create the generic files and USB files. Select the correct pic chip that you plan to program. We re

More information

PC Base Adapter Daughter Card UART GPIO. Figure 1. ToolStick Development Platform Block Diagram

PC Base Adapter Daughter Card UART GPIO. Figure 1. ToolStick Development Platform Block Diagram TOOLSTICK VIRTUAL TOOLS USER S GUIDE RELEVANT DEVICES 1. Introduction The ToolStick development platform consists of a ToolStick Base Adapter and a ToolStick Daughter card. The ToolStick Virtual Tools

More information

SUDT AccessPort TM Advanced Terminal / Monitor / Debugger Version 1.37 User Manual

SUDT AccessPort TM Advanced Terminal / Monitor / Debugger Version 1.37 User Manual SUDT AccessPort TM Advanced Terminal / Monitor / Debugger Version 1.37 User Manual Version 1.0 - January 20, 2015 CHANGE HISTORY Version Date Description of Changes 1.0 January 20, 2015 Initial Publication

More information

Application Note: AN00121 Using XMOS TCP/IP Library for UDP-based Networking

Application Note: AN00121 Using XMOS TCP/IP Library for UDP-based Networking Application Note: AN00121 Using XMOS TCP/IP Library for UDP-based Networking This application note demonstrates the use of XMOS TCP/IP stack on an XMOS multicore micro controller to communicate on an ethernet-based

More information

Answers to Review Questions Chapter 7

Answers to Review Questions Chapter 7 Answers to Review Questions Chapter 7 1. The size declarator is used in a definition of an array to indicate the number of elements the array will have. A subscript is used to access a specific element

More information

UGLYDATV 0.1 by F5OEO Evariste

UGLYDATV 0.1 by F5OEO Evariste UGLYDATV 0.1 by F5OEO Evariste November 2014 Introduction This documentation describes a solution to use the Raspberry Pi as a main component of a DVB-S modulator. Two modes are available : - Output I/Q

More information

Pharos Control User Guide

Pharos Control User Guide Outdoor Wireless Solution Pharos Control User Guide REV1.0.0 1910011083 Contents Contents... I Chapter 1 Quick Start Guide... 1 1.1 Introduction... 1 1.2 Installation... 1 1.3 Before Login... 8 Chapter

More information

Field Calibration Software

Field Calibration Software SIGNAL HOUND Field Calibration Software User s Manual Version 1.1.0 7/8/2016 This information is being released into the public domain in accordance with the Export Administration Regulations 15 CFR 734

More information

Programing the Microprocessor in C Microprocessor System Design and Interfacing ECE 362

Programing the Microprocessor in C Microprocessor System Design and Interfacing ECE 362 PURDUE UNIVERSITY Programing the Microprocessor in C Microprocessor System Design and Interfacing ECE 362 Course Staff 1/31/2012 1 Introduction This tutorial is made to help the student use C language

More information

Intel Power Gadget 2.0 Monitoring Processor Energy Usage

Intel Power Gadget 2.0 Monitoring Processor Energy Usage Intel Power Gadget 2.0 Monitoring Processor Energy Usage Introduction Intel Power Gadget 2.0 is enabled for 2nd generation Intel Core Processor based platforms is a set of Microsoft Windows* gadget, driver,

More information

An Overview of the Virginia Tech Program in Software Radios Implemented with Reconfigurable Computing

An Overview of the Virginia Tech Program in Software Radios Implemented with Reconfigurable Computing An Overview of the Virginia Tech Program in Software Radios Implemented with Reconfigurable Computing Contributing Faculty P. M. Athanas, J. H. Reed, W. L. Stutzman, W. B. Tranter, B. D. Woerner, S. F.

More information

Embedded Software Development

Embedded Software Development Linköpings Tekniska Högskola Institutionen för Datavetanskap (IDA), Software and Systems (SaS) TDDI11, Embedded Software 2010-04-22 Embedded Software Development Host and Target Machine Typical embedded

More information

The Effective Number of Bits (ENOB) of my R&S Digital Oscilloscope Technical Paper

The Effective Number of Bits (ENOB) of my R&S Digital Oscilloscope Technical Paper The Effective Number of Bits (ENOB) of my R&S Digital Oscilloscope Technical Paper Products: R&S RTO1012 R&S RTO1014 R&S RTO1022 R&S RTO1024 This technical paper provides an introduction to the signal

More information

C-GEP 100 Monitoring application user manual

C-GEP 100 Monitoring application user manual C-GEP 100 Monitoring application user manual 1 Introduction: C-GEP is a very versatile platform for network monitoring applications. The ever growing need for network bandwith like HD video streaming and

More information

How To Port A Program To Dynamic C (C) (C-Based) (Program) (For A Non Portable Program) (Un Portable) (Permanent) (Non Portable) C-Based (Programs) (Powerpoint)

How To Port A Program To Dynamic C (C) (C-Based) (Program) (For A Non Portable Program) (Un Portable) (Permanent) (Non Portable) C-Based (Programs) (Powerpoint) TN203 Porting a Program to Dynamic C Introduction Dynamic C has a number of improvements and differences compared to many other C compiler systems. This application note gives instructions and suggestions

More information

Developing an ODBC C++ Client with MySQL Database

Developing an ODBC C++ Client with MySQL Database Developing an ODBC C++ Client with MySQL Database Author: Rajinder Yadav Date: Aug 21, 2007 Web: http://devmentor.org Email: [email protected] Assumptions I am going to assume you already know how

More information

Lab 2.0 Thermal Camera Interface

Lab 2.0 Thermal Camera Interface Lab 2.0 Thermal Camera Interface Lab 1 - Camera directional-stand (recap) The goal of the lab 1 series was to use a PS2 joystick to control the movement of a pan-tilt module. To this end, you implemented

More information

DCP COMMAND. bringing two-way communications to your DCPs

DCP COMMAND. bringing two-way communications to your DCPs DCP COMMAND bringing two-way communications to your DCPs DCP COMMAND Project Goals Bring affordable, reliable two way communications to DCPs Facilitate remote management of the DCP including setup and

More information

Appendix K Introduction to Microsoft Visual C++ 6.0

Appendix K Introduction to Microsoft Visual C++ 6.0 Appendix K Introduction to Microsoft Visual C++ 6.0 This appendix serves as a quick reference for performing the following operations using the Microsoft Visual C++ integrated development environment (IDE):

More information

USART and Asynchronous Communication

USART and Asynchronous Communication The USART is used for synchronous and asynchronous serial communication. USART = Universal Synchronous/Asynchronous Receiver Transmitter Our focus will be on asynchronous serial communication. Asynchronous

More information

Technical Bulletin. Enabling Arista Advanced Monitoring. Overview

Technical Bulletin. Enabling Arista Advanced Monitoring. Overview Technical Bulletin Enabling Arista Advanced Monitoring Overview Highlights: Independent observation networks are costly and can t keep pace with the production network speed increase EOS eapi allows programmatic

More information

Accurate Measurement of the Mains Electricity Frequency

Accurate Measurement of the Mains Electricity Frequency Accurate Measurement of the Mains Electricity Frequency Dogan Ibrahim Near East University, Faculty of Engineering, Lefkosa, TRNC [email protected] Abstract The frequency of the mains electricity supply

More information

TivaWare Utilities Library

TivaWare Utilities Library TivaWare Utilities Library USER S GUIDE SW-TM4C-UTILS-UG-1.1 Copyright 2013 Texas Instruments Incorporated Copyright Copyright 2013 Texas Instruments Incorporated. All rights reserved. Tiva and TivaWare

More information

Keil C51 Cross Compiler

Keil C51 Cross Compiler Keil C51 Cross Compiler ANSI C Compiler Generates fast compact code for the 8051 and it s derivatives Advantages of C over Assembler Do not need to know the microcontroller instruction set Register allocation

More information