Welcome to the NeuroAnalyzer website

This is the home of NeuroAnalyzer.jl documentation and tutorials.

NeuroAnalyzer is a Julia toolbox for analyzing neurophysiological data. Currently it covers importing, editing, processing, visualizing, and analyzing EEG, MEP and EDA data. Preliminary functionality is also available for MEG, NIRS, ECoG, SEEG and iEEG recordings.

Various methods for modeling non-invasive brain stimulation protocols (tDCS, tACS, tRNS, tPCS, TMS, TUS, INS) will also be implemented (NeuroStim submodule). Another submodule, NeuroTester, will allow designing and running psychological studies. Certain neurophysiological data can be recorded using NeuroRecorder submodule.

NeuroAnalyzer contains a set of separate (high- and low-level) functions. Some interactive graphical user interface (GUI) functions are also available. NeuroAnalyzer functions can be combined into an analysis pipeline, i.e. a Julia script containing all steps of your analysis. This, combined with processing power of Julia language and easiness of distributing calculations across computing cluster, will make NeuroAnalyzer particularly useful for processing large amounts of neurophysiological data.

NeuroAnalyzer is a collaborative, non-commercial project, developed for researchers in psychiatry, neurology and neuroscience.

NeuroAnalyzer repository is located at Codeberg AdamWysokinski/NeuroAnalyzer.jl and mirrored at Github JuliaHealth/Neuroanalyzer.jl.


What you can do with NeuroAnalyzer

  1. Load neurophysiological recordings:
  2. Edit:
  3. Process:
  4. Analyze:
  5. Plot:

All computations are performed using the double-precision 64-bit floating point format. NeuroAnalyzer data is stored using standard Julia Array and can be easily exported as DataFrame. Thus, external processing of those data using Julia packages is readily available.

NeuroAnalyzer also includes NeuroRecorder, a set of functions for recording various neurophysiological signals:

NeuroTester modules implements various neuropsychological tests:


Why Julia?

There are many excellent MATLAB and Python based EEG/MEG/NIRS software (e.g. EEGLAB, Fieldtrip, Brainstorm, MNE). They have been developed for many years and are well established in the scientific community. Many state-of-the-art papers were published using data prepared using these programs.

However, compared with Python and MATLAB, there are many advantages of Julia, which underlie my decision to start developing such a toolbox in Julia.

I believe that Julia is the future of scientific computing and scientific data analysis. Major advantages of Julia are listed in Julia documentation.

  1. Julia is fast. In many situations Julia is considerably faster than Python (without having to use numba/cython) and MATLAB. Moreover, Julia provides unlimited scalability. Julia programs can easily be ran on a large cluster or across distributed computers.
  2. Julia is open-source and free. Increasing MATLAB licensing costs are prohibitive to individual researchers and many research institutions.
  3. From its very beginning Julia is being focused on scientific computations. Currently only Julia, C, C++ and Fortran belong to the HPC (High Performance Computing) Petaflop Club. Julia is designed for distributed and parallel computations, making it great for distributed analyzes of large data sets.
  4. Most of the Julia packages are written in pure Julia. It’s easier to understand and modify their code if you already know Julia.
  5. Julia is beautifully designed, making programming in Julia a pure pleasure. This elegant design makes Julia easy to read and write.

Benchmarks against MNE and EEGLAB are available here.


What’s new

Changelog and commit details are here.


What’s next

This roadmap of the future developments of NeuroAnalyzer is neither complete, nor in any particular order. You are encouraged to add new functions required for your study. You may also submit a feature request using Codeberg NeuroAnalyzer.jl repository page.


Hardware and software requirements

See this section for more details.


Documentation

Documentation is available at https://neuroanalyzer.org/docs


Known bugs

List of know, reported and fixed bugs is here.


Quickstart

If you are new to Julia, please take a look at some resources for Getting Started with Julia.

  1. Install our fork of FIRLSFilterDesign.jl:
using Pkg
Pkg.add(url="https://codeberg.org/AdamWysokinski/FIRLSFilterDesign.jl")
  1. Install NeuroAnalyzer:
using NeuroAnalyzer

In Julia REPL, each NeuroAnalyzer function documentation is available via ?<function_name>, e.g. ?plot_psd. Since some function names are exported by other packages (e.g. plot by the Plots package), their use must be qualified: NeuroAnalyzer.plot().

It is recommended to start with the glossary, as it explains some terms specific for NeuroAnalyzer.


Tutorials

Important note: tutorials are produced using the most recent development version of NeuroAnalyzer. Therefore, in some infrequent cases, outputs may differ from produced by the current stable version.

Introduction to:

  1. Signal theory
  2. Fourier transform
  3. Hilbert transform
  4. Wavelet transform
  5. EEG
  6. EEG analysis
  7. ERPs
  8. Neuronal oscillations
  9. EEG experiments

Using NeuroAnalyzer:

  1. Download and installation
  2. Generating and using sysimage
  3. General remarks
  4. Preferences
  5. Plugins
  6. Picks and clusters

Load data and electrode positions:

  1. Load/save/import/export data
  2. Load/edit/preview electrode positions

