A universal C++ compression library based on wavelet transformation
Project description
WaveletBuffer
A universal C++ compression library based on wavelet transformation
Features
- Written in Modern C++
- One-side wavelet decomposition for vectors and matrixes
- 5 Daubechies Wavelets DB1-DB5
- Different denoising algorithms
- Fast and efficient compression with MatrixCompressor
- Cross-platform
Requirements
- CMake >= 3.16
- C++20 compiler
- conan >= 1.56
Bindings
Usage Example
#include <wavelet_buffer/wavelet_buffer.h>
using drift::Signal1D;
using drift::WaveletBuffer;
using drift::WaveletParameters;
using drift::WaveletTypes;
using DenoiseAlgo = drift::ThresholdAbsDenoiseAlgorithm<float>;
int main() {
Signal1D original = blaze::generate(
1000, [](auto index) { return static_cast<float>(index % 100); });
std::cout << "Original size: " << original.size() * 4 << std::endl;
WaveletBuffer buffer(WaveletParameters{
.signal_shape = {original.size()},
.signal_number = 1,
.decomposition_steps = 3,
.wavelet_type = WaveletTypes::kDB1,
});
// Wavelet decomposition of the signal and denoising
buffer.Decompose(original, DenoiseAlgo(0, 0.3));
// Compress the buffer
std::string arch;
buffer.Serialize(&arch, 16);
std::cout << "Compressed size: " << arch.size() << std::endl;
// Decompress the buffer
auto restored_buffer = WaveletBuffer::Parse(arch);
Signal1D output_signal;
// Restore the signal from wavelet decomposition
restored_buffer->Compose(&output_signal);
std::cout << "Distance between original and restored signal: "
<< blaze::norm(original - output_signal) / original.size()
<< std::endl;
std::cout << "Compression rate: " << original.size() * 4. / arch.size() * 100
<< "%" << std::endl;
}
Build and Installing
On Ubuntu:
git clone https://github.com/panda-official/WaveletBuffer.git
mkdir build && cd build
cmake -DWB_BUILD_TESTS=ON -DWB_BUILD_BENCHMARKS=ON -DWB_BUILD_EXAMPLES=ON -DCODE_COVERAGE=ON ..
cmake --build . --target install
On MacOS:
git clone https://github.com/panda-official/WaveletBuffer.git
mkdir build && cd build
cmake -DWB_BUILD_TESTS=ON -DWB_BUILD_BENCHMARKS=ON -DWB_BUILD_EXAMPLES=ON -DCODE_COVERAGE=ON ..
cmake --build . --target install
On Windows:
git clone https://github.com/panda-official/WaveletBuffer.git
mkdir build && cd build
cmake -DWB_BUILD_TESTS=ON -DWB_BUILD_BENCHMARKS=ON -DWB_BUILD_EXAMPLES=ON -DCODE_COVERAGE=ON ..
cmake --build . --config Release --target install
Integration
Using cmake target
find_package(wavelet_buffer REQUIRED)
add_executable(program program.cpp)
target_link_libraries(program wavelet_buffer::wavelet_buffer)
# WaveletBuffer use blaze as linear algebra library which expects you to have a LAPACK library installed
# (it will still work without LAPACK and will not be reduced in functionality, but performance may be limited)
find_package(LAPACK REQUIRED)
target_link_libraries(program ${LAPACK_LIBRARIES})
References
- Documentation
- Drift Protocol - Protobuf Libraries to encode message in Drift infrastructure
- Drift Python Client - Python Client to access data of PANDA|Drift
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
wavelet-buffer-0.6.0.tar.gz
(49.7 kB
view hashes)
Built Distributions
Close
Hashes for wavelet_buffer-0.6.0-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 51384021896c1ddf39379351aaa610abf161513d926af722c1ae365783b04157 |
|
MD5 | ac10ad82ef5c6f4aead7f39003bebaf2 |
|
BLAKE2b-256 | e39b250c2dcefd2daf350152d8052c0116a1ffe7e7b088a1f12e66533be1051e |
Close
Hashes for wavelet_buffer-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 36d3a4620fb8ff26c14e889a6c9e065ec3c57ac10c54d2b9715bd0517d8e873b |
|
MD5 | e49eba519e7bb9886ec59206757f8b5c |
|
BLAKE2b-256 | 1bd3471f4418db3c853457663aa8b703e61f1d7733bf44b178e97b30bb471236 |
Close
Hashes for wavelet_buffer-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e7a78be103b7759c65ee0e5e0ce75d3df4dc3e7f6b0d863beb539c7e16940476 |
|
MD5 | c493d1c73d2f3c8564752a67bf556a02 |
|
BLAKE2b-256 | 48a7def4db0d2bcfd52e32842f5982db29c7e3d5a7c8b6a8b01201d0edd1638e |
Close
Hashes for wavelet_buffer-0.6.0-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 61983d98618e8dd4cc0ea99f6cc7fffb5883d4599da89ea9b054d1429066ef98 |
|
MD5 | 6e43e2dc8c25f074cf6bfd2325d2c89a |
|
BLAKE2b-256 | 0e27eddd5a25da89d271bbb5fb9845e9a0aa66577045c5219d5e1bbbfeb27748 |
Close
Hashes for wavelet_buffer-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 98aac725e11a783adf7f9d5b984a4f11b1b5e66fcf114fa49922eebf95bb1c9f |
|
MD5 | 37e751ed91650e964c602f74d4a49783 |
|
BLAKE2b-256 | 4d53afa40639f16322da5ad65e21b9bcc1368756c5754fbe5c34e2ea02a4029c |
Close
Hashes for wavelet_buffer-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5eae9b45b4c17db977cf9ca4721d4f9e51fe39d110037d8d9c9051febeeb95e3 |
|
MD5 | 6474288d5be7b88189c42b99bfa3f0c3 |
|
BLAKE2b-256 | 7610d2b663eeffa52ad9ded941a1d89556e034250a972632b56f2bffb09e2953 |
Close
Hashes for wavelet_buffer-0.6.0-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | afceabc2aa77e6edaacf57cb0059447fea037fe22a44ba3425cced5f7305327d |
|
MD5 | 7ba2dafe7b089b3e132f1e837b908aa0 |
|
BLAKE2b-256 | e4fee50ec67874404b60244f2c9afbf86636dcd1a80f2b69f1f203fc3311110d |
Close
Hashes for wavelet_buffer-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | efa549dbcb3097d062698ab848e707f75a62b733e1168aa10da78db0f1c98b69 |
|
MD5 | 4d2c4b1c76ceb76f4679c915d0da8244 |
|
BLAKE2b-256 | 2d8256dded2b04c1de83cf6a2092c6bf80df9a1bf69c9bb0580b2df096a4e8ac |
Close
Hashes for wavelet_buffer-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6fdd6cae7a6d8e06409a4f2181caf7b911c91ad9c1159dfb65a8561d57624f9d |
|
MD5 | 332777d0f63dc38cb34b2cbea16bb5ed |
|
BLAKE2b-256 | 1f5e9486dbf56ef3150b968f8a57dc8daa072e0f156466723f51ef8efa02beac |