NI Acquisition, generation and visualization#
[1]:
import os
import sys
sys.path.insert(0, os.path.realpath('../'))
[2]:
import LDAQ
import numpy as np
[3]:
# Create input and output tasks:
# NI 9234
task_in = LDAQ.national_instruments.NITask("TestInputTask_2", sample_rate=25600)
task_in.add_channel(channel_name="V0", device_ind=2, channel_ind=0, sensitivity=None, sensitivity_units=None, units="V", scale=1., min_val=-4, max_val=4.0)
task_in.add_channel(channel_name="V1", device_ind=2, channel_ind=1, sensitivity=None, sensitivity_units=None, units="V", scale=1., min_val=-4, max_val=4.0)
# NI 9260
task_out = LDAQ.national_instruments.NITaskOutput("TestOutputTask_2", sample_rate=25600)
task_out.add_channel(channel_name="V0_out", device_ind=1, channel_ind=0, min_val=-4, max_val=4)
task_out.add_channel(channel_name="V2_out", device_ind=1, channel_ind=1, min_val=-4, max_val=4)
[4]:
task_in
[4]:
Task name: TestInputTask_2
Connected devices:
(0) - cDAQ4
(1) - cDAQ4Mod1
(2) - cDAQ4Mod2
(3) - VirtualDevice
(4) - VirtualDevice2
Channels: ['V0', 'V1']
[5]:
#create signal:
fs = 25600 # output sample rate
mp = 10
t = np.arange(fs * mp) / fs
signal1 = np.sin(2*np.pi*800*t)
signal2 = np.sin(2*np.pi*450*t)
excitation_signal = np.array([signal1, signal2]).T # exitation signal that generation class will use
[6]:
# create instances:
gen = LDAQ.national_instruments.NIGeneration(task_out, excitation_signal)
gen.add_delay(2.0) # generation will start 2 seconds after run() is called on the Core instance
acq = LDAQ.national_instruments.NIAcquisition(task_in, acquisition_name="NI")
vis = LDAQ.Visualization(refresh_rate=100)
# configure live visualization:
vis.add_lines((0,0), "NI", [0]) # Time signal V0
vis.add_lines((1,0), "NI", [1]) # Time signal V1
vis.add_lines((2,0), "NI", [0], function="fft", refresh_rate=3000) # Fourier transform of V0
vis.add_lines((3,0), "NI", [1], function="fft", refresh_rate=3000) # Fourier transform of V1
vis.config_subplot((0, 0), t_span=0.05, ylim=(-10, 10))
vis.config_subplot((1, 0), t_span=0.05, ylim=(-10, 10))
vis.config_subplot((2, 0), t_span=5.0, ylim=(0, 1.2), xlim=(200, 1000))
vis.config_subplot((3, 0), t_span=5.0, ylim=(0, 1.2), xlim=(200, 1000))
# create core object and add acquisition sources:
ldaq = LDAQ.Core(acquisitions=[acq], generations=[gen], visualization=vis)
# run acquisition:
ldaq.run(10.)
[7]:
# Retrieve the measurement data:
measurement = ldaq.get_measurement_dict()
measurement["NI"]
[7]:
{'time': array([56.40003906, 56.40007813, 56.40011719, ..., 59.99988281,
59.99992187, 59.99996094]),
'channel_names': ['V0', 'V1'],
'data': array([[-5.03444934e-01, -9.94202753e-01],
[-6.62328816e-01, -9.77152079e-01],
[-7.95702724e-01, -9.48246068e-01],
...,
[ 3.82937440e-01, -9.13326268e-01],
[ 1.95559480e-01, -9.52440940e-01],
[ 6.84911256e-04, -9.80014218e-01]]),
'sample_rate': 25600}