DAQ Board Designed for distributed fiber optic acoustic sensing systems, the DAQ board features a high speed sampling rate of 250 MSps, dual channel and pulse-triggered outputs, and built-in IQ demodulation algorithms.
Data Acquisition Card for Distributed Acoustic Fiber Sensing (DAS) with Pulse Output sends TTL pulses directly to the AOM driver, eliminating the need for an additional pulse generator and greatly reducing system complexity.
The DAQ card has a 250MSps sampling rate suitable for DAS systems with 80M acousto-optic modulators (if your AOM is 200M, we recommend choosing our higher sampling rate version of the DAQ YB-DAS-1000-DAQ). The built-in IQ demodulation algorithm allows direct acquisition of amplitude data, which effectively reduces computational complexity.
This is a PCIe x8 Lane, dual channel, 14bits respectively rate high speed data acquisition card with 250MSps sampling rate. high performance FPGA chip on board with rich multiplier and RAM resources. The driver has good compatibility and supports several versions of Windows as well as CentOS and Ubuntu. Supports X86 and ARM platforms (tested on Nvidia Jetson AGX Orin Module).
Item | Value |
---|---|
Channel Number | 2 |
Sampling Rate | 250MSps |
Sampling Mode | 14bits dual-channel synchronized real-time sampling |
Coupling Method | DC-coupled |
Input Impedance | 50Ω |
Input Voltage Range | 2Vpp |
Bandwidth | 0-100MHz analog bandwidth |
Settable Bias | ±1V bias programmable to fully utilize ADC range |
SFDR | Up to 88dBc |
Trigger Output Pulse | Support |
PCIE | PCIe2.0 x8 high-speed transmission interface |
Demodulation Algorithm | Built-in fiber optic sensing demodulation algorithm |
Power Supply and Power Consumption
Temperature range
Mechanical Dimensions
Raw signal curve
Amplitude-phase signal
PZT single-frequency signal demodulation, restoring 500Hz sine excitation signals
The GY-DAQ-2480 features built-in IQ demodulation capabilities, designed for balanced detector-based DAS systems. It supports both single-channel and dual-channel IQ demodulation. When using the uploaded raw data or single-channel demodulation function, the maximum number of points per frame (sampling points per trigger pulse) reaches 130,048. At a spatial resolution of 0.4m under a 250-meter fiber sampling rate, this corresponds to a maximum sensing range of 130,048 × 0.4m = 52.019 kilometers. Data volume can be reduced by lowering the resolution.
We provide the API in the form of a dynamic link library (.dll file) that you can call in your favorite programming language (e.g. python, C++, java or libview). Here is a description of the 2 more important functions.
int DasCardSetDataSel(int sel)
The digital down-conversion function has already been done on the board, so that the collected data can be demodulated by digital I/Q. The sel parameter is used to select the corresponding data type in the read demodulation algorithm.
Raw and phase data are parsed as signed 16-bit data (short), while amplitude data are parsed as unsigned 16-bit data (unsigned short); phase data are fixed-point data, and need to be divided by 8192 to normalize to within ±π during demodulation.
# -*- coding: utf-8 -*-
import numpy as np
import time
from ctypes import *
import sys, win32api, os
def usleep(microseconds):
start_time = time.perf_counter_ns()
end_time = start_time+(microseconds * 1000) # 因为是纳秒,所以要乘以1000
while time.perf_counter_ns() < end_time:
pass
dll = cdll.LoadLibrary("DasCardLib.dll")
if __name__ == '__main__':
samples = 8192 #采样点数8192
seg_num = 100 #每次读取100段数据
pulse_frq = 10000 #脉冲频率10000
pulse_width = 100 #脉冲宽度100ns
data_sel = 1 #通道1幅度相位数据
pulse_num = 10 #写脉冲数目10
resolution = 1 #设置分辨率0.4m
ret = dll.DasCardOpen() #打开采集卡
print(ret, 'open card!')
ret = dll.DasCardSetResolution(c_int(resolution)) #设置采样分辨率
print(ret, 'DasCardSetResolution')
ret = dll.DasCardSetSampleNum(c_int(samples)) #设置采样点数
print(ret, 'DasCardSetSampleNum')
ret = dll.DasCardSetPulseFrq(c_int(pulse_frq)) #设置脉冲频率
print(ret, "DasCardSetPulseFrq!")
ret = dll.DasCardSetPulseWidth(c_int(pulse_width)) #设置脉冲宽度
print(ret, "DasCardSetPulseWidth!")
ret = dll.DasCardSetDataSel(c_int(data_sel)) #设置数据源
print(ret, "DasCardSetDataSel!")
ret = dll.DasCardSetPulseNum(c_int(pulse_num)) #设置写脉冲数目
print(ret, "DasCardSetPulseNum!")
ret = dll.DasCardSetTest(c_int(0)) #设置DAC数据
print(ret, "DasCardSetTest!")
ret = dll.DasCardStart() #开展采样
if(ret==-1):
print(ret,"card initialization failed!")
else:
print(ret,"card initialied successfull!")
buf = (c_int16*samples*seg_num*2)() #分配读取缓存,原始数据和单通道解调为c_int16*samples*seg_num*2,双通道解调为c_int16*samples*seg_num*4
count = 0
tlast = time.time()
try:
while(True):
size = dll.DasCardQueryFifo() #查询缓存数据量
if size >=samples*seg_num*4: #如果缓存数据够需要读取的数据量,读取缓存数据,否则继续查询
# print(size.value, 'cache')
ret = dll.DasCardReadFifo(buf, c_int(samples*seg_num*4)) #读取100个脉冲的缓存数据
if ret==False:
print(size, 'read error')
continue
else:
# 读取成功,处理数据
# 统计脉冲触发频率
count = count + 1
if count>=100:
tcurrent = time.time()
print("pulse_freq:",100*seg_num/(tcurrent-tlast))
tlast = tcurrent
count = 0
else:
usleep(10) #缓存数据不足,休眠10us
except KeyboardInterrupt:
print("exit")
dll.DasCardStop() #停止采集
dll.DasCardClose() #关闭采集卡
print("close")