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.

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

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

```
@software{adam_wysokinski_7372648,
author = {Adam Wysokiński},
title = {NeuroAnalyzer},
year = 2024,
publisher = {Zenodo},
version = {0.24.10},
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.

Currently NeuroAnalyzer is focused on resting-state analysis. Some ERP functions are already available, while other type of analyses will be developed in future versions. The goal is to make a powerful, expandable and flexible environment for processing neurophysiological data.

- Load neurophysiological recordings:
- EEG (EDF, EDF+, BDF, BDF+, GDF, Alice4, DigiTrack, BrainVision, CSV, EEGLAB, NPY, Thymatron, NCS, CNT, XDF)
- MEG (FIFF)
- NIRS (SNIRF, NIRS, NIRX)
- 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 (up/down)
- divide into epochs (fixed and by event markers)
- delete channels/epochs
- auto-detect bad channels/epochs
- interpolate channels (planar interpolation/linear regression)

- Process:
- reference (common/averaged/auricular/mastoid/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
- ICA decompose/reconstruct
- PCA
- 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)
- auto- and cross- covariance and correlation (biased and unbiased)
- time-frequency analysis: various spectrogram methods (FFT-based, short-time Fourier transform, multi-tapered periodogram, Morlet wavelet convolution, Gaussian and Hilbert transform, continuous wavelet transformation)
- coherence and magnitude-squared coherence
- mutual information
- entropy, negentropy
- envelopes (amplitude, power, spectrogram)
- power spectrum slope
- PLI/ISPC/ITPC
- ERP: detect peaks, analyze amplitude and average amplitude
- 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
- inter-channel connections
- matrices (channel × channel)
- channel/epoch data (histogram/bar plot/dot plot/box plot/violin plot/polar plot/paired data)
- ERPs: amplitude, topographical distribution
- EROs: spectrogram, power spectrum
- MEPs: amplitude
- interactive plots (amplitude, signal, spectrum, spectrogram, ICA, topographical map, channel details)

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:

**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 Raspberry Pi**Electrodermal Activity**(EDA) = Galvanic Skin Response (GSR) – via Raspberry Pi**Angular Velocity Sensors**(AVS) – via Raspberry Pi

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.

Changelog and commit details are here.

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.

See https://neuroanalyzer.org/requirements.html for more details.

Documentation is available in the following formats:

List of know, reported and fixed bugs is here.

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

Quickstart: add NeuroAnalyzer from the Pkg
REPL: `pkg> add 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()`

.

Glossary of terms specific for NeuroAnalyzer is here.

- Using NeuroAnalyzer
- Load data and electrode positions
- Edit
- Process
- Process (1): reference (common/averaged/auricular/mastoid/Laplacian/custom montage)
- Process (2): filtering (FIR/IIR/Remez/moving average/moving median/polynomial/convolution)
- Process (3): demean, normalize, taper, convolution, PCA
- Process (4): remove electrode pops
- Process (5): ICA decomposition/reconstruction
- Process (6): interpolate bad channels

- Analyze
- Analyze (1): components
- Analyze (2)
- Analyze (3): segments
- Analyze (4): coherence

- Plot
- Plot (1): plot multi-/single-channel signal, compare two signals
- Plot (2): plot frequency analysis (PSD: single-/multi-channel, Welch’s periodogram/multi-tapered/Morlet wavelet, 2d/3d)
- Plot (3): plot spectrogram (single-/multi-channel, regular/STFT/Morlet wavelet)
- Plot (4): complex/tiled plots
- Plot (5): filter response
- Plot (6): band powers
- Plot (7): auto/cross-correlation/covariance
- Plot (8): topographical maps
- Plot (9): interactive preview and edit

- Statistic
- Statistics (1): bootstrapping

- Misc

NeuroRecorder:

The list of available plugins is here.

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

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

Bugs, suggestions and questions should be reported using the Codeberg AdamWysokinski/NeuroAnalyzer.jl (preferred method) or Github JuliaHealth/NeuroAnalyzer.jl issues page.

You may also follow NeuroAnalyzer on Mastodon.

- 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

If you have used NeuroAnalyzer in your research, you are kindly asked to report the reference to your paper.

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

This website is maintained by Adam Wysokiński