NeuroAnalyzer stable
releases
v0.25.12 (01/12/2025)
- Gtk.jl replaced with Gtk4.jl
- code cleanup
- many minor modifications and fixes
v0.25.11 (01/11/2025)
- breaking change:
na_set_use_cuda()
renamed to na_set_use_gpu()
- MKL library is not used anymore for FFTW (does not work with Phase
Slope Index package)
- analyze:
psi() - calculate Phase Slope Index
- analyze:
escor() - calculate Envelope-to-Signal
Correlation
- analyze:
aecor() - calculate Amplitude Envelope
Correlation
- analyze:
psa() - calculate Phase Synchronization
Analysis
- analyze:
cosim() - calculate Cosine Similarity
- analyze:
corr() - calculate Pearson Correlation
- analyze:
iplv() - calculate Imaginary Phase Locking
Value
- analyze:
plv() - calculate Phase Locking Value
- analyze:
dpli() - calculate Directed Phase Lag
Index
- analyze:
wpli() - calculate weighted Phase Locking
Index
- analyze:
cpsd() - calculate using short time Fourier
transform
- analyze:
coherence() - calculate imaginary part of
coherence
- changing preferences does not require restarting anymore
- initial support for AMDGPU added
- tested under Julia 1.12
- code cleanup
- many minor modifications and fixes
v0.25.10 (01/10/2025)
- breaking change: process:
filter_create() – order is not translated into attenuation,
transition band width is required for :firls,
:remez and :iirnotch filters
- breaking change: process: new structure of discrete
wavelet decomposition coefficients
- updated tutorials
- analyze:
ghexp() – calculate Generalised Hurst
Exponents (GHEs)
- process: many changes in discrete and continuous wavelet
decomposition functions
- process:
denoise_dwd() – denoise using discrete wavelet
decomposition
- plot:
plot_dwc() – plot discrete wavelet decomposition
coefficients
- plot:
plot_filter_response() – plot group delay for FIR
filters
- plot:
plot_polezero() – plot filter poles and
zeros
- plot:
plot_locs() – plot brain or head mesh together
with electrodes
- code cleanup
- many minor modifications and fixes
v0.25.9 (01/09/2025)
- breaking change: time points are internally rounded
to 3 digits
- updated tutorials
- updated documentation format
- plot:
plot_phase() – plot phases
- plot:
plot_fi() – plot instantaneous frequencies
- plot:
plot_hs() – plot Hilbert spectrum
- plot:
plot_imf() – plot IMFs produced by EMD
- plot:
plot_gridlocs() – plot a simplified plot of 10-20
EEG channels on a grid
- plot:
plot_spectrogram() – plot Hilbert-Huang
spectrogram
- analyze:
hmspectrum() – calculate Hilbert marginal
spectrum
- analyze:
hhtspectrogram() – calculate Hilbert-Huang
spectrogram
- analyze:
zipratio() – calculate zip ratio of the object
data
- analyze:
emd() – perform Empirical Mode Decomposition
(EMD)
- analyze:
transform(), ftransform() and
htransform() replaced spectrum() – Fourier and
Hilbert transforms
- process:
reference_slap() – perform spherical Laplacian
referencing
- new preference:
colors – enable/disable colored
output
- code cleanup
- many minor modifications and fixes
v0.25.8 (01/08/2025)
- tester:
iavh() – interactive module for subjective
recreation of auditory hallucinations
- analyze:
dirinrg() – calculate Dirichlet energy
- model:
efield2d() – model 2-dimensional electric
field
- plot:
plot_efield2d() – plot 2-dimensional electric
field
- NeuroStats.jl merged with NeuroAnalyzer.jl
- Markdown documentation is no longer maintained
- code cleanup
- many minor modifications and fixes
v0.25.7 (01/07/2025)
- analyze:
entropy() – calculates sample entropy and
normalized sample entropy
- analyze:
hfd() – calculates the Higuchi fractal
dimension
- analyze:
sumsim() – calculates summed similarity using
an exponential decay model
- code cleanup
- many minor modifications and fixes
v0.25.6 (01/06/2025)
- code cleanup
- many minor modifications and fixes
v0.25.5 (01/05/2025)
- plot:
plot_connectivity_circle()
- plot:
plot_heatmap(), plot_topo() and
plot_spectrogram() now can also draw thresholded
region
- analyze:
topo_var(), diss(),
gfp() and gfp_norm() for ERP/ERF objects
- code cleanup
- many minor modifications and fixes
v0.25.4 (01/04/2025)
- breaking change:
channel_cluster()
returns channel numbers, not names
- breaking change: referencing changes locs
labels
- plot: default palette changed to bluesreds
for some plots (topomap, heatmap, matrix)
exclude_bads preference was added (default is false) to
automatically ignore channels marked as bad from analysis
- all tutorials are automatically generated using Quarto-based
Markdown notebooks
- code cleanup
- many minor modifications and fixes
v0.25.3 (01/03/2025)
- Julia ≥1.11 is required
- greedy threads scheduler is used: significant speed increase of many
functions
- statistical functions moved to (NeuroStats.jl)
- code cleanup
- many minor modifications and fixes
v0.25.2 (01/02/2025)
- gui:
ifilter() – interactive filter design
- code cleanup
- many minor modifications and fixes
v0.25.1 (01/01/2025)
- io:
import_ft() imports EEG channels data for MEG+EEG
recordings
- analyze:
lat_idx() – calculates lateralization
index
- analyze:
tpt_detect() and tpt_analyze() –
detects and analyzes pinches in TPT recordings
- recorder:
tpt() – records Two-point Pinch Test
- channels list may now be defined using Julia regex,
e.g.
plot(eeg, ch=r"Fp.*")
- new data types: TPT
- code cleanup
- many minor modifications and fixes
v0.24.12 (01/12/2024)
- io:
import_ft() – FieldTrip EEG, MEG, events
- io:
import_fiff() imports SSP projections
- gui:
iedit() – move locs origin
- process:
generate_ssp_projectors() and
apply_ssp_projectors()
- code cleanup
- many minor modifications and fixes
Breaking changes:
- markers field
description renamed to
value
- MEG recording header must contain SSP labels, SSP channels and SSP
data fields
v0.24.11 (01/11/2024)
- plot:
plot_heatmap()
- tested against Julia 1.11 release
- code cleanup
- many minor modifications and fixes
v0.24.10 (01/10/2024)
- return types added to all functions for better error handling
- code cleanup
- many minor modifications and fixes
v0.24.9 (01/09/2024)
- gui:
iview():
- butterfly / mean mode
- time/epoch slider
- gui:
ipsd():
- time/epoch slider
- new channel selector
- gui:
ispectrogram():
- time/epoch slider
- new channel selector
- gui:
itopo():
- time/epoch entry field
- compatible with EEG/MEG
- gui:
iview_ica():
- preview and remove ICA components
- code cleanup
- many minor modifications and fixes
v0.24.8 (01/08/2024)
- breaking change: channels are addressed by their
labels, not numbers; to convert numbers to labels, use
get_channel(obj, type="eeg") or
get_channel(obj, ch=["Fp1", "Fp2"])
- breaking change: channels are stored as they are in
the recording (physical order); list of channels sorted by their type is
stored in
OBJ.header.recording[:channel_order] (logical
order)
- breaking change: channels label is stored in
OBJ.header.recording[:label], channel unit is stored in
OBJ.header.recording[:unit]
- list of bad channels is stored in the
OBJ.header.recording[:bad_channel]
- utils:
get_channel()
- channels may be addressed by name, e.g.
ch="Fp1" or
ch=["C3", "C4"] or by type, e.g. ch="all",
ch="eeg" or ch=["mag", "grad"]
- supports exclude options (default value is “bad”, so bad channels
are excluded from the list)
- initial support for MEG data
- io:
import_fiff() – both MEG and EEG data
- gui:
iview() – lots of changes:
- select time segment
- delete time segment / epoch
- left click channel label to display its properties
- right click channel label to mark it as bad
- zoom in and out
- scroll with mouse wheel
- toggle scale bars, monochromatic mode, snapping
- plot:
plot_signal() – lots of changes:
- finally displays properly data with > 100 channels
- gets list of bad channels from the header
- channels of different type are not displayed separately, but in
logical order
- scale bars and units are drawn for each channel type
- process:
denoise_cwt() – denoise using continuous
wavelet transformation
- process:
remove_cwt() – remove artifacts using
continuous wavelet transformation
- analyze:
cwtspectrogram() – improved CWT
scaleogram
- analyze:
psd() – new methods: :gh,
:cwt
- code cleanup
- many minor modifications and fixes
v0.24.7 (01/07/2024)
- stim:
tdcs_dose(), tacs_dose(),
tpcs_dose() – calculate effective parameters of tES
dosages
- process:
filter_create() – new filter type: weighted
least-squares FIR filter
- gui:
iview() can show bad channels
- process:
erp() – baseline segment is defined by two
time points, may be subtracted before or after averaging
- analyze: PSD- and spectrogram-, EROS-, EROP-related functions – log
scaling of frequencies removed, moved to plotting functions
- code cleanup
- many minor modifications and fixes
v0.24.6 (01/06/2024)
- recorder:
eda() and ieda() – record
electrodermal activity using GSR sensor and Arduino via serial port
- recorder:
ftt() and iftt() – can record
data from a console attached to Raspberry Pi via GPIO pin or to
Raspberry Pi/Arduino via serial port
- edit:
add_channel() and add_chanel!() –
channel(s) may be added to an object already containing channels
- analyze:
symmetry() – calculate signal symmetry
- misc:
iplay() and play() – play signal as
audio file
- code cleanup
- many minor modifications and fixes
v0.24.5 (01/05/2024)
- process:
mlinterpolate_channel() – interpolate bad
channel using MLJ regressor
- process: use reference epochs for
mlinterpolate_channel() and
lrinterpolate_channel()
- edit:
subepoch() – extract sub-epochs of reduced time
range
- plugins:
na_plugin_install() – plugins can be installed
from a local .zip/.tar.gz archive or using Git repository URL
- code cleanup
- many minor modifications and fixes
v0.24.4 (01/04/2024)
- NeuroAnalyzer has been added to JuliaHealth
- submodule NeuroTester added – design and run psychological
studies
- submodule NeuroStim added – process and model neurostimulation
techniques
- recorder:
ftt() – Finger Tapping Test (CLI mode)
- analyze:
cpsd() – cross-power spectral density
- analyze:
pacf() – partial auto-correlation
- analyze:
coherence()
- plot:
plot_coherence()
- code cleanup
- many minor modifications and fixes
v0.24.3 (01/03/2024)
- submodule NeuroRecorder added – record neurophysiological data
- recorder:
iftt() – Finger Tapping Test
- gui:
iselect_seg() – select matrix segment
- analyze:
hjorth()
- analyze:
peak_frq()
- analyze:
sef() – spectral edge frequency
- analyze:
phsd() – phase spectral density
- analyze:
axc2frq() – detect peaks in auto-/cross-
correlation/covariance and transform them into frequencies
- plot:
plot_phsd()
- statistics:
seg_extract() – extract rectangular or
circular segment from a matrix
- code cleanup
- many minor modifications and fixes
v0.24.2 (01/02/2024)
- NeuroAnalyzer is registered in the Julia general registry
- new data types: iEEG, sEEG, ECoG
- new channel types:
ieeg, seeg,
ecog
- io:
import_ncs()
- io:
import_xdf()
- gui:
itopo()
- gui:
iselect_ts()
- plots:
plot_ci()
- analysis:
gradient()
- analysis: biased or unbiased auto-/cross-
correlation/covariance
- edit:
sort_epochs()
- statistics: many new statistical functions
- code cleanup
- many minor modifications and fixes
v0.24.1 (01/01/2024)
- Julia ≥1.10 is required
- new data type: MEP
- io:
import_cnt()
- io:
import_duomag()
- io:
import_thymatron()
- io:
load_locs_dat()
- io:
load_locs_asc()
- io: detect montage when importing EEG files
- plots:
plot_mep()
- analysis:
mep_peaks()
- process: improved artifacts detection (using
tkeo())
- process: rename channels when referencing
- gui:
iview() use mouse wheel to scroll channels
- code cleanup
- many minor modifications and fixes
v0.23.12 (01/12/2023)
- locs:
locs_generate() – generate spherical coordinates
according to 10/10 system
- io:
import_npy()
- statistics:
ci_median(), ci_r(),
ci2z(), r_test()
- code cleanup
- many minor modifications and fixes
v0.23.11 (01/11/2023)
- gui:
iplot_icatopo() – interactive ICA viewer
- gui:
iview() plots components and two NEURO
objects
- gui:
iedit() snapping to time points
- edit:
delete_optode()
- locs:
load_locs() generates locs for
EMG/EOG/M1/M2/A1/A2 electrodes
- new data type: sensors
- code cleanup
- many minor modifications and fixes
v0.23.10 (01/10/2023)
- gui:
iedit_ch() – interactive channel and locations
editor
- gui:
iview_plot() – interactive plot viewer
- gui:
iplot_locs3d() – interactive 3D locs preview
- gui: improved
iview(), iplot(),
ipsd(), ispectrogram()
- locs: improved locs architecture and functions
- plot: rewritten
plot_locs(), plot_topo(),
plot_weights() and plot_connections()
functions – locs can be projected in 3 planes (XY, XZ and YZ)
- plot:
add_locs() – locs preview can be placed over
another plot
- analysis: improved methods of calculating PSD and spectrogram
- fix: FFTW provider on non-Intel/AMD architectures
- plot: GLMakie dependencies removed – significantly reduced startup
time
- code cleanup
- many minor modifications and fixes
v0.23.9 (01/09/2023)
- updated interactive editor
- plot:
iplot(), ipsd(),
ispectrogram()
- plot: plot PSD and spectrograms for a time segment
- initial SEEG support
- IO:
import_montage()
- IO:
import_nwb() (WIP)
- created
lite branch (with graphical functions
removed)
- code cleanup
- many minor modifications and fixes
v0.23.8 (01/08/2023)
- license changed to 2-clause BSD
- analysis: heart rate variability
hrv_detect(),
hrv_analyze()
- process:
ica_decompose(),
ica_reconstruct(), ica_remove()
- plot:
plot_icatopo()
- plot: plot(obj1, obj2)
- plot: preview(obj1, obj2)
- locs:
locs_rotx(), locs_roty(),
locs_rotz()
- tested against upcoming Julia 1.10 release
- code cleanup
- many minor modifications and fixes
v0.23.7 (01/07/2023)
- plot:
preview(): interactive (Gtk-based) preview and
edit epoched/continuous signal
- process:
remove_powerline()
- process:
remove_pops()
- initial support for ECoG data
- Docker container
- code cleanup
- many minor modifications and fixes
v0.23.6 (01/06/2023)
- edit:
create()
- edit:
join() and join!()
- analyze:
acor(), xcor(),
acov(), xcov()
- Julia ≥ 1.9.0 is now required
- code cleanup
- many minor modifications and fixes
v0.23.5 (01/05/2023)
- new data type: ERP
- IO: GDF files
- IO: improved
import_set() (epochs, locs, markers)
- IO: improved
import_bv()
- IO:
import_edf() accepts multi-sampling rate files
- analyze:
amp_at() and avgamp_at() for
ERPs
- edit:
ch2marker()
- utils:
to_df()
- time segments are in seconds
- code cleanup
- more tutorials
- many minor modifications and fixes
v0.23.4 (01/04/2023)
- complete rewriting of NeuroAnalyzer functions
- new architecture allows easy expanding with new types of
neurophysiological data
- new data types: EEG, NIRS, MEG
- new channel types (csd, nirs, mag, grad, meg)
- IO: NIRS/SNIRF/NIRX files (NIRS)
- IO: MEG FIFF files (very WIP)
- process: convert intensity to optical density (NIRS)
- process: convert optical density to HbO/HbR/HbT concentrations
(NIRS)
- plot: new way of plotting channels of different types
- plot: 2D dipole plot (WIP)
- unit tests were completely rewritten
- code cleanup
- more tutorials
- many minor modifications and fixes
v0.23.3 (01/03/2023)
- IO: EEGLAB .set files (WIP)
- IO: CSV files
- IO: GEO electrode locations
- process: transform using surface Laplacian
- process: improved FIR filter (automated filtering window)
- process: improved polynomial filter
- plot: 3D dipole plot (WIP)
v0.23.2 (01/02/2023)
- import Philips Alice4 polysomnography EDF (non-standard,
multi-sampling rate)
- user defined number of Slepian tapers for PSD
- processing of electrode locations updated, added rotating and
scaling
- code cleanup
- more tutorials
- many minor modifications and fixes
v0.23.1 (01/01/2023)
- automated epoching by event markers
- ERP: create, plot
- interpolate EEG channel using linear regression
- continuous integration (CI): tests, documentation, website
- more tutorials
- many minor modifications and fixes
v0.22.12 (01/12/2022)
- plotting functions were completely rewritten
- new plot types added (multi-channel PSD,
eeg_plot_stats())
- import BrainVision
- tutorials at https://neuroanalyzer.org/#tutorials
eeg_*() functions now operate on specified
channels
- improved auto-detection of bad channels/epochs
- many minor modifications and fixes
v0.22.11 (01/11/2022)
- user-managed preferences
- virtual channels
- progress meter
- continuous and discrete wavelet transformations
- Hilbert transformation envelope
- improved connectivity plot
- proper handling of negative frequencies in FFT spectrum
- Jupyter notebook
- many minor modifications and fixes
v0.22.10 (01/10/2022)
- project website: https://neuroanalyzer.org
- IO: Digitrack, CSD
- Pluto notebook
- study object (WIP)
- automatically process only EEG/MEG signals where necessary
(WIP)
- new logo
- many minor modifications and fixes
v0.22.9 (01/09/2022)
- name changed to NeuroAnalyzer to comply with Julia package naming
policy
- IO: EDF+, BDF and BDF+ with annotations
- view/edit annotations
- interactive 3D preview of electrodes
- PSD topomap
- edit electrode locations
- automated processing of signal channels only (WIP)
- benchmarking module (WIP)
- many minor modifications and fixes
v0.22.8 (01/08/2022)
- initial CUDA support
- new reference mode: simple (planar) Laplacian
- plugins use git
- many minor modifications and fixes
v0.22.7 (01/07/2022)
Git commits
Stable
branch
Devel
branch