{"id":15296168,"url":"https://github.com/panda-official/waveletbuffer","last_synced_at":"2025-08-31T22:07:15.992Z","repository":{"id":37783618,"uuid":"475828552","full_name":"panda-official/WaveletBuffer","owner":"panda-official","description":"A universal  C++ compression library based on wavelet transformation","archived":false,"fork":false,"pushed_at":"2024-06-14T14:25:59.000Z","size":606,"stargazers_count":12,"open_issues_count":0,"forks_count":6,"subscribers_count":3,"default_branch":"develop","last_synced_at":"2025-08-31T22:07:14.679Z","etag":null,"topics":["compression","cpp","cpp20","signal-processing","wavelet","wavelet-transform"],"latest_commit_sha":null,"homepage":"https://waveletbuffer.readthedocs.io/en/latest/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/panda-official.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-03-30T10:28:00.000Z","updated_at":"2025-08-25T17:04:32.000Z","dependencies_parsed_at":"2023-12-13T10:41:46.816Z","dependency_job_id":"eb4a4832-d405-4399-901c-7feef0322afa","html_url":"https://github.com/panda-official/WaveletBuffer","commit_stats":{"total_commits":78,"total_committers":4,"mean_commits":19.5,"dds":"0.42307692307692313","last_synced_commit":"b567eb0d0cdba3a629c3f508b9c1ef23166ee77a"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/panda-official/WaveletBuffer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/panda-official%2FWaveletBuffer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/panda-official%2FWaveletBuffer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/panda-official%2FWaveletBuffer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/panda-official%2FWaveletBuffer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/panda-official","download_url":"https://codeload.github.com/panda-official/WaveletBuffer/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/panda-official%2FWaveletBuffer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273046499,"owners_count":25036181,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compression","cpp","cpp20","signal-processing","wavelet","wavelet-transform"],"created_at":"2024-09-30T18:09:38.160Z","updated_at":"2025-08-31T22:07:15.972Z","avatar_url":"https://github.com/panda-official.png","language":"C++","readme":"![example workflow](https://github.com/panda-official/WaveletBuffer/actions/workflows/ci.yml/badge.svg)\n[![codecov](https://codecov.io/gh/panda-official/WaveletBuffer/branch/develop/graph/badge.svg?token=UWZLNR1PL6)](https://codecov.io/gh/panda-official/WaveletBuffer)\n\n# WaveletBuffer\nA universal  C++ compression library based on wavelet transformation\n\n## Features\n\n- Written in Modern C++\n- One-side wavelet decomposition for vectors and matrices\n- 5 Daubechies Wavelets DB1-DB5\n- Different denoising algorithms\n- Fast and efficient compression with [MatrixCompressor](https://github.com/panda-official/MatrixCompressor)\n- Cross-platform\n\n## Requirements\n\n* CMake \u003e= 3.16\n* C++20 compiler\n* conan \u003e= 1.56, \u003c 2.0\n\n## Bindings\n\n* [Python](python/README.md)\n\n\n## Usage Example\n```c++\n#include \u003cwavelet_buffer/wavelet_buffer.h\u003e\n\nusing drift::Signal1D;\nusing drift::WaveletBuffer;\nusing drift::WaveletParameters;\nusing drift::WaveletTypes;\nusing DenoiseAlgo = drift::ThresholdAbsDenoiseAlgorithm\u003cfloat\u003e;\n\nint main() {\n  Signal1D original = blaze::generate(\n      1000, [](auto index) { return static_cast\u003cfloat\u003e(index % 100); });\n\n  std::cout \u003c\u003c \"Original size: \" \u003c\u003c original.size() * 4 \u003c\u003c std::endl;\n  WaveletBuffer buffer(WaveletParameters{\n      .signal_shape = {original.size()},\n      .signal_number = 1,\n      .decomposition_steps = 3,\n      .wavelet_type = WaveletTypes::kDB1,\n  });\n\n  // Wavelet decomposition of the signal and denoising\n  buffer.Decompose(original, DenoiseAlgo(0, 0.3));\n\n  // Compress the buffer\n  std::string arch;\n  buffer.Serialize(\u0026arch, 16);\n  std::cout \u003c\u003c \"Compressed size: \" \u003c\u003c arch.size() \u003c\u003c std::endl;\n\n  // Decompress the buffer\n  auto restored_buffer = WaveletBuffer::Parse(arch);\n  Signal1D output_signal;\n\n  // Restore the signal from wavelet decomposition\n  restored_buffer-\u003eCompose(\u0026output_signal);\n\n  std::cout \u003c\u003c \"Distance between original and restored signal: \"\n            \u003c\u003c blaze::norm(original - output_signal) / original.size()\n            \u003c\u003c std::endl;\n  std::cout \u003c\u003c \"Compression rate: \" \u003c\u003c original.size() * 4. / arch.size() * 100\n            \u003c\u003c \"%\" \u003c\u003c std::endl;\n}\n```\n\n## Build and Installing\n\nOn Ubuntu:\n\n```\ngit clone https://github.com/panda-official/WaveletBuffer.git\n\nmkdir build \u0026\u0026 cd build\ncmake -DWB_BUILD_TESTS=ON -DWB_BUILD_BENCHMARKS=ON -DWB_BUILD_EXAMPLES=ON -DCODE_COVERAGE=ON ..\ncmake --build . --target install\n```\n\nOn MacOS:\n\n```\ngit clone https://github.com/panda-official/WaveletBuffer.git\nmkdir build \u0026\u0026 cd build\ncmake -DWB_BUILD_TESTS=ON -DWB_BUILD_BENCHMARKS=ON -DWB_BUILD_EXAMPLES=ON -DCODE_COVERAGE=ON ..\ncmake --build . --target install\n```\n\nOn Windows:\n\n```\ngit clone https://github.com/panda-official/WaveletBuffer.git\nmkdir build \u0026\u0026 cd build\ncmake -DWB_BUILD_TESTS=ON -DWB_BUILD_BENCHMARKS=ON -DWB_BUILD_EXAMPLES=ON -DCODE_COVERAGE=ON ..\ncmake --build . --config Release --target install\n```\n\n## Integration\n\n### Using cmake target\n```cmake\nfind_package(wavelet_buffer REQUIRED)\n\nadd_executable(program program.cpp)\ntarget_link_libraries(program wavelet_buffer::wavelet_buffer)\n\n# WaveletBuffer use blaze as linear algebra library which expects you to have a LAPACK library installed\n# (it will still work without LAPACK and will not be reduced in functionality, but performance may be limited)\nfind_package(LAPACK REQUIRED)\ntarget_link_libraries(program ${LAPACK_LIBRARIES})\n```\n\n## References\n\n* [Documentation](https://waveletbuffer.readthedocs.io)\n* [Drift Protocol](https://github.com/panda-official/DriftProtocol) - Protobuf Libraries to encode message in Drift infrastructure\n* [Drift Python Client](https://github.com/panda-official/DriftPythonClient) - Python Client to access data of _PANDA|Drift_\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpanda-official%2Fwaveletbuffer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpanda-official%2Fwaveletbuffer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpanda-official%2Fwaveletbuffer/lists"}