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 alogorithms
- Fast and effitient compression with SFCompressor
- Crossplatform
Requirements
- CMake >= 3.16
- C++20 compiler
- conan >= 1.50
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})
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.4.0.tar.gz
(45.8 kB
view hashes)
Built Distributions
Close
Hashes for wavelet_buffer-0.4.0-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 88b070b19fa175a0b25359a2d6455ff33a23495f5b2bb784c329414b9831d037 |
|
MD5 | 212ca2b9c284eb8e64c34fd902167869 |
|
BLAKE2b-256 | e176211be4e146a3f8375ecd19c518645206f2072ddf9ae90b2ba0cb72bc3139 |
Close
Hashes for wavelet_buffer-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c6537cc14d4095f8e3a734b45877cb7ebded3ec0cd35b0b2ee62d65f530db202 |
|
MD5 | 4974ae59524616f32394455a9c51f648 |
|
BLAKE2b-256 | ca97b28bfe45b29ea29ce3665bf455c9742c6958e1cfe214c5624d242386add7 |
Close
Hashes for wavelet_buffer-0.4.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c0be1875df36c957f5233850768598b9c8ce614e6c27aabd9fa1564b7c146fc2 |
|
MD5 | 94f276c3b9bc8d3e49dca4d3fc1885ed |
|
BLAKE2b-256 | 2e8fd76e5f0e5de522182962ea5ca5dcfcab1fa20ddc21d6a8d8ccd6b3b9ca01 |
Close
Hashes for wavelet_buffer-0.4.0-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 201844db09c4efe0b25c8a567131d5068dea58d1560db609fdb5440f48352c6f |
|
MD5 | 72eed12c4a8eb8f99a330b1ee1c88979 |
|
BLAKE2b-256 | 62f6ceb3eed532b06b113e8ba8fc6dc39b908b2722ae5cadda973bd5567728d5 |
Close
Hashes for wavelet_buffer-0.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e3015572575d8f359574db51d8e8a2a394062016ab6e5306a0885d63c427355f |
|
MD5 | 6d94006cbaf53fb5c4edc6592cc1a50c |
|
BLAKE2b-256 | d1880e47c9622bd3618ecf8df39f18f7216792e282f009a9bffae42a63db9c50 |
Close
Hashes for wavelet_buffer-0.4.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b542e29c6518aa21a17294a2f29437396b40eb9e62aa863b53efe1ca7ca9c52d |
|
MD5 | 2a2335833ceb78cf113d78da7bc6298d |
|
BLAKE2b-256 | 623e73955e38c5b4e75a67c18467bfbb3df57e5097fc0fb2058ed68736c026f1 |
Close
Hashes for wavelet_buffer-0.4.0-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d0648b4fcccb382ca1d0022dd548ca664619eea39ab9228c60720b77dc5c4982 |
|
MD5 | ffdbc4020385f5a931b0b2c0af0b59a3 |
|
BLAKE2b-256 | 0a794417f9fdb0028e86f5134fab1cb4dcdc84c3f9ba8d10288e37cac335bb5a |
Close
Hashes for wavelet_buffer-0.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4b1c9a36d7ce5fa7b9a9898c06cf85bffe792f182fccc95287ada4b6082e54dc |
|
MD5 | e1ed8e36fb81cf963768f92bc7c61ee7 |
|
BLAKE2b-256 | 30aedfb5c7b93537e2f37a1632c6c9be3530f31e04b6fd4dbb2ea56bce6326a6 |
Close
Hashes for wavelet_buffer-0.4.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 40b6a958a885f03f71008996399256955e63d1b544e25884336c121ba484f6ef |
|
MD5 | 6dd39e3607389d6e7dd41a4e73c77172 |
|
BLAKE2b-256 | 995f8551b08f2bea4f67072365297527dbacdf7065bdcac82df7cb0b42266362 |