--- license: other library_name: compressionkit pipeline_tag: other tags: - compressionkit - signal-compression - ecg - spiht - wavelet - edge-ai - hybrid - denoising --- # compressionkit-ecg-hybrid-2x A **ECG** signal compression codec: a learned wavelet-gain denoiser (trained weights) followed by wavelet + SPIHT + arithmetic coding. The deployable artifact is the denoiser weights, the bitstream contract, and a portable C99 reference implementation for the SPIHT stage. ## Operating point | Field | Value | |-------|-------| | Modality | ECG | | Sample rate | 256 Hz | | Frame size | 512 samples | | Target CR | 2x | | Wavelet | `bior4.4` | | DWT levels | 6 | | Bit budget | 4096 bits/frame | | Entropy coder | arithmetic coding | ## Quality metrics ### Fidelity & Robustness Both fidelity yardsticks are reported so the codec is judged fairly: **faithfulness** is PRD vs the recorded (still-noisy) input, while **truth fidelity** is PRD vs clean ground truth. Lower is better. | Metric | Value | |--------|-------| | Truth PRD vs clean (%) | 7.68 | | Truth PRD at native noise (%) | 34.61 | | Faithful PRD vs input (%) | 8.97 | | PRD degradation slope (PRD%/dB) | 2.42 | | PRD at 0 dB SNR (%) | 37.88 | | PRD at -6 dB SNR (%) | 54.38 | | Pure-noise imprint autocorr | 0.1242 | ### Time Domain _PRD here is faithfulness (vs the recorded input); see **Fidelity & Robustness** above for the clean-truth and noise-regime view._ | Metric | Mean | Median | P90 | |--------|------|--------|-----| | PRD vs input — faithfulness (%) | 8.9669 | 7.3373 | 14.5582 | | RMSE | 0.0897 | 0.0734 | 0.1456 | | Cosine Similarity | 0.9948 | 0.9979 | 0.9995 | ### Spectral - **Band Total Relative Error (median):** 0.1385 ### Bitrate ## Python quickstart ```python from compressionkit.runtime import load_codec codec = load_codec("Ambiq/compressionkit-ecg-hybrid-2x") enc = codec.compress(frame) # frame: (frame_size,) float32 recon = codec.decompress(enc) ``` ## C quickstart The SPIHT stage ships a portable C99 reference; the denoiser (`denoiser_gain_model.keras`) currently only has a Python/TFLite runtime path. Run the denoiser stage first (Python, or a converted TFLite Micro model) and feed its output into the C SPIHT encoder below. ```c #include "spiht_app_config.h" float frame[APP_SPIHT_FRAME_SIZE]; uint8_t bitstream[APP_SPIHT_MAX_BYTES]; /* ... fill frame from sensor (post-denoise, if hybrid) ... */ size_t nbits = spiht_encode_frame(&enc, bitstream, APP_SPIHT_MAX_BITS); ``` ## Files | File | Description | |------|-------------| | `config.json` | Deploy manifest (`family: "hybrid"`) | | `spiht_config.json` | Codec parameters (language-neutral) | | `sample_stimulus.npz` | Synthetic test frames | | `reference_vectors.npz` | Reference encode/decode vectors | | `c_sources/spiht.[ch]` | Portable C99 reference | | `c_sources/spiht_app_config.h` | Codec-specific defines | | `model_card.json` | Provenance metadata | | `scorecard.json` | Frozen evaluation summary | | `denoiser_gain_model.keras` | Learned wavelet-gain denoiser (trained weights) | | `hybrid_manifest.json` | Pipeline stage order (denoise → SPIHT) | ## Dataset & license Evaluation data: PTB-XL (CC BY 4.0). Sample data may include excerpts under the original license terms. Codec source released under the **OTHER** license. ## Citation ```bibtex @software{compressionkit, author = {Ambiq AI}, title = {compressionKIT: Signal Compression for Edge AI}, url = {https://github.com/AmbiqAI/compressionkit} } ```