Editing:

  1. Basic operations
  2. Edit channels
  3. Epoching
  4. Bad channels/epochs
  5. Sampling rate, resampling
  6. Virtual channels and applying formula

Processing:

  1. Referencing
  2. Filtering
  3. Demean, normalize, remove DC, detrend
  4. Tapering
  5. Remove electrode pops
  6. Interpolate bad channels
  7. Convolution
  8. Independent Component Analysis (ICA)
  9. Primary Component Analysis (PCA)
  10. Empirical Mode Decomposition (EMD)
  11. Remove power line noise

Analysis:

  1. Components
  2. Signal statistics
  3. Stationarity
  4. Covariance and correlation
  5. Lateralization index and asymmetry index
  6. Signal complexity and similarity
  7. Frequency domain
  8. Frequency domain: power spectrum
  9. Time-frequency domain: spectrogram
  10. Calculate and plot PSD slope
  11. Segments
  12. Functional connectivity: ISPC/ITPC
  13. Functional connectivity: PLI
  14. Functional connectivity: coherence

Statistical analysis:

  1. Bootstrapping

Visualization:

  1. Plot signal(s)
  2. Plot spectrum
  3. Plot spectrogram
  4. Complex/tiled plots
  5. Plot band powers
  6. Plot topographical maps
  7. Interactive preview and edit
  8. Plot grid locs

Miscellanea:

  1. Pipelines
  2. Animate
  3. Intrinsic Neural Timescales (INTs)

Other data types:

  1. MEPs
  2. ERPs
  3. fNIRS
  4. iEEG
  5. MEG
  6. HRV

Using NeuroRecorder:

  1. EDA

Using NeuroTester:

  1. FTT
  2. TPT
  3. iAVH

Plugins

The list of available plugins is here.

Please let us know if you would like to add your plugin(s) to the list.


License

This software is licensed under The 2-Clause BSD License.


How to cite

If you use this software, please cite our article in the Journal of Open Source Software:

@article{Wysokiński_2025,
    doi = {10.21105/joss.07734},
    url = {https://doi.org/10.21105/joss.07734},
    year = {2025},
    publisher = {The Open Journal},
    volume = {10},
    number = {107},
    pages = {7734},
    author = {Adam Wysokiński},
    title = {NeuroAnalyzer: Julia toolbox for analyzing neurophysiological data},
    journal = {Journal of Open Source Software}
}

DOIs for specific version numbers are provided by Zenodo. To refer to the current version, use:

@software{NeuroAnalyzer,
    author = {Adam Wysokiński},
    title = {NeuroAnalyzer},
    publisher = {Zenodo},
    doi = {10.5281/zenodo.7372648},
    url = {https://doi.org/10.5281/zenodo.7372648}
}

Version numbers are: 0.yy.m (yy: last two digits of the year, m: number of the month). Stable versions are released at the beginning of the month indicated in the version number.


Financial support

If you would like to support the project financially, we have the Liberapay account: Donate using Liberapay


Contributing

Every contribution (bug reports, fixes, new ideas, feature requests or additions, speed optimization, better code, documentation improvements, typos, etc.) to the project is highly welcomed.

You are very welcome to raise issues and start pull requests. Bugs, suggestions and questions should be reported using the Codeberg AdamWysokinski/NeuroAnalyzer.jl (preferred method) or Github JuliaHealth/NeuroAnalyzer.jl issues page.

If you notice any bugs, such as crashing code, incorrect results or speed issues, please raise a Codeberg/GitHub issue. Before filing an issue please:

If you want to report a bug, include your version and system information, and all relevant information. If possible, condense your bug into the shortest example possible that the maintainers can replicate, a so called “minimal working example” or MWE.

If you want to suggest a new feature, for example functionality that other plotting packages offer already, include supplementary material such as example images if possible, so it’s clear what you are asking for.

When opening a pull request, please add a short but meaningful description of the changes/features you implemented. Moreover, please add tests (where appropriate) to ensure that your code is working as expected.

For each feature you want to contribute, please file a separate PR to keep the complexity down and time to merge short. Add PRs in draft mode if you want to discuss your approach first.


List of publications using NeuroAnalyzer

  1. Wysokiński A, Szczepocka E, Szczakowska A. Improved cognitive performance, increased theta, alpha, beta and decreased delta powers after cognitive rehabilitation augmented with tDCS in a patient with post-COVID-19 cognitive impairment (brain-fog). Psychiatry Research Case Reports. 2023 DOI: 10.1016/j.psycr.2023.100164
  2. Sochal M. et al. The relationship between sleep quality measured by polysomnography and selected neurotrophic factors. Journal of Clinical Medicine. 2024 DOI: 10.3390/jcm13030893
  3. Sochal M. et al. Circadian Rhythm Genes and Their Association with Sleep and Sleep Restriction. International Journal of Molecular Sciences. 2024 DOI: 10.3390/ijms251910445
  4. Datseris G, Zelko J. Physiological signal analysis and open science using the Julia language and associated software. Frontiers in Network Physiology. 2024 DOI: 10.3389/fnetp.2024.1478280

If you have used NeuroAnalyzer in your research, you are kindly asked to report the bibliographic description of your publication.


This website is maintained by Adam Wysokiński ORCID

UMED