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
- Load neurophysiological recordings:
- EEG: EDF, EDF+, BDF, BDF+, GDF, Alice4, DigiTrack, BrainVision, CSV,
FieldTrip, EEGLAB, NPY, Thymatron, NCS, CNT, XDF
- MEG: FIFF, FieldTrip
- NIRS: SNIRF, NIRS, NIRX, FieldTrip
- MEP: DuoMAG
- body sensors: acceleration, magnetic field, angular velocity and
orientation
- electrode positions: CED, LOCS, ELC, TSV, SFP, CSD, GEO, MAT, TXT,
DAT, ASC
- Edit:
- edit channel data (unit, type, label)
- edit location data (electrode location)
- trim (remove part of the signal)
- resample
- divide into epochs (fixed duration or by event markers)
- delete channels/epochs
- auto-detect bad channels/epochs
- interpolate channels (planar interpolation, linear regression)
- Process:
- reference: common, averaged, auricular, mastoid, planar and
spherical Laplacian, custom montage
- filter: FIR, IIR, Remez, moving average, moving median, polynomial
filters, all types (HP, LP, BP, BS); with preview of filter
response
- remove power line noise
- auto-detect and remove electrode pops
- interpolate using linear regressor, MLJ regressor and planar
interpolation
- Independent Component Analysis (ICA)
- Primary Component Analysis (PCA)
- Empirical Mode Decomposition (EMD)
- convolution (in time and frequency domain)
- create ERP (event-related potentials)
- NIRS: convert raw light intensity to optical density and HbO/HbR/HbT
concentrations
- Analyze:
- signal comparison
- stationarity
- frequency analysis: total power, band power (absolute and
relative)
- frequency and time-frequency analysis methods:
- Fourier transform
- Hilbert transform
- Welch’s method
- short-time Fourier transform
- multi-tapered periodogram
- Hilbert-Huang transform
- Hilbert marginal spectrum
- Gaussian-Hilbert transform
- discrete and continuous wavelet transformations
- auto- and cross- covariance and correlation (biased and
unbiased)
- coherence and magnitude-squared coherence
- mutual information
- entropy, negentropy, sample entropy and normalized sample
entropy
- Higuchi fractal dimension
- summed similarity using an exponential decay model
- Dirichlet energy
- lateralization index
- envelopes (amplitude, power, spectrogram)
- power spectrum slope
- PLI/ISPC/ITPC
- ERP/ERF: detect peaks, analyze amplitude and average amplitude,
dissimilarity, Global Field Power, topographic variance
- EROs (event-related oscillations): spectrogram, power spectrum
- HRV (heart rate variability): time-domain analysis (MENN, MDNN, VNN,
SDNN, RMSSD, SDSD, NN50, pNN50, NN20, pNN20)
- MEPs: detect peaks, analyze amplitude and average amplitude
- Plot:
- signal (single-/multi-channel)
- power spectrum (single-/multi-channel, 2D/3D)
- spectrogram (single-/multi-channel)
- topographical maps
- weights at channel locations
- connections
- channel/epoch data (histogram, bar plot, dot plot, box plot, violin
plot, polar plot, paired data, confidence interval)
- ERPs: amplitude, topographical distribution
- EROs: spectrogram, power spectrum
- MEPs: amplitude
- connectivity circle
- interactive plots (amplitude, signal, spectrum, spectrogram, ICA,
topographical map, channel details)
- IMFs, phase, instant frequency
- cross-/auto-correlations
- heatmaps, matrices
- ICA topo
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:
- Electrodermal Activity (EDA) = Galvanic Skin
Response (GSR) – via Raspberry Pi/Arduino
- Angular Velocity Sensors (AVS) – via Raspberry
Pi/Arduino
NeuroTester modules implements various neuropsychological tests:
- Finger Tapping Test (FTT) – using computer keyboard
or external panel attached to Raspberry Pi
- Two-point Pinch Test (TPT) – using finger-worn
accelerator attached to Arduino
- iAVH – interactive module for subjective recreation of auditory
hallucinations
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.
- 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.
- Julia is open-source and free. Increasing MATLAB licensing costs are
prohibitive to individual researchers and many research
institutions.
- 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.
- Most of the Julia packages are written in pure Julia. It’s easier to
understand and modify their code if you already know Julia.
- 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.
- Install our fork of FIRLSFilterDesign.jl:
using Pkg
Pkg.add(url="https://codeberg.org/AdamWysokinski/FIRLSFilterDesign.jl")
- Install 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:
- Signal theory
- Fourier transform
- Hilbert transform
- Wavelet transform
- EEG
- EEG analysis
- ERPs
- Neuronal
oscillations
- EEG experiments
Using NeuroAnalyzer:
- Download and installation
- Generating and using
sysimage
- General remarks
- Preferences
- Plugins
- Picks and clusters
Load data and electrode positions:
- Load/save/import/export data
- Load/edit/preview electrode
positions
Editing:
- Basic operations
- Edit channels
- Epoching
- Bad channels/epochs
- Sampling rate, resampling
- Virtual channels and applying
formula
Processing:
- Referencing
- Filtering
- Demean, normalize, remove DC,
detrend
- Tapering
- Remove electrode pops
- Interpolate bad
channels
- Convolution
- Independent Component Analysis
(ICA)
- Primary Component Analysis
(PCA)
- Empirical Mode Decomposition
(EMD)
- Remove power line
noise
Analysis:
- Components
- Signal statistics
- Stationarity
- Covariance and
correlation
- Lateralization index and
asymmetry index
- Signal complexity and
similarity
- Frequency domain
- Frequency domain: power
spectrum
- Time-frequency
domain: spectrogram
- Calculate and plot PSD
slope
- Segments
- Functional connectivity: ISPC/ITPC
- Functional connectivity: PLI
- Functional connectivity: coherence
Statistical analysis:
- Bootstrapping
Visualization:
- Plot signal(s)
- Plot spectrum
- Plot spectrogram
- Complex/tiled plots
- Plot band powers
- Plot topographical maps
- Interactive preview and
edit
- Plot grid locs
Miscellanea:
- Pipelines
- Animate
- Intrinsic Neural Timescales
(INTs)
Other data types:
- MEPs
- ERPs
- fNIRS
- iEEG
- MEG
- HRV
Using NeuroRecorder:
- EDA
Using NeuroTester:
- FTT
- TPT
- 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:

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:
- check that there are no similar existing issues already
- check that your versions are up to date
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
- 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
- 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
- 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
- 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 
