DS1000Z Deep Memory Data Collection Example

Posted on: December 16th, 2020 by Doug Lovell

DS1000Z Deep Memory Data Collection Example

    Utilizing the deep memory capture capabilities of Rigol scopes is a great benefit in many applications. Engineers often need to view and analyze details that are separated in time and frequency from triggerable events. This requires a combination of sampling speed and memory to correctly oversample the displayed signal so that after the capture detail can be seen before or after the trigger event as well as at potentially much higher speeds than the trigger event itself. 
    All Rigol UltraVision oscilloscopes work similarly but have slightly different combinations of sampling and memory depth. UltraVision scopes include the 1000Z Series, 2000A Series, 4000 Series, and 6000 Series. All except for the 6000 Series have both DS and MSO families. All of these scopes can utilize deep memory capture. This example involves capturing deep memory data over the bus (USB, LXI, or GPIB) for offline analysis or storage. Capturing up to 140 million points of data can be time consuming so this examples outlines the best practices for gathering data. In this example, we will use a DS1000Z oscilloscope. The technique is roughly analogous on all the UltraVision scopes.
    To follow along or conduct this test you will need a 1000Z series oscilloscope, a USB cable, a PC with our UltraSigma software installed, and a test signal and probe to use for verification.

Preset and collect 

1) Configure trigger type, data depth, horizontal, and vertical scales. If you have issues go back to DEFAULT settings in the STORAGE menu before setting up your signal. You can also use the AUTO button to find your signal.
Once your signal is set up as you like with appropriate deep memory you are ready to begin.

After capturing a waveform (perhaps using Single Trigger “:SING”), you can then collect data in chunks using these instructions. 
Note: Single trigger will ensure that you capture on set of traces for a triggered event 

2) For simplicity, set format as ASCII (“:WAV:FORM ASC”) 

 3 ) Acquire data 

4) After scope has stopped acquiring data (Stop/Start = Red or send :STOP), then you can begin collecting the data over the bus

5) Configure data type to raw (Send “:WAV:MODE RAW”) 

6) Select Channel (“:WAV:SOUR CHAN1”, as an example) 

7) Select starting point for data retrieval (“:WAV:STAR 1”, as an example) 

8) Select stopping point for data retrieval (“:WAV:STOP 10000”, as an example) 

NOTE: 10K point chunks are recommended for ASCII, based on standard sizes. Smaller sample sets may be easier to parse.

9) Check status by looping this command until response is IDLE (“:WAV:STAT?”) or wait until the light is red.

10) Retrieve Data (“:WAV:DATA?”) 

11) Loop through steps 7-10 using different start and stop values until all of the data you want is retrieved. 

Alternatively, for getting larger chunks of data replace step 2 with: set format as BYTE (“:WAV:FORM BYTE”) 

Then you can use UltraSigma to collect chunks of data that are much larger. E.G., it takes about 20 seconds to pull 1 Million points across the bus in binary format, whereas it takes about 20 seconds to get 100,000 points in ASCII format.

The graphics below show how to send and test these commands in UltraSigma.

Opening SCPI CONTROL PANEL in UltraSigma:


-> *RST
-> *IDN?
<- (Return Count:55)
RIGOL TECHNOLOGIES,DS1104Z,DS1ZB160200113,00.04.02.SP4

-> :SING
-> :STOP
-> :WAV:STAR 1
-> :WAV:STOP 10000
<- (Return Count:134586)

Using UltraSigma to graph deep memory ASCII Data:

Using UltraSigma to graph deep memory BYTE Data:

Viewing the Graph in UltraSigma. This graph shows 25000 points pulled across as BYTE Values:

On the DS1000Z, you also need to request the wave preamble data.

The command is :WAV:PRE?

The return looks like:


The format for this response is:


<format>: 0 (BYTE), 1 (WORD) or 2 (ASC).

<type>: 0 (NORMal), 1 (MAXimum) or 2 (RAW).

<points>: an integer between 1 and 12000000. After the memory depth option is
installed, <points> is an integer between 1 and 24000000.

<count>: the number of averages in the average sample mode and 1 in other modes.

<xincrement>: the time difference between two neighboring points in the X direction.

<xorigin>: the start time of the waveform data in the X direction.

<xreference>: the reference time of the data point in the X direction.

<yincrement>: the waveform increment in the Y direction.

<yorigin>: the vertical offset relative to the “Vertical Reference Position” in the Y

<yreference>: the vertical reference position in the Y direction.


To convert the BYTE return data to voltage you must use:

<yincrement>, <yorigin>, and <yreference> from the preamble once the scope is in STOP mode.

On the 1000Z series oscilloscopes these values for the deep memory differ from the “:CHAN1:SCALE?” and “:CHAN1:OFFS?” values requested earlier.

The formula is:

Volts = ( <BYTE Value> – <yreference> – <yorigin> ) * <yincrement>