Added mp_core_gabor() and omp_core_gabor() for direct MP and OMP
decomposition using parameterized Gabor dictionaries. Candidate atoms are
evaluated against the current residual using FFT-based projections and
analytical phase optimization, without materializing the full time-domain
dictionary.
Added mp_omp_gabor_to_mp() to convert single-channel results from
mp_core_gabor() and omp_core_gabor() into standardized mp objects,
enabling their use with time-frequency visualization functions.
Updated mp_omp_execute() to use mp_core_gabor() and omp_core_gabor()
for multi-channel decomposition instead of the previous top-k preselection
and matrix-based workflow. The tol argument is passed directly to the
selected algorithm and, when specified, overrides n_nonzero_coefs.
Removed topk_gabor_atoms(), gabor_atoms_matrix(), and the topk class.
The obsolete topk and sparse arguments are no longer part of the
mp_omp_execute() interface.
Extended tf_map() with separate controls for Gaussian blob amplitude
scaling (mode = "sqrt", "linear", or "energy") and map display
(display_scale = "linear" or "db"). The new db_range argument controls
the displayed dynamic range in decibels. Energy-normalized blobs integrate
to the assigned atom energy over the full time-frequency plane.
Improved time-frequency map visualization with a smoothly interpolated
custom color palette, configurable palettes and blob widths, and updated
examples illustrating the available display modes. The returned tf_map
retains its original values before display-scale transformation.
Added shared internal helpers for Gabor dictionary preparation, iterative atom search, and reconstruction of selected atoms. Updated documentation and examples to reflect the new Gabor decomposition workflow.
Retained mp_core() and omp_core() as general-purpose, matrix-based
implementations independent of the Gabor-specific workflow.
Simplified the native MP/OMP core interfaces. mp_core() and omp_core()
now accept numeric vector, matrix, or data frame dictionaries directly and
no longer accept topk objects. Dictionary atoms are internally normalized
to unit L2 norm before decomposition, making atom selection invariant to
non-zero scaling of dictionary columns.
Updated the high-level Gabor-based MP/OMP workflow in mp_omp_execute(),
which now internally calls read_gabor_dict() and topk_gabor_atoms().
The dictionary argument has changed: it now accepts either NULL or a path
to an XML dictionary file, instead of a precomputed topk object. When
dictionary = NULL, the XML dictionary is generated internally.
Added the full_atoms_in_signal parameter to mp_omp_execute(), which
controls whether Gabor atoms must be fully contained within the signal
boundaries. When set to FALSE, additional boundary-crossing atoms are
included in the candidate dictionary, which can substantially improve
decomposition quality near the beginning and end of the signal.
Renamed topk_atoms() function to topk_gabor_atoms().
Removed the mp_omp_pipeline() function because its functionality is now
provided by mp_omp_execute().
Added omp_reference(), a simple educational and reference implementation
of Orthogonal Matching Pursuit.
Added and improved S3 methods for package objects, including methods for printing, summarizing, and plotting.
Updated package documentation, examples, README, and vignette to reflect the current MP-R, OMP-R, and EMPI workflows.
Improved input validation, error handling, and overall code consistency.
Added a native R implementation of the Matching Pursuit algorithm (mp_core()),
intended primarily for educational, methodological, and experimental use. It
complements the optimized external EMPI backend and allows the algorithm to be
inspected and modified directly in R.
Expanded the package vignette with examples of the native R Matching Pursuit implementation. The available decomposition backends are now more clearly distinguished, with the terms MP-R, OMP-R, and EMPI used consistently throughout.
Significantly expanded README.md to provide a more comprehensive overview
of the package, its functionality, and typical workflows.
Renamed plot.ecg() and read_ecg_signals() to plot.wfdb() and read_wfdb_signals(), respectively.
Updated read_csv_signals(), read_edf_signals(), and read_wfdb_signals()
to return objects of classes sig, edf, and wfdb, respectively.
Updated empi_execute(), mp_omp_execute(), and topk_atoms() to accept
objects of classes sig, edf, and wfdb.
Added as_sig() for converting signal data and a specified sampling frequency
to an object of class sig.
Standardized function names to improve consistency across the package API:
gabor_fun() was renamed to gabor_atom().sig2bin() was renamed to sig_to_bin().mp_omp_run_pipeline() was renamed to mp_omp_pipeline().read_dict() was renamed to read_gabor_dict().atom_params() was renamed to read_atom_params().filters_coeff() was renamed to design_filters().read_empi_db_file() was renamed to read_empi_db().sig_to_bin() was renamed to signal_to_bin().gabor_proj_fft() was renamed to gabor_projection_fft().Simplified mp_omp_pipeline() to provide a higher-level MP/OMP decomposition
workflow for signals stored in CSV format; signal-specific preprocessing is
expected to be performed separately.
Improved input validation, error handling, and internal code robustness across several functions.
The project adopted a new naming convention for variables and functions,
replacing dot-separated names (name.of.some.variable) with snake_case
(name_of_some_variable).
Implemented Orthogonal Matching Pursuit (OMP) and added support for XML-defined
dictionaries (functions: read_dict(), topk_atoms(), omp_core(),
run_omp_run_pipeline(), omp_execute() and gabor_proj_fft()).
Extended examples added to the package-level documentation and to the vignette.
Added the ability to load data in WFDB (WaveForm DataBase) format.
plot_mp() function was added.
plot_ecg() function was added.
read_ecg_signals() function was added.
The read_csv_files() function also supports files where the channel names are
given in the second line.
The read_empi_db_file() and empi_execute() functions now return object
of class mp.
empi2tf() has been renamed to tf_map(), which provides support for both
the EMPI and OMP algorithms.
Fixed a bug in the empi2tf() function that caused TF maps to be displayed
incorrectly for channels other than the first one (only applies to signals with
more than one channel).
clear.cache() function. Before deleting files from the cache, it displays
a list of them and asks the user for permission to delete them.
empi.execute() function. Additional validation has been added to ensure that
list items have the required names (signal and sampling.rate).
empi.install() function. Added error handling for download.file() function.