Git Commits
v0.26.4 (01/04/2026)
- plot:
plot_mep()use embedded peaks - analyze:
entropy()differential entropy added - analyze:
negentropy()three different entropy method can be used, optional signal normalization and demeaning - analyze:
psd()remove DC component for each epoch by default (demeanargument) - process:
ica_remove()removes ICA components properly;ica_reconstruct()removed since doubled byica_remove() - significantly reduced multi-threading overhead
- updated website
- updated tutorials (still in progress)
- entire code has been cleaned up
- almost all code is nicely commented
- almost all functions have complete docstrings
v0.26.3 (01/03/2026)
- breaking change:
frq_nargument replaced withnfrq - breaking change:
channel_info()accepts channel by name - breaking change:
channel_cluster()returns list of labels - breaking change:
channel_pick()returns list of labels - fix:
trim()removal of markers - plot: use
exclude_badswhen plotting - plot:
plot_filter()is interactive - plot:
plot_gfp()Global Field Power for ERP/ERF - plot:
plot()delete segments - plot:
plot()show two objects - plot:
plot()show channel info - plot:
plot()toggle channel good/bad status - process:
filter_create()defaultrpandrsvalues changed to 0.5 and 20, respectively - analyzer:
erp_auc()measure area under curve for ERP/ERF/MEP - analyze:
erp_gfp()Global Field Power - edit:
channel_reject()andepoch_reject() - multitaper: default number of tapers is now 16
- code cleanup
- many minor modifications and fixes
v0.26.2 (01/02/2026)
- breaking change: GUI functions (
i*()) are disabled and being rewritten - breaking change: transition from Plots.jl to GLMakie.jl
- breaking change:
frq_limargument replaced withflim - breaking change: removed GPU support
- breaking change: removed components
- breaking change: time points are rounded to 4 decimals
- breaking change: list of bad channels is a vector for all epochs, not a matrix for each epoch separately
- breaking change:
trim()can be applied to a continuous signal only - breaking change: default
woverlapisround(Int64, wlen * 0.90) - plot:
plot()is completely new - plot:
plot_locs()andplot_locs3d()are now separate functions - plot:
plot_locs()is interactive - plot:
plot_topo()does not use time segment, only time point - plot:
plot_topo()can also plot external data (vector or matrix; matrix will be averaged) - plot:
plot_topo()can mark significant channels - plot:
plot_topo()thresholding improved, can now be also applied to locs - plot:
plot_psd()head shape can be added in topographical map - plot:
plot_psd()multichannel plot is removed, butterfly is default - plot:
plot_coherence()multichannel plot is removed, butterfly is default - plot:
plot_phsd()multichannel plot is removed, butterfly is default - plot:
plot_spectrogram()thresholding improved - plot:
plot_spectrogram()head shape can be added in topographical map - plot:
plot_spectrogram()can plot topographical map of spectrograms - plot:
plot_spectrogram_topo()andplot_psd_topo()are interactive - plot: adding plot locs to plots is improved
- edit:
crop() - edit:
trim()adds “NA/DELETED” marker at deletion point - io: when loading/adding locs, make locs order consistent with labels
- new thresholding methods:
:inand:bin - code cleanup
- many minor modifications and fixes
v0.26.1 (01/01/2026)
- some changes to GUI
- code cleanup
- many minor modifications and fixes
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 tona_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,:remezand:iirnotchfilters - 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()andhtransform()replacedspectrum()- 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()andplot_spectrogram()now can also draw thresholded region - analyze:
topo_var(),diss(),gfp()andgfp_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_badspreference 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()andtpt_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()andapply_ssp_projectors() - code cleanup
- many minor modifications and fixes
Breaking changes:
- markers field
descriptionrenamed tovalue - 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")orget_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 inOBJ.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"orch=["C3", "C4"]or by type, e.g.ch="all",ch="eeg"orch=["mag", "grad"] - supports exclude options (default value is “bad”, so bad channels are excluded from the list)
- channels may be addressed by name, e.g.
- 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()andieda()- record electrodermal activity using GSR sensor and Arduino via serial port - recorder:
ftt()andiftt()- can record data from a console attached to Raspberry Pi via GPIO pin or to Raspberry Pi/Arduino via serial port - edit:
add_channel()andadd_chanel!()- channel(s) may be added to an object already containing channels - analyze:
symmetry()- calculate signal symmetry - misc:
iplay()andplay()- 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()andlrinterpolate_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()andplot_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
litebranch (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()andjoin!() - 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()andavgamp_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)
- first official release