1GSps high speed data acquisition card for applications such as fiber optic sensing systems or LIDAR systems.
The DAQ board, which can be set up to 1G sample rate and has built-in trigger output and input interfaces, can be used for applications such as DAS distributed acoustic sensing system with 200M AOM acquisition or LIDAR.
This is a PCIe x8 Lane, dual channel, 16bits respectively rate high speed data acquisition card with 1GSps sampling rate. high performance FPGA chip on board with rich multiplier and RAM resources. The driver has good compatibility and supports multiple versions of WIN7, WIN8, WIN10 in 32/64bits.
YB-DAS-1000-DAQ has a built-in IQ demodulation function for balanced detector DAS systems, supporting both single-channel and dual-channel IQ demodulation. The simultaneous upload rate can be configured as 1G, 500M, 250M, 125M, 83.33M, 62.5M, 50M and so on.
It supports three data upload modes: single-channel, dual-channel and four-channel. When using single-channel mode, the number of points per frame (the number of points collected by a single trigger pulse) can support a maximum of 262144 points, i.e., a single optical fiber length in 1G (0.1m spatial resolution) upload rate, a maximum of 262144 * 0.1m = 26.2144 kilometers; if the upload rate is reduced, a longer length of fiber can be supported. longer fiber lengths can be supported;
Input Channel | ||
---|---|---|
Number of input channels | 2 | |
Input Impedance | 50±1% | Ω |
Input Signal Range | 1.9Vp-p | |
Input coupling method | DC(Customizable AC coupling) | |
Resolution | 16 | bits |
Bandwidth(-3dB) | 0-250 (other bandwidths can be customized) | MHz |
Spurious-free dynamic range(SFDR) | -1dBFS Input/1GSps | |
fIN=100MHz | 86 | dBc |
fIN=170MHz | 88 | dBc |
Signal-to-noise ratio(SNR) | -1dBFS Input/1GSps | |
fIN=100MHz | 70.6 | dBFS |
fIN=170MHz | 71.5 | dBFS |
Average noise density | -142 | dBm/Hz |
Internal reference clock | ||
Frequency | 10 | MHz |
Stability | ±0.5(-20-60℃) | ppm |
Trigger output | ||
High level minimum voltage | 3 (50Ω load) | V |
Pulse width resolution | 4 | nS |
Minimum pulse width | 4 | nS |
Digital input/output | ||
Number of channels | 16 | |
Leveling standards | 3.3V LVTTL | |
Output drive capability | 8(MAX) | mA |
Signal Rate | 50(MAX) | Mbps |
On-Board Cache | 2 | GB(DDR3L) |
Temperature range
GY-DAS-1000-DAQ-X
Firmware version X | Description |
---|---|
V1 | Defualt。 Supports Winodws operating systems and discrete graphics cards, but not Linux operating systems |
V2 | Both Windows and Linux operating systems are supported, but not discrete graphics cards. |
The default is version V1, if you need to run on Linux operating system, then please choose version V2. But the V2 version does not does not support discrete graphics cards.
The DAQ board provides an API in the form of a dynamic link library (.dll file), which can be called in your favorite programming language (Python, C++, C#, Java or Libview, etc.).
int pcie7820_set_upload_data_param(unsigned int upload_ch_num,unsigned int upload_data_src,unsigned int upload_data_rate)
function description:
Set up the board upload data parameters. Digital downconversion has been done on the board to perform digital I/Q demodulation of the collected data. The upload_ch_num parameter and upload_data_src are used together to select where in the demodulation algorithm to read the data.
function parameter:
upload_ch_num :Set the number of channels to upload;
1 - upload one channel of data; 2 - upload two channels of data; 4 - upload four channels of data;
upload_data_src:Upload data source selection;
0 - upload raw acquisition data; 2 - upload IQ data; 3 - upload phase and magnitude data;
upload_data_rate:Sets the upload data rate;
1---1GSps;2---500MSps;4---250MSps;8---125MSps;12---83.333MSps;16---62.5MSps;20---50MSps;24---41.66MSps;28---35.714MSps;32---31.25MSps;
The data read by the pcie7820_read_data function should be parsed according to the following table:
编号 | upload_ch_num | upload_data_src | Uploaded data | Upload data parsing rules |
---|---|---|---|---|
1 | 1 | 0 | Raw data captured on channel 0 | ch0_raw_data--- ch0_raw_data --- ch0_raw_data --- ch0_raw_data--- |
2 | 1 | 2 | I data for channel 0 after low-pass filtering | I0---I0----I0---I0…… |
3 | 1 | 3 | Channel 0 demodulated phase data | arctan(Q0/I0)--- arctan(Q0/I0)--- arctan(Q0/I0)--- arctan(Q0/I0)--- |
4 | 2 | 0 | Raw data captured on channels 0 and 1 | ch0_raw_data--- ch1_raw_data --- ch0_raw_data --- ch1_raw_data…… |
5 | 2 | 2 | I and Q data of channel 0 after low-pass filtering | I0---Q0---I0----Q0…… |
6 | 2 | 3 | Channel 0 demodulated phase and amplitude data | arctan(Q0/I0)---√(I02+Q02)--- arctan(Q0/I0)---√(I02+Q02)… |
7 | 4 | 0 | unsupported | unsupported |
8 | 4 | 2 | I and Q data of channels 0 and 1 after low-pass filtering | I0---Q0---I1----Q1---I0---Q0---I1----Q1…… |
9 | 4 | 3 | Phase and amplitude data after demodulation of channels 0 and 1 | arctan(Q0/I0)---√(I02+Q02)--- arctan(Q1/I1)---√(I12+Q12)--- arctan(Q0/I0)---√(I02+Q02)--- arctan(Q1/I1)---√(I12+Q12)… |
ch0_raw_data---ch1_raw_data---I0---Q0---I1----Q1--- arctan(Q0/I0)--- arctan(Q1/I1),These 8 types of data need to be parsed as 16-bit signed data (short).;√(I02+Q02)---√(I12+Q12),These two types of data need to be parsed as 16-bit unsigned short numbers.
The arctan phase value read up is a fixed point number, and its correspondence with π is: 25735 - positive π, -25735 - negative π.
If you need more detailed interface documentation, please inquire.
# -*- coding: utf-8 -*-
from ctypes import *
import numpy as np
from time import sleep
import datetime
dll = cdll.LoadLibrary("./pcie7820_64bits_api.dll")
samples = 1024 #采样点数
flag = True
def open_card():
print('Open...')
dll.pcie7820_open() #open
def init_daq_card():
print('Configure card...')
dll.pcie7820_set_trig_dir(c_uint(1)) #Setting the trigger pulse input/output direction
dll.pcie7820_set_scan_rate(c_double(1000)) #Setting the trigger pulse output frequency 1kHz
dll.pcie7820_set_pusle_width(c_uint(100)) #Setting the high level width of the trigger pulse, 100ns
dll.pcie7820_set_upload_data_param(c_uint(1), c_uint(0), c_uint(1)) #Set number of channels to 1, raw data, 1GSps;
dll.pcie7820_set_points_num_per_scan(c_uint(samples)) #Setting the number of sampling points
dll.pcie7820_set_center_freq(c_uint(200000000)) #Setting the AOM
print("Config end")
def start():
flag = True
print('Start...')
dll.pcie7820_start()
def stop():
flag = True
print('Stop...')
dll.pcie7820_stop()
def close():
print('Close...')
dll.pcie7820_close() #先stop 再close
def read_data():
n_frames = 200
size = c_uint(0)
buf = (c_int16*samples*n_frames)()
flag = True
i=0
start_time = datetime.datetime.now()
while flag:
status_query = dll.pcie7820_point_num_per_ch_in_buf_query(byref(size))
print(f"query.. {size.value}, {status_query=}")
#print(size)
if size.value >=samples*n_frames:
print('Read data...')
status_read = dll.pcie7820_read_data(c_uint(samples*n_frames), buf, byref(size))
""" if size.value!=samples*100:
continue """
ndata = np.frombuffer(buf, dtype=np.int16)
# print(f"Data size: {np.size(ndata)}")
print(f"Start Time: {start_time}, Current Time: {datetime.datetime.now()} - Acquisition number {i}, {status_read=}")
#unwrap code ....
#flag = False
i = i + 1
if i >= 1000000:
flag = False
if status_read == -1:
break
else:
sleep(0.1) #wait...
def run():
open_card()
init_daq_card()
start()
read_data()
stop()
close()
if __name__ == '__main__':
run()