Agilent Signal Generators Programming Guide
273
Creating and Downloading Waveform Files
Programming Examples
fprintf(stderr, "Could not allocate memory for copy buffer\n");
}
fclose(file);
iclose(id);
return 0;
}
Importing and Downloading Using VISA—Big Endian Order
On the documentation CD, this programming example’s name is “DownLoad_Visa_c++.txt.”
This C++ programming example (compiled using Microsoft Visual C++ 6.0) assumes that the data is in 
big endian order and performs the following functions:
• error checking
• binary file importing from the PC or workstation
• binary file download to the signal generator’s non–volatile memory
To load the waveform data to volatile (WFM1) memory, change the instDestfile declaration to: 
“USER/BBG1/WAVEFORM/”.
//*********************************************************************************
// PROGRAM NAME:Download_Visa_c++.cpp
//
// PROGRAM DESCRIPTION:Sample test program to download ARB waveform data. Send a 
// file in chunks of ascii data to the signal generator.
// 
// NOTE: You must have the Agilent IO Libraries installed to run this program.
// 
// This example uses the LAN/TCPIP to download a file to the signal generator's 
// non-volatile memory. The program allocates a memory buffer on the PC or 
// workstation of 102400 bytes (100*1024 bytes). The actual size of the buffer is 
// limited by the memory on your PC or workstation, so the buffer size can be 
// increased or decreased to meet your system limitations.
//
// While this program uses the LAN/TCPIP to download a waveform file into 
// non-volatile memory, it can be modified to store files in volatile memory 
// WFM1 using GPIB by setting the instrOpenString = "TCPIP0::xxx.xxx.xxx.xxx::INSTR" 
// declaration with "GPIB::19::INSTR"
// 
// The program also includes some error checking to alert you when problems arise 
// while trying to download files. This includes checking to see if the file exists.
//**********************************************************************************
// IMPORTANT: Replace the xxx.xxx.xxx.xxx IP address in the instOpenString declaration
// in the code below with the IP address of your signal generator. (or you can use the
// instrument's hostname). Replace the localSrcFile and instDestFile directory paths 
Convert pdf to jpg for online - Convert PDF to JPEG images in C#.net, ASP.NET MVC, WinForms, WPF project
How to convert PDF to JPEG using C#.NET PDF to JPEG conversion / converter library control SDK
convert pdf file to jpg; change pdf to jpg image
Convert pdf to jpg for online - VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.net, ASP.NET MVC, WinForms, WPF project
Online Tutorial for PDF to JPEG (JPG) Conversion in VB.NET Image Application
reader pdf to jpeg; change pdf to jpg format
274
Agilent Signal Generators Programming Guide
Creating and Downloading Waveform Files
Programming Examples
// as needed. 
//********************************************************************************** 
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include  "visa.h"
//
// IMPORTANT:
//   Configure the following three lines correctly before compiling and running  
char* instOpenString ="TCPIP0::xxx.xxx.xxx.xxx::INSTR"; // your instrument's IP address
const char* localSrcFile = "\\Files\\IQ_DataC";
const char* instDestFile = "/USER/WAVEFORM/IQ_DataC";
const int BUFFER_SIZE = 100*1024;// Size of the copy buffer
int main(int argc, char* argv[])
{
ViSession defaultRM, vi;
ViStatus status = 0;    
status = viOpenDefaultRM(&defaultRM);// Open the default resource manager 
// TO DO: Error handling here
status = viOpen(defaultRM, instOpenString, VI_NULL, VI_NULL, &vi);
if (status)// If any errors then display the error and exit the program
{
fprintf(stderr, "viOpen failed (%s)\n", instOpenString);
return -1;
}
FILE* file = fopen(localSrcFile, "rb");// Open local source file for binary reading
if (!file) // If any errors display the error and exit the program
{
fprintf(stderr, "Could not open file: %s\n", localSrcFile);
Online Convert Jpeg to PDF file. Best free online export Jpg image
Online JPEG to PDF Converter. Download Free Trial. Convert a JPG to PDF. You can drag and drop your JPG file in the box, and then start
pdf to jpg converter; convert pdf pages to jpg
Online Convert PDF to Jpeg images. Best free online PDF JPEG
Online PDF to JPEG Converter. Download Free Trial. Convert a PDF File to JPG. Drag and drop your PDF in the box above and we'll convert the files for you.
c# convert pdf to jpg; convert pdf page to jpg
Agilent Signal Generators Programming Guide
275
Creating and Downloading Waveform Files
Programming Examples
return 0;
}
if( fseek( file, 0, SEEK_END ) < 0 )
{
fprintf(stderr,"Cannot lseek to the end of file.\n" );
return 0;
}
long lenToSend = ftell(file);// Number of bytes in the file
printf("File size = %d\n", lenToSend);
if (fseek(file, 0, SEEK_SET) < 0) 
{
fprintf(stderr,"Cannot lseek to the start of file.\n");
return 0;
}
unsigned char* buf = new unsigned char[BUFFER_SIZE]; // Allocate char buffer memory
if (buf && lenToSend)
{
// Do not send the EOI (end of instruction) terminator on any write except the 
// last one
viSetAttribute( vi, VI_ATTR_SEND_END_EN, 0 );
// Prepare and send the SCPI command header
char s[20];
sprintf(s, "%d", lenToSend);
int lenLen = strlen(s);
unsigned char s2[256];
// Write the command mmem:data and the header.The number lenLen represents the 
// number of bytes and the actual number of bytes is the variable lenToSend
sprintf((char*)s2, "mmem:data \"%s\", #%d%d", instDestFile, lenLen, lenToSend);
// Send the command and header to the signal generator
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
This demo code just converts first page to jpeg image. String inputFilePath = @"C:\input.pdf"; String outputFilePath = @"C:\output.jpg"; // Convert PDF to jpg.
convert pdf photo to jpg; convert pdf to jpg for
C# Image Convert: How to Convert Tiff Image to Jpeg, Png, Bmp, &
RasterEdge.XDoc.PDF.dll. This demo code will convert first page to jpeg image. C:\input.tif"; String outputFilePath = @"C:\output.jpg"; // Convert tiff to jpg.
best pdf to jpg converter; convert pdf file to jpg format
276
Agilent Signal Generators Programming Guide
Creating and Downloading Waveform Files
Programming Examples
viWrite(vi, s2, strlen((char*)s2), 0);
long numRead;
// Send file in BUFFER_SIZE chunks to the signal generator
do
{
numRead = fread(buf, sizeof(char), BUFFER_SIZE, file);
viWrite(vi, buf, numRead, 0);    
} while (numRead == BUFFER_SIZE);
// Send the terminating newline and EOI
viSetAttribute( vi, VI_ATTR_SEND_END_EN, 1 );
char* newLine = "\n";
viWrite(vi, (unsigned char*)newLine, 1, 0);
delete [] buf;
}
else
{
fprintf(stderr, "Could not allocate memory for copy buffer\n");
}
fclose(file);
viClose(vi);
viClose(defaultRM);
return 0;
}
C# Create PDF from images Library to convert Jpeg, png images to
Batch convert PDF documents from multiple image formats, including Jpg, Png, Bmp, Gif, Tiff, Bitmap, .NET Graphics, and REImage.
convert pdf images to jpg; change pdf file to jpg
VB.NET PDF Convert to Images SDK: Convert PDF to png, gif images
Resize converted image files in VB.NET. Convert PDF to Jpg, Png, Bmp, Gif, Tiff and Bitmap in ASP.NET. Embed PDF to image converter in viewer.
best pdf to jpg converter online; changing file from pdf to jpg
Agilent Signal Generators Programming Guide
277
Creating and Downloading Waveform Files
Programming Examples
Importing, Byte Swapping, Interleaving, and Downloading I and Q Data—Big and Little Endian Order
On the documentation CD, this programming example’s name is “impDwnLd2_c++.txt.”
This C++ programming example (compiled using Microsoft Visual C++ 6.0) performs the following 
functions:
• error checking
• binary file importing (earlier E443xB or current model signal generators)
• byte swapping and interleaving for little endian order data
• data interleaving for big endian order data
• data scaling
• binary file download for earlier E443xB data or current signal generator formatted data
// This C++ program is an example of loading I and Q
// data into an E443xB, E4438C, E8267C, or E8267D signal 
// generator.
//
// It reads the I and Q data from a binary data file
// and then writes the data to the instrument.
// Include the standard headers for SICL programming
#include <sicl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// Choose a GPIB, LAN, or RS-232 connection
char* instOpenString =”gpib0,19”;  
// Pick some maximum number of samples, based on the
// amount of memory in your computer and your waveforms.
const int MAXSAMPLES=50000;   
int main(int argc, char* argv[])
{
// These are the I and Q input files.
// Some compilers will allow ‘/’ in the directory
// names.  Older compilers might need ‘\\’ in the
// directory names.  It depends on your operating system
// and compiler.
char *ifile = “c:\\SignalGenerator\\data\\BurstA1I.bin”;
char *qfile = “c:\\SignalGenerator\\data\\BurstA1Q.bin”;
VB.NET PDF - Convert PDF with VB.NET WPF PDF Viewer
Jpeg, VB.NET compress PDF, VB.NET print PDF, VB.NET merge PDF files, VB.NET view PDF online, VB.NET Convert PDF to image formats, such as PNG, JPG, BMP and
convert pdf image to jpg online; .pdf to jpg
VB.NET Create PDF from images Library to convert Jpeg, png images
Components to batch convert PDF documents in Visual Basic .NET class. Support create PDF from multiple image formats in VB.NET, including Jpg, Png, Bmp, Gif
convert .pdf to .jpg; changing pdf to jpg file
278
Agilent Signal Generators Programming Guide
Creating and Downloading Waveform Files
Programming Examples
// This is a text file to which we will write the
// I and Q data just for debugging purposes.  It is 
// a good programming practice to check your data 
// in this way before attempting to write it to 
// the instrument.
char *ofile = “c:\\SignalGenerator\\data\\iq.txt”;
// Create arrays to hold the I and Q data
int idata[MAXSAMPLES];
int qdata[MAXSAMPLES];
// Often we must modify, scale, or offset the data
// before loading it into the instrument.  These
// buffers are used for that purpose.  Since each
// sample is 16 bits, and a character only holds
// 8 bits, we must make these arrays twice as long
// as the I and Q data arrays.
char ibuffer[MAXSAMPLES*2];
char qbuffer[MAXSAMPLES*2];
// For the E4438C or E8267C/67D, we might also need to interleave
// the I and Q data.  This buffer is used for that
// purpose.  In this case, this buffer must hold
// both I and Q data so it needs to be four times
// as big as the data arrays.
char iqbuffer[MAXSAMPLES*4];
// Declare variables which will be used later
bool done;
FILE *infile;
int index, numsamples, i1, i2, ivalue;
// In this example, we’ll assume the data files have 
// the I and Q data in binary form as unsigned 16 bit integers.
// This next block reads those binary files.  If your
// data is in some other format, then replace this block
// with appropriate code for reading your format.
// First read I values
done = false;
index = 0;
infile = fopen(ifile, “rb”);
if (infile==NULL) perror (“Error opening file to read”);
Agilent Signal Generators Programming Guide
279
Creating and Downloading Waveform Files
Programming Examples
while(!done)
{
i1 = fgetc(infile);  // read the first byte
if(i1==EOF) break;
i2 = fgetc(infile);  // read the next byte
if(i2==EOF) break;
ivalue=i1+i2*256;    // put the two bytes together
// note that the above format is for a little endian
// processor such as Intel.  Reverse the order for
// a big endian processor such as Motorola, HP, or Sun
idata[index++]=ivalue;
if(index==MAXSAMPLES) break;
}
fclose(infile);
// Then read Q values
index = 0;
infile = fopen(qfile, “rb”);
if (infile==NULL) perror (“Error opening file to read”);
while(!done)
{
i1 = fgetc(infile);  // read the first byte
if(i1==EOF) break;
i2 = fgetc(infile);  // read the next byte
if(i2==EOF) break;
ivalue=i1+i2*256;    // put the two bytes together
// note that the above format is for a little endian
// processor such as Intel.  Reverse the order for
// a big endian processor such as Motorola, HP, or Sun
qdata[index++]=ivalue;
if(index==MAXSAMPLES) break;
}
fclose(infile);
// Remember the number of samples which were read from the file.
numsamples = index;
// Print the I and Q values to a text file.  If you are
// having trouble, look in the file and see if your I and
// Q data looks correct.  Plot the data from this file if 
// that helps you to diagnose the problem.
FILE *outfile = fopen(ofile, “w”);
280
Agilent Signal Generators Programming Guide
Creating and Downloading Waveform Files
Programming Examples
if (outfile==NULL) perror (“Error opening file to write”);
for(index=0; index<numsamples; index++)
{
fprintf(outfile, “%d, %d\n”, idata[index], qdata[index]);
}
fclose(outfile);
// The E443xB, E4438C, E8267C or E8267D all use big-endian
// processors.  If your software is running on a little-endian
// processor such as Intel, then you will need to swap the
// bytes in the data before sending it to the signal generator.
// The arrays ibuffer and qbuffer are used to hold the data
// after any byte swapping, shifting or scaling.
// In this example, we’ll assume that the data is in the format
// of the E443xB without markers.  In other words, the data
// is in the range 0-16383.
//  0 gives negative full-scale output
//  8192 gives 0 V output
//  16383 gives positive full-scale output
// If this is not the scaling of your data, then you will need
// to scale your data appropriately in the next two blocks.
// ibuffer and qbuffer will hold the data in the E443xB format.
// No scaling is needed, however we need to swap the byte order
// on a little endian computer.  Remove the byte swapping
// if you are using a big endian computer.
for(index=0; index<numsamples; index++)
{
int ivalue = idata[index];
int qvalue = qdata[index];
ibuffer[index*2]   = (ivalue >> 8) & 0xFF; // high byte of i
ibuffer[index*2+1] = ivalue & 0xFF;        // low byte of i
qbuffer[index*2]   = (qvalue >> 8) & 0xFF; // high byte of q
qbuffer[index*2+1] = qvalue & 0xFF;        // low byte of q
}
// iqbuffer will hold the data in the E4438C, E8267C, E8267D
// format.  In this format, the I and Q data is interleaved.
// The data is in the range -32768 to 32767.
//   -32768 gives negative full-scale output
Agilent Signal Generators Programming Guide
281
Creating and Downloading Waveform Files
Programming Examples
//        0 gives 0 V output
//    32767 gives positive full-scale output
// From these ranges, it appears you should offset the
// data by 8192 and scale it by 4.  However, due to the
// interpolators in these products, it is better to scale
// the data by a number less than four.  Commonly a good
// choice is 70% of 4 which is 2.8.
// By default, the signal generator scales data to 70%
// If you scale the data here, you may want to change the 
// signal generator scaling to 100%
// Also we need to swap the byte order on a little endian 
// computer.  This code also works for big endian order data 
// since it swaps bytes based on the order. 
for(index=0; index<numsamples; index++)
{
int iscaled = 2.8*(idata[index]-8192); // shift and scale
int qscaled = 2.8*(qdata[index]-8192); // shift and scale
iqbuffer[index*4]   = (iscaled >> 8) & 0xFF; // high byte of i
iqbuffer[index*4+1] = iscaled & 0xFF;        // low byte of i    
iqbuffer[index*4+2] = (qscaled >> 8) & 0xFF; // high byte of q
iqbuffer[index*4+3] = qscaled & 0xFF;  // low byte of q
}
// Open a connection to write to the instrument
INST id=iopen(instOpenString);
if (!id)
{
fprintf(stderr, “iopen failed (%s)\n”, instOpenString);
return -1;
}
// Declare variables which will be used later
int bytesToSend;
char s[20];
char cmd[200];
// The E4438C, E8267C and E8267D accept the E443xB format.
// so we can use this next section on any of these signal generators.
// However the E443xB format only uses 14 bits.
bytesToSend = numsamples*2;       // calculate the number of bytes
sprintf(s, “%d”, bytesToSend); // create a string s with that number of bytes    
282
Agilent Signal Generators Programming Guide
Creating and Downloading Waveform Files
Programming Examples
// The SCPI command has four parts.
//   Part 1 = :MEM:DATA “filename”,  
//   Part 2 = length of Part 3 when written to a string 
//   Part 3 = length of the data in bytes.  This is in s from above.
//   Part 4 = the buffer of data
// Build parts 1, 2, and 3 for the I data.
sprintf(cmd, “:MEM:DATA \”ARBI:FILE1\”, #%d%d”, strlen(s), bytesToSend);
// Send parts 1, 2, and 3
iwrite(id, cmd, strlen(cmd), 0, 0);
// Send part 4.  Be careful to use the correct command here.  In many 
// programming languages, there are two methods to send SCPI commands:
//   Method 1 = stop at the first ‘0’ in the data
//   Method 2 = send a fixed number of bytes, ignoring ‘0’ in the data.
// You must find and use the correct command for Method 2.
iwrite(id, ibuffer, bytesToSend, 0, 0);
// Send a terminating carriage return
iwrite(id, “\n”, 1, 1, 0);
// Identical to the section above, except for the Q data.
sprintf(cmd, “:MEM:DATA \”ARBQ:FILE1\”, #%d%d”, strlen(s),bytesToSend); 
iwrite(id, cmd, strlen(cmd), 0, 0);
iwrite(id, qbuffer, bytesToSend, 0, 0);
iwrite(id, “\n”, 1, 1, 0);
printf(“Loaded FILE1 using the E443xB format\n”);
// The E4438C, E8267C and E8267D have a newer faster format which
// allows 16 bits to be used.  However this format is not accepted in 
// the E443xB.  Therefore do not use this next section for the E443xB.
printf(“Note: Loading FILE2 on a E443xB will cause \”ERROR: 208, I/O error\”\n”);
// Identical to the I and Q sections above except
//   a) The I and Q data are interleaved
//   b) The buffer of I+Q is twice as long as the I buffer was.
//   c) The SCPI command uses WFM1 instead of ARBI and ARBQ.
bytesToSend = numsamples*4;
sprintf(s, “%d”, bytesToSend);
sprintf(cmd, “:mem:data \”WFM1:FILE2\”, #%d%d”, strlen(s),bytesToSend); 
iwrite(id, cmd, strlen(cmd), 0, 0);
Documents you may be interested
Documents you may be interested