A serialization class for sending data from Swift to MATLAB
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
MatlabSerialization.xcodeproj
MatlabSerialization
MatlabSerializationTests
TCPIP_Test
MatlabSerialization.m
README.md

README.md

MatlabSerialization

A serialization class for sending data from Swift to MATLAB. MatlabSerialization is based on, is compatible with, and requires Christian Kothe’s Fast serialize / deserialize class

MatlabSerialization transforms Swift Foundation objects into a byte array for rapid data transfer into MATLAB via a tcp/ip socket. CoreML data type MLMultiArray is used to store matices. IMPORTANT: Swift is row-major while MATLAB is column-major so matrices will be transposed when imported.

Basic translations:

  • MLMultiArray -> Matrix
  • Dictionary<String:Any> -> 1x1 Struct
  • MatlabEncodableArray protocol -> 1xN Struct
  • Array<Any> -> 1xN Cell Array

Limitations:

Only 2D cell/struct arrays (no limitation for matrics) No complex numbers

Functionality will be added according to interest. Email suggestions to slmille4 at gmail dot com or submit a merge request.

Basic usage:

        let dict:[String:Any] = ["A":["a":[1.0,2.0,3.0],"b":["a","b","c"]],"B":["a":1.0,"b":2.0,"c":3.0]]
        let m = try!MatlabSerialization.data(withMatlabObject: dict)

        let task = URLSession.shared.streamTask(withHostName: "172.20.10.2", port: 54000)
        task.resume()
        task.write(m, timeout:10.0) { error in
            if error != nil {
                print(error!.localizedDescription)
                task.closeWrite()
            }
        }

Run MatlabSerialization.m in MATLAB to create the tcpip server which will receive the data. Requires the Instrument Control Toolbox.