This mode captures a single block of IQ data. I/Q data is first stored to high speed DDR2 SDRAM buffer memory and then it can be saved to flash memory or sent to a remote user via Ethernet. The capture length (duration) is limited by the size of the buffer memory (256 Mbytes) and I/Q data rate, which is determined by the capture bandwidth.
The IQ capture bandwidth must be set to one of the available values listed in the table below. For each selectable bandwidth, the output data rate for a single I/Q data pair is listed in Table: IQ Capture Bandwidth Values. The output data rate does not change, regardless of bit resolution.
IQ Capture Bandwidth Values
I/Q Bandwidth
Output Data Rate MSPS
IQ Sample Pairs/Sec
20 MHz
76.25 / 3
25416666.67
13.3 MHz
76.25 / 4
19062500
6.67 MHz
76.25 / 8
9531250
2.67 MHz
76.25 / 20
3812500
1.33 MHz
76.25 / 40
1906250
667 kHz
76.25 / 80
953125
267 kHz
76.25 / 200
381250
133 kHz
76.25 / 400
190625
66.7 kHz
76.25 / 800
95312.5
26.7 kHz
76.25 / 2000
38125
13.3 kHz
76.25 / 4000
19062.5
6.67 kHz
76.25 / 8000
9531.5
2.76 kHz
76.25 / 20000
3812.5
1.33 kHz
76.25 / 40000
1906.3
The maximum capture length is limited by memory, capture bandwidth and bit resolution. Table: Maximum I/Q Block Capture Length shows the maximum capture length.
1 For 20 MHz capture bandwidth, when IQ bit resolution is set to 32 bits, the lower 8 bits are zeros. Therefore the maximum effective bit resolution is 24 bits for 20 MHz bandwidth.
Raw Socket Connection
import socket
from time import sleep, time
class SocketConnection:
"""Provides a means to connect and send SCPI commands to the DUT using a raw TCP socket."""
def __init__(self, ipAddress):
"""
Initializes an instance of SocketConnection class
@param ipAddress The IP address of the device
"""
# split out port number if given
splitIpAddress = ipAddress.split(':')
assert len(splitIpAddress) > 0
assert len(splitIpAddress) <= 2
self._ipAddress = splitIpAddress[0]
#assign port
if len(splitIpAddress) == 2:
self._portNumber = int(splitIpAddress[1])
else:
self._portNumber = 9001
self._socketConnection = None
self._timeoutInSec = 120
self._socketReadSize = 4096
self.__nonBulkDataSizeCuttoff = 32768
# Time to let the other end of the connection close
self.__timeoutAfterCloseInSec = 1
self._terminatedBlockResponse = False
self.prefix = ''
self._verbose = False
self._establishConnection()
def __del__(self):
"""
This gets called by the garbage collector so it is possible that the connection will
remain open for a while before this gets collected.
SENS:FREQ:CENTER 100 MHz SENS:FREQ:SPAN 20 MHz SWEEP:MODE FFT //Set RBW 30 kHz BANDWIDTH 30 KHz //Set Reference Level to -30 dBm DISP:WIND:TRAC:Y:SCAL:RLEV -30 //Set to single sweep INIT:CONT OFF //abort any sweep in progress :ABORT
//Set Capture bandwidth. Not same as RBW. IQ:BANDWIDTH 20 MHz
//Set 16 bit resolution IQ:BITS 16
//Set to I/Q block capture mode IQ:MODE SINGLE //enable time stamp SENS:IQ:TIME 1
//Set capture length to 5 msec IQ:LENGTH 5 ms
//Start IQ Capture. Triggers single capture. Data is saved to DDR2 SDRAM memory. MEAS:IQ:CAPT
//Check if capture is completed normally STATus:OPERation?
//The STATus:OPERation? query responds with a integer. Convert this integer to binary. //Bit 9 is set to 1 when the MEAS:IQ:CAPT command is issued. //Bit 9 is set to 0 when the capture is completed normally in block mode.