One of the most fundamental equations in optical communications is the nonlinear Schrödinger equation, which governs the propagation of optical signals in dispersive, nonlinear fibers. Unfortunately, in all but a few special cases, the nonlinear Schrödinger equation does not have analytic solutions, and must be solved numerically.

SSPROP is a general-purpose symmetrized split-step software routine that can be invoked directly from Matlab to solve the nonlinear Schrödinger equation. Unlike conventional Matlab scripts that are interpreted at runtime, SSPROP is a compiled program written in C that can be called directly from Matlab. It therefore retains the speed and efficiency of compiled program, while allowing access to the full range of Matlab graphing and vector manipulation routines. Benchmark tests show that the program is up to 10-20x faster than an equivalent Matlab m-file script that performs the same calculations.


  • Includes vector-version to simulate PMD, PDL, nonlinear polarization rotation, and other nonlinear polarization effects.
  • Uses FFTW 3.1.2 libraries
  • Approximately 10-20x faster than equivalent m-file script
  • Interfaces directly with Matlab
  • Available in double or single precision versions
  • Simulates all orders of dispersion
  • Optionally includes self-steepening and the delayed Raman response time
  • SSPROP is free (GPL License)
  • Source code is publicly available
  • Includes many worked examples from Agrawal’s Nonlinear Fiber Optics text


SSPROP is available for download either in precompiled binary format or as original C source files. The executable versions were compiled both on Windows and Linux (Intel) architectures, using Matlab version 7.0. All three distributions include example files and associated matlab tools and utilities.

Unfortunately, these are the only platforms for to which we had access when compiling the software. If you have compiled binaries for other platforms, please do not hesitate to contact us to let us know if any special steps were needed to compile.


SSPROP requires Matlab, version 6.5 or higher. (The program has not been tested with earlier versions of Matlab, but it may work.) If you wish to recompile the code you will also need the FFTW libraries and associated header files.  Some users have reported difficulty using the precompiled binary files on older versions of Windows and Matlab, or on older CPUs. Recompilation is recommended in these cases.

Simply unzip the compiled version and the accompanying m-files into a directory of your choice. You may wish to add this directory to your Matlab path to allow you to execute the program when you are working in other directories.

The accompanying m-files (sspropc.m, sspropvc,m) describes the calling syntax for the program. If you install this file along with the compiled version, then Matlab will provide you with a short description of the calling syntax when you type “help sspropc” or “help sspropvc”.

The zip file also includes a set of example programs as well as some useful utilities for measuring and defining optical waveforms.

The Windows and Linux compiled versions posted here are self-contained mex programs that do not require any run-time libraries (other than Matlab) to execute. All of the required FFTW routines are statically linked into the executable, and are completely independent of the FFTW libraries used internally by Matlab.



Precompiled binary versions of are provided for Windows and Linux platforms. If you would like to use SSPROP on a different platform, or with an older operating system, or a different version of Matlab, then you may need to recompile the mex file from the source.

To recompile SSPROP or to build an executable for another platform, you will need:

  1. the source files sspropc.c, sspropvc.c (provided here)
  2. compiled fftw libraries and the associated header file (fftw3.h)
  3. Matlab

The commands for recompiling the program are platform and compiler dependent and are not discussed here. If you succeed in recompiling on a different platform, please send me an email indicating your architecture, OS, compiler, and what steps you needed to take to make it work. I will try to incorporate your comments into a future README file to be distributed with the source files.

The windows binary version of the program and the associated FFTW libraries were compiled using gcc (MinGW). The source distribution includes a Makefile that was used to compile the programs using MinGW.The gnumex program was used to configure Matlab to use gcc/mingw when compiling the mex program. SSPROP can also be built to use precompiled dynamically linked library routines that can be downloaded from

The linux binary version and associated FFTW libraries were compiled using gcc.


  1. Matteo Frigo and Steven G. Johnson, “The Design and Implementation of FFTW3,” Proceedings of the IEEE 93 (2), 216–231 (2005). Invited paper, Special Issue on Program Generation, Optimization, and Platform Adaptation.
  2. G. P. Agrawal, Nonlinear Fiber Optics, 3rd ed., Elsevier Science & Technology Books, 2001. ISBN:0120451433
  3. NSLE Sofware from University of Rochester a standalone, graphical program for solving the nonlinear Schrödinger equation.
  4. Wikipedia page on the Split-step Method (still small).
  5. FFTW Home Page:
  6. MinGW Home Page:
  7. gnumex Home Page:
  8. Matlab Home Page:
    Mathworks also provides online documentation for the Matlab MEX interface
  9. C. R. Menyuk, “Pulse Propagation in an Elliptically Birefringent Kerr Medium”, IEEE J. Quantum Electron.25(12) 2674–2682, 1989.
  10. C. R. Menyuk, “Nonlinear Pulse Propagation in Birefringent Optical Fibers”, IEEE J. Quantum Electron.QE-23 (2) 174–176, 1987.


Several people have contributed to the development of SSPROP, including Ross Pleban (NCSU), Afrouz Azari (UMD), Reza Salem (UMD) and T. E. Murphy (UMD).


SSPROP is free software, released under the Gnu Public License (GPL). You should receive a copy of the Gnu Public License along with any distribution of SSPROP.

Disclaimer:  This software is freely provided as-is, and although the authors have tested it in many contexts we cannot guarantee its accuracy in all circumstances. Moreover, we unfortunately cannot provide any technical support or training beyond what is posted on this website. Please contact us if you find any bugs or inaccuracies, or if you have suggestions for improvements.