LMS API - Quick start guide -
|
|
|
- Kory Gray
- 6 years ago
- Views:
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 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
[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
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
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
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
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,
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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: [email protected] Technical: [email protected] Office: (916) 624-8333 Fax: (916) 624-8003 Sales: (888) 512-1024 Tech Support: (888) 997-8267
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
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
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
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;
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......................................................................
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
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
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...
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
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,
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
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
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
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
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,
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,
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
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
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
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)
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...................................................................
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
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
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
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: [email protected] Open Interface This page is intentionally left blank Copyright EcgSoft, October 2012 Page
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
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...
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
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)
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
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,
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
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
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
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
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
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
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: [email protected] web: www.hsc.com PROPRIETARY NOTICE All rights reserved. This publication and its contents are proprietary
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
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
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
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,
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
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
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
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
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
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
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
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
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
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
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,
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.
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
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
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
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
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
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
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
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):
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
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
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
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
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
