Main Content

Get Started Reading a TDMS-File

This example shows how to read data from a TDMS-file into MATLAB® for analysis.

The example TDMS-file contains measurement data of a sine wave amplitude and phase. The measurements are in two channels, in the same channel group.

Inspect the TDMS-File Contents

Use the tdmsinfo function to obtain channel group and channel names in the TDMS-file.

fileName = "SineWave.tdms";
info = tdmsinfo(fileName);
info.ChannelList
ans=2×8 table
    ChannelGroupNumber    ChannelGroupName    ChannelGroupDescription       ChannelName       ChannelDescription    Unit    DataType    NumSamples
    __________________    ________________    _______________________    _________________    __________________    ____    ________    __________

            1             "Measured Data"               ""               "Amplitude sweep"            ""             ""     "Double"       3500   
            1             "Measured Data"               ""               "Phase sweep"                ""             ""     "Double"       3500   

Read Data Properties from the TDMS-File

Use the tdmsreadprop function to view data properties from the file.

tdmsreadprop(fileName)
ans=1×7 table
       name       description              datetime               author                title                datestring     timestring
    __________    ___________    _____________________________    _______    ___________________________    ____________    __________

    "SineWave"        ""         2022-01-12 23:33:31.000000000    "Admin"    "Amplitude And Phase Sweep"    "01/13/2022"    "10:03:31"

Specify a ChannelGroupName and ChannelName arguments to view properties of a specific channel.

group = "Measured Data";
channel = "Amplitude sweep";
tdmsreadprop(fileName, ChannelGroupName=group, ChannelName=channel)
ans=1×19 table
          name           description    unit_string     datatype      displaytype        monotony        NI_ChannelName    NI_ExpIsRelativeTime        NI_ExpStartTimeStamp                NI_ExpTimeStamp           NI_ExpXDimension       novaluekey       wf_increment    wf_samples    wf_start_offset            wf_start_time            wf_time_pref    wf_xname    wf_xunit_string
    _________________    ___________    ___________    ___________    ___________    ________________    ______________    ____________________    _____________________________    _____________________________    ________________    ________________    ____________    __________    _______________    _____________________________    ____________    ________    _______________

    "Amplitude sweep"        ""             ""         "DT_DOUBLE"     "Numeric"     "not calculated"        "Sine"                 1              2022-01-12 22:08:35.674852848    2022-01-12 22:08:35.674852848          "t"           "not calculated"       0.001           3500              0           1903-12-31 19:00:00.000000000     "relative"      "Time"           "s"      

Read Timetable Data from the TDMS-File into MATLAB

To read data into a timetable, derive the start time and time step, typically contained in the channel properties.

timeStep = tdmsreadprop(fileName, ChannelGroupName=group, ChannelName=channel, PropertyNames="wf_increment")
timeStep=table
    wf_increment
    ____________

       0.001    

startTime = tdmsreadprop(fileName, ChannelGroupName=group, ChannelName=channel, PropertyNames="wf_start_time")
startTime=table
            wf_start_time        
    _____________________________

    1903-12-31 19:00:00.000000000

Using the start time and time step as arguments to the tdmsread function, read the data into MATLAB as a cell array of timetables. View some of the data from first channel group.

data = tdmsread(fileName, StartTime=startTime.wf_start_time, TimeStep=seconds(timeStep.wf_increment));
ttData = data{1};
head(ttData)
ans=8×2 timetable
                Time                 Amplitude sweep    Phase sweep
    _____________________________    _______________    ___________

    1903-12-31 19:00:00.000000000           0                   0  
    1903-12-31 19:00:00.001000000           0            0.063418  
    1903-12-31 19:00:00.002000000           0             0.12658  
    1903-12-31 19:00:00.003000000           0             0.18923  
    1903-12-31 19:00:00.004000000           0             0.25112  
    1903-12-31 19:00:00.005000000           0               0.312  
    1903-12-31 19:00:00.006000000           0             0.37163  
    1903-12-31 19:00:00.007000000           0             0.42975  

Use a stacked plot to visualize the relationship between the data of different channels.

stackedplot(ttData);