API streaming and stream_to_file | MATLAB
-
Moku:Go
Moku:Go Arbitrary Waveform Generator Moku:Go Data Logger Moku:Go Frequency Response Analyzer Moku:Go Logic Analyzer & Pattern Generator Moku:Go Oscilloscope & Voltmeter Moku:Go PID Controller Moku:Go Spectrum Analyzer Moku:Go Waveform Generator Moku:Go Power Supplies Moku:Go Digital Filter Box Moku:Go FIR Filter Builder Moku:Go Lock-in Amplifier Moku:Go General Moku:Go Logic Analyzer/Pattern Generator Moku:Go Time & Frequency Analyzer Moku:Go Laser Lock Box Moku:Go Phasemeter
-
Moku:Lab
Moku:Lab General Moku:Lab Arbitrary Waveform Generator Moku:Lab Data Logger Moku:Lab Digital Filter Box Moku:Lab FIR Filter Builder Moku:Lab Frequency Response Analyzer Moku:Lab Laser Lock Box Moku:Lab Lock-in Amplifier Moku:Lab Oscilloscope Moku:Lab Phasemeter Moku:Lab PID Controller Moku:Lab Spectrum Analyzer Moku:Lab Waveform Generator Moku:Lab Time & Frequency Analyzer Moku:Lab Logic Analyzer/Pattern Generator
-
Moku:Pro
Moku:Pro Arbitrary Waveform Generator Moku:Pro Data Logger Moku:Pro Frequency Response Analyzer Moku:Pro Oscilloscope Moku:Pro PID Controller Moku:Pro Spectrum Analyzer Moku:Pro Waveform Generator Moku:Pro Lock-in Amplifier Moku:Pro Digital Filter Box Moku:Pro FIR Filter Builder Moku:Pro Phasemeter Moku:Pro Multi-instrument Mode Moku:Pro General Moku:Pro Logic Analyzer/Pattern Generator Moku:Pro Time & Frequency Analyzer
- Python API
- MATLAB API
- Arbitrary Waveform Generator
- Data Logger
- Digital Filter Box
- FIR Filter Builder
- Frequency Response Analyzer
- Laser Lock Box
- Lock-in Amplifier
- Oscilloscope
- Phasemeter
- PID Controller
- Spectrum Analyzer
- Time & Frequency Analyzer
- Waveform Generator
- Logic Analyzer & Pattern Generator
- Multi Instrument Mode
- Moku Cloud Compile
- Moku general
- LabVIEW
Streaming options
stream_to_file method
This is useful for when you want to log data but you don't want to convert it externally using mokucli, see API download log file and convert | MATLAB for this use case. This converts the file as it is being downloaded and will be ready to analyze once the streaming session is complete.
% moku example: Datalogger Stream to File
% (c) 2025 Liquid Instruments Pty. Ltd.
% Connect to your Moku
i = MokuDatalogger('192.168.###.###', 'force_connect', false);
try
% Set-up the Datalogger
i.set_acquisition_mode('mode','Precision');
i.set_samplerate(1e3);
i.generate_waveform(1, 'Sine', 'amplitude',1, 'frequency',10e3);
% Start a streaming session and stream to a file, include the file type in the
% file name; csv, hdf5, npy, or mat
i.start_streaming('duration', 10);
now = datetime('now', 'Format','yyyyMMdd_HHmmSS');
file_name = 'DataStreamingData_' + string(now) + '.mat';
i.stream_to_file(file_name);
fprintf('Streaming to file: %s\n', file_name);
status = i.get_stream_status();
fprintf('Status: %s\n', status.status);
% Track progress percentage of the data streaming session
while strcmp(status.status, 'RUNNING')
pause(0.5);
status = i.get_stream_status();
end
% Wait for the file to become accessible
pause(5);
channels = 2;
fprintf('%s\n', file_name);
catch ME
i.relinquish_ownership();
rethrow(ME);
end
% Close the connection to the Moku device
i.relinquish_ownership();
% Check for the file, then open the file and create data struct
if ~isfile(file_name)
error('Streaming failed, no file received');
end
data = struct('time', [], 'ch1', []);
file = load(file_name);
data.time = file.moku.data(:, 1);
for i = 1:channels
data.(['ch', num2str(i)]) = file.moku.data(:, i+1);
end
% Display the streamed data
keys = fieldnames(data);
for k = 1:numel(keys)
key = keys{k};
disp([key, ': ', mat2str(data.(key)(1:3)), ' ... [', num2str(data.(key)(end)), ']']);
end
% Plot the streamed data
fig = figure('Position', [100, 100, 1000, 300]);
hold on;
for i = 1:channels
plot(data.time, data.(['ch', num2str(i)]), 'DisplayName', ['Channel ', num2str(i)]);
end
title('Streamed to File Data');
grid on;
xlabel('Time (s)');
ylabel('Voltage (V)');
legend show;
hold off;
The output will look similar to:
Streaming to file: DataStreamingData_20250117_103569.mat
Status: RUNNING
DataStreamingData_20250117_103569.mat
time: [0;0.001;0.002] ... [9.999]
ch1: [0.00191093314060709;0.0016939521851782;0.00161954084887839] ... [0.0017355]
ch2: [0.014444866169697;0.01442298048255;0.0143560728104148] ... [0.014131]
For streaming to other file types:
file_name = 'DataStreamingData_' + string(now) + '.npy';
i.stream_to_file(file_name);
file_name = 'DataStreamingData_' + string(now) + '.hdf5';
i.stream_to_file(file_name);
file_name = 'DataStreamingData_' + string(now) + '.csv';
i.stream_to_file(file_name);
streaming method
This method is useful for when you want to analyze the data in real-time rather than waiting for the streaming session to complete.
% moku example: Datalogger Streaming
% (c) 2025 Liquid Instruments Pty. Ltd.
i = MokuDatalogger('192.168.###.###', 'force_connect', false);
try
% Set-up the Datalogger
i.set_acquisition_mode('mode','Precision');
i.set_samplerate(100);
i.generate_waveform(1, 'Sine', 'amplitude',1, 'frequency',10e3);
% Stream the data for 10 seconds
i.start_streaming('duration', 10);
% Plot the streamed data
fig = figure('Position', [100, 100, 1000, 300]);
hold on;
grid on;
ylim([0, 0.016]);
title('Streamed Data');
xlabel('Time (s)');
ylabel('Voltage (V)');
data = i.get_stream_data();
lh1 = plot(data.time, data.ch1, 'DisplayName', 'Channel 1');
lh2 = plot(data.time, data.ch2, 'DisplayName', 'Channel 2');
legend show;
while 1
data = i.get_stream_data();
if ~isempty(data) & ~isempty(data.time)
set(lh1,'XData',data.time,'YData',data.ch1);
set(lh2,'XData',data.time,'YData',data.ch2);
xlim([data.time(1), data.time(end)]);
pause(0.1)
end
end
catch ME
i.relinquish_ownership();
rethrow(ME);
end
% Close the connection to the Moku device
i.relinquish_ownership();