Skip to content

Stream Plot Example

Import continuous data into MATLAB using TDTbin2mat
Plot a single channel of data with various filtering schemes
Good for first-pass visualization of streamed data

Download M File

Housekeeping

Clear workspace and close existing figures. Add SDK directories to MATLAB path.

close all; clear all; clc;
[MAINEXAMPLEPATH,name,ext] = fileparts(cd); % \TDTMatlabSDK\Examples
DATAPATH = fullfile(MAINEXAMPLEPATH, 'ExampleData'); % \TDTMatlabSDK\Examples\ExampleData
[SDKPATH,name,ext] = fileparts(MAINEXAMPLEPATH); % \TDTMatlabSDK
addpath(genpath(SDKPATH));

Importing the Data

This example assumes you downloaded our example data sets and extracted it into the \TDTMatlabSDK\Examples directory. To import your own data, replace 'BLOCKPATH' with the path to your own data block.

In Synapse, you can find the block path in the database. Go to Menu → History. Find your block, then Right-Click → Copy path to clipboard.

BLOCKPATH = fullfile(DATAPATH,'Algernon-180308-130351');

Now read channel 1 from all stream data into a MATLAB structure called 'data'.

data = TDTbin2mat(BLOCKPATH, 'TYPE', {'streams', 'epocs'}, 'CHANNEL', 1);
read from t=0.00s to t=61.23s

And that's it! Your data is now in MATLAB. The rest of the code is a simple plotting example.

Stream Store Plotting

Let's create time vectors for each stream store for plotting in time.

time_Wav1 = (1:length(data.streams.Wav1.data))/data.streams.Wav1.fs;
time_LFP1 = (1:length(data.streams.LFP1.data))/data.streams.LFP1.fs;
time_pNe1 = (1:length(data.streams.pNe1.data))/data.streams.pNe1.fs;

ax1 = subplot(3,1,1);
plot(time_Wav1, data.streams.Wav1.data(1,:)*1e6,'b');
axis tight;
title({'Basic Data Plotting: Ch 1','Raw Waveform'},'FontSize',14)
xlim([25 30]);

ax2 = subplot(3,1,2);
plot(time_LFP1, data.streams.LFP1.data(1,:)*1e6,'r');
title('LFP Waveform','FontSize',14);

ax3 = subplot(3,1,3);
plot(time_pNe1, data.streams.pNe1.data(1,:),'k');
title('Plot Decimated Spikes','FontSize',14);

ax = [ax1, ax2, ax3];
axis([ax1 ax2], 'tight')
linkaxes(ax, 'x')
xlim(ax(end), [25 30]);
xlabel(ax(end), 'Time (s)','FontSize',12)
ylabel(ax(2), 'Amplitude (\muV)','FontSize',12);

% Enlarge figure.
set(gcf, 'Units', 'centimeters', 'OuterPosition', [10, 10, 20, 20]);

Epoc Events

Generate continuous time series for epoc data using epoc timestamps

% StimSync epoc event
STIMSYNC = 'PC0_';
pc0_on = data.epocs.(STIMSYNC).onset;
pc0_off = data.epocs.(STIMSYNC).offset;
pc0_x = reshape(kron([pc0_on, pc0_off], [1, 1])', [], 1);

Make a time series waveform of epoc values and plot them.

sz = length(pc0_on);
d = data.epocs.(STIMSYNC).data';
pc0_y = reshape([zeros(1, sz); d; d; zeros(1, sz)], 1, []);
hold on; plot(pc0_x, 200*(pc0_y) - 800, 'g', 'LineWidth', 2);