apage-ambiq commited on
Commit
d4c56a7
·
verified ·
1 Parent(s): 13ec956

Release deployment artifacts from CompressionKit

Browse files
README.md ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ library_name: compressionkit
4
+ pipeline_tag: other
5
+ tags:
6
+ - compressionkit
7
+ - signal-compression
8
+ - ecg
9
+ - spiht
10
+ - wavelet
11
+ - edge-ai
12
+ - dsp
13
+ ---
14
+
15
+ # compressionkit-ecg-spiht-8x
16
+
17
+ A **ECG** signal compression codec built on wavelet + SPIHT + arithmetic coding. **DSP-only — no trained weights.** The deployable artifact is the bitstream contract plus a portable C99 reference implementation.
18
+
19
+ ## Operating point
20
+
21
+ | Field | Value |
22
+ |-------|-------|
23
+ | Modality | ECG |
24
+ | Sample rate | 256 Hz |
25
+ | Frame size | 512 samples |
26
+ | Target CR | 8x |
27
+ | Wavelet | `bior4.4` |
28
+ | DWT levels | 6 |
29
+ | Bit budget | 1024 bits/frame |
30
+ | Entropy coder | arithmetic coding |
31
+
32
+ ## Quality metrics
33
+
34
+ ### Fidelity & Robustness
35
+
36
+ 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.
37
+
38
+ | Metric | Value |
39
+ |--------|-------|
40
+ | Truth PRD vs clean (%) | 1.86 |
41
+ | Truth PRD at native noise (%) | 38.31 |
42
+ | Faithful PRD vs input (%) | 3.88 |
43
+ | PRD degradation slope (PRD%/dB) | 3.99 |
44
+ | PRD at 0 dB SNR (%) | 51.77 |
45
+ | PRD at -6 dB SNR (%) | 79.87 |
46
+ | Pure-noise imprint autocorr | 0.2469 |
47
+
48
+ ### Time Domain
49
+
50
+ _PRD here is faithfulness (vs the recorded input); see **Fidelity & Robustness** above for the clean-truth and noise-regime view._
51
+
52
+ | Metric | Mean | Median | P90 |
53
+ |--------|------|--------|-----|
54
+ | PRD vs input — faithfulness (%) | 3.8840 | 3.0432 | 7.4458 |
55
+ | RMSE | 0.0388 | 0.0304 | 0.0745 |
56
+ | Cosine Similarity | 0.9987 | 0.9995 | 0.9999 |
57
+
58
+ ### Spectral
59
+
60
+ - **Band Total Relative Error (median):** 0.0158
61
+
62
+ ### Bitrate
63
+
64
+
65
+ ## Python quickstart
66
+
67
+ ```python
68
+ from compressionkit.runtime import load_codec
69
+
70
+ codec = load_codec("Ambiq/compressionkit-ecg-spiht-8x")
71
+ enc = codec.compress(frame) # frame: (frame_size,) float32
72
+ recon = codec.decompress(enc)
73
+ ```
74
+
75
+ ## C quickstart
76
+
77
+ ```c
78
+ #include "spiht_app_config.h"
79
+
80
+ float frame[APP_SPIHT_FRAME_SIZE];
81
+ uint8_t bitstream[APP_SPIHT_MAX_BYTES];
82
+ /* ... fill frame from sensor (post-denoise, if hybrid) ... */
83
+ size_t nbits = spiht_encode_frame(&enc, bitstream, APP_SPIHT_MAX_BITS);
84
+ ```
85
+
86
+ ## Files
87
+
88
+ | File | Description |
89
+ |------|-------------|
90
+ | `config.json` | Deploy manifest (`family: "spiht"`) |
91
+ | `spiht_config.json` | Codec parameters (language-neutral) |
92
+ | `sample_stimulus.npz` | Synthetic test frames |
93
+ | `reference_vectors.npz` | Reference encode/decode vectors |
94
+ | `c_sources/spiht.[ch]` | Portable C99 reference |
95
+ | `c_sources/spiht_app_config.h` | Codec-specific defines |
96
+ | `model_card.json` | Provenance metadata |
97
+ | `scorecard.json` | Frozen evaluation summary |
98
+
99
+ ## Dataset & license
100
+
101
+ Evaluation data: PTB-XL (CC BY 4.0). Sample data may include excerpts under the original license terms.
102
+
103
+ Codec source released under the **APACHE-2.0** license.
104
+
105
+ ## Citation
106
+
107
+ ```bibtex
108
+ @software{compressionkit,
109
+ author = {Ambiq AI},
110
+ title = {compressionKIT: Signal Compression for Edge AI},
111
+ url = {https://github.com/AmbiqAI/compressionkit}
112
+ }
113
+ ```
checksums.json ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "README.md": {
3
+ "sha256": "0edaab42318beb88b5fb46f92d821cb2827f5e500e515493b0ba23fafbd9a08a",
4
+ "bytes": 1677
5
+ },
6
+ "codec_spec.json": {
7
+ "sha256": "15801fcdaf136d0505aa596102dd3b93d4b35e8a7c846318f552fd82e0ea5497",
8
+ "bytes": 575
9
+ },
10
+ "deploy_manifest.json": {
11
+ "sha256": "4349c28c0917f69f783182b7a1b3d964445d04c70a49769d62114032508fd94c",
12
+ "bytes": 1514
13
+ },
14
+ "model_card.json": {
15
+ "sha256": "134ec34c141d057d60543c687e4eab5c41dd774d4f8b5d84e581083d64a89de0",
16
+ "bytes": 178
17
+ },
18
+ "reference_vectors.npz": {
19
+ "sha256": "f76f07055e9e022ee8de6d8b7f60751fd7a1f770d5a79a874184c71d471820fe",
20
+ "bytes": 31175
21
+ },
22
+ "sample_stimulus.npz": {
23
+ "sha256": "c266d1e5539601457ca51ada46e9edb2e99bb6f148cf37be658dcb1670f94dc0",
24
+ "bytes": 14744
25
+ },
26
+ "scorecard.json": {
27
+ "sha256": "0cd05befba79493545242565d3c3105d724ffbc654d2236ce55470575411a147",
28
+ "bytes": 211
29
+ },
30
+ "spiht_app_config.h": {
31
+ "sha256": "eeb8986d7033e7d117d634bc487a63289f76be738ae4bfb35afe9953e91f54ba",
32
+ "bytes": 645
33
+ },
34
+ "spiht_config.json": {
35
+ "sha256": "09a38068ea27f66b4f418b67d95f110489a3d2475909f8a4cd4eb06d6e3e6d93",
36
+ "bytes": 188
37
+ }
38
+ }
codec_spec.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "family": "spiht",
3
+ "method": "dsp",
4
+ "modality": "ecg",
5
+ "sample_rate": 256,
6
+ "frame_size": 512,
7
+ "compression_ratio": 8.0,
8
+ "experiment_id": "ecg-spiht-8x",
9
+ "run_name": null,
10
+ "package_version": "1.0",
11
+ "packet_contract": {
12
+ "payload_type": "uint8_bitstream",
13
+ "nbits_field": true,
14
+ "byte_order": "little-endian-byte-array"
15
+ },
16
+ "codec": {
17
+ "modality": "ecg",
18
+ "sample_rate": 256,
19
+ "frame_size": 512,
20
+ "target_cr": 8.0,
21
+ "wavelet": "bior4.4",
22
+ "levels": 6,
23
+ "use_ac": true,
24
+ "bits_per_sample": 16,
25
+ "max_bits": 1024
26
+ }
27
+ }
config.json ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "manifest_version": 1,
3
+ "package_version": "1.0",
4
+ "family": "spiht",
5
+ "method": "dsp",
6
+ "modality": "ecg",
7
+ "experiment_id": "ecg-spiht-8x",
8
+ "run_name": null,
9
+ "compression_ratio": 8.0,
10
+ "spec": "codec_spec.json",
11
+ "scorecard": "scorecard.json",
12
+ "checksums": "checksums.json",
13
+ "model_name": "ecg_spiht_8x",
14
+ "model_version": "1.0",
15
+ "codec": {
16
+ "modality": "ecg",
17
+ "sample_rate": 256,
18
+ "frame_size": 512,
19
+ "target_cr": 8.0,
20
+ "wavelet": "bior4.4",
21
+ "levels": 6,
22
+ "use_ac": true,
23
+ "bits_per_sample": 16,
24
+ "max_bits": 1024
25
+ },
26
+ "artifacts": {
27
+ "manifest": "deploy_manifest.json",
28
+ "spiht_config": "spiht_config.json",
29
+ "sample_stimulus": "sample_stimulus.npz",
30
+ "reference_vectors": "reference_vectors.npz",
31
+ "app_config_header": "spiht_app_config.h",
32
+ "model_card": "model_card.json",
33
+ "scorecard": "scorecard.json",
34
+ "codec_spec": "codec_spec.json",
35
+ "readme": "README.md",
36
+ "checksums": "checksums.json"
37
+ },
38
+ "model_card": {
39
+ "experiment_id": "ecg-spiht-8x",
40
+ "modality": "ecg",
41
+ "method": "spiht",
42
+ "sample_rate": 256,
43
+ "compression_ratio": 8,
44
+ "wavelet": "bior4.4",
45
+ "levels": 6,
46
+ "use_ac": true,
47
+ "frame_size": 512,
48
+ "dataset_id": "ptb-xl"
49
+ },
50
+ "scorecard_summary": {
51
+ "mean_prd_percent": 3.884,
52
+ "median_prd_percent": 3.0432,
53
+ "p95_prd_percent": 9.2236,
54
+ "mean_snr_db": 30.073,
55
+ "median_snr_db": 30.333,
56
+ "actual_cr": 7.999,
57
+ "bitrate_bps": 512.07,
58
+ "n_frames": 1000
59
+ }
60
+ }
model_card.json ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model_name": "ecg_spiht_8x",
3
+ "model_version": "1.0",
4
+ "modality": "ecg",
5
+ "sample_rate": 256,
6
+ "compression_ratio": 8,
7
+ "license": "other",
8
+ "scorecard_summary": {}
9
+ }
quality_scorecard.json ADDED
@@ -0,0 +1,1057 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "headline": {
3
+ "num_samples": 1000,
4
+ "compression_ratio": 7.999,
5
+ "faithful_prd_vs_input_pct": 3.884,
6
+ "truth_prd_vs_clean_pct": 1.865,
7
+ "truth_prd_at_native_noise_pct": 38.311,
8
+ "prd_degradation_slope_per_db": 3.99,
9
+ "prd_at_0db_pct": 51.771,
10
+ "prd_at_-6db_pct": 79.867,
11
+ "imprint_output_autocorr": 0.2469
12
+ },
13
+ "run_dir": "results/ecg_spiht_256hz_08x_golden",
14
+ "modality": "ecg",
15
+ "sample_rate": 256,
16
+ "num_samples_loaded": 1000,
17
+ "num_samples": 1000,
18
+ "num_samples_rejected": 0,
19
+ "min_signal_std": 0.0001,
20
+ "noise_estimator": "bp",
21
+ "bitrate": {
22
+ "codec_compression_ratio": 7.9989,
23
+ "effective_downsample_factor": 1,
24
+ "downsample_factor": 1,
25
+ "effective_sample_rate_hz": 256,
26
+ "uniform_codec_bitrate_bps": 512.07,
27
+ "uniform_bits_per_frame": 1024.14,
28
+ "raw_bitrate_bps": 4096,
29
+ "raw_bits_per_frame": 8192,
30
+ "encoder_total_params": 0
31
+ },
32
+ "time_domain": {
33
+ "prd_percent": {
34
+ "n": 1000,
35
+ "n_dropped": 0,
36
+ "mean": 3.8840112297936837,
37
+ "std": 3.2708236210133967,
38
+ "median": 3.0432137881471792,
39
+ "p10": 1.5679338246734715,
40
+ "p90": 7.445797968432937,
41
+ "max": 35.671991746644096,
42
+ "min": 0.7942406124415968
43
+ },
44
+ "prdn_noise_percent": {
45
+ "n": 1000,
46
+ "n_dropped": 0,
47
+ "mean": 0.0,
48
+ "std": 0.0,
49
+ "median": 0.0,
50
+ "p10": 0.0,
51
+ "p90": 0.0,
52
+ "max": 0.0,
53
+ "min": 0.0
54
+ },
55
+ "rmse": {
56
+ "n": 1000,
57
+ "n_dropped": 0,
58
+ "mean": 0.038839771564677224,
59
+ "std": 0.032707899818936674,
60
+ "median": 0.03043177752493033,
61
+ "p10": 0.015679229041446526,
62
+ "p90": 0.07445699290157669,
63
+ "max": 0.3567163560396821,
64
+ "min": 0.007942382927649167
65
+ },
66
+ "cosine_similarity": {
67
+ "n": 1000,
68
+ "n_dropped": 0,
69
+ "mean": 0.9987140232920647,
70
+ "std": 0.003805665156310596,
71
+ "median": 0.9995369017124176,
72
+ "p10": 0.9972440659999847,
73
+ "p90": 0.9998773813247681,
74
+ "max": 0.9999684691429138,
75
+ "min": 0.9364176988601685
76
+ }
77
+ },
78
+ "spectral": {
79
+ "band_total_rel_error": {
80
+ "n": 1000,
81
+ "n_dropped": 0,
82
+ "mean": 0.020497223527047453,
83
+ "std": 0.0177426692820455,
84
+ "median": 0.015764304630104344,
85
+ "p10": 0.005270400632299576,
86
+ "p90": 0.04202261900666001,
87
+ "max": 0.24061172996488198,
88
+ "min": 0.001146485690793292
89
+ },
90
+ "per_band_rel_error": {
91
+ "band_0.5_5_rel_error": {
92
+ "n": 1000,
93
+ "n_dropped": 0,
94
+ "mean": 0.007015147148594202,
95
+ "std": 0.00976495355927183,
96
+ "median": 0.004383671426423959,
97
+ "p10": 0.0006816820331345179,
98
+ "p90": 0.015630696221016413,
99
+ "max": 0.16161927154609718,
100
+ "min": 5.190374105197531e-06
101
+ },
102
+ "band_5_15_rel_error": {
103
+ "n": 1000,
104
+ "n_dropped": 0,
105
+ "mean": 0.006810556210992308,
106
+ "std": 0.010066370453224453,
107
+ "median": 0.004137277726678313,
108
+ "p10": 0.0007244281175421973,
109
+ "p90": 0.01472210792775239,
110
+ "max": 0.121313366434904,
111
+ "min": 9.83152114618342e-07
112
+ },
113
+ "band_15_40_rel_error": {
114
+ "n": 1000,
115
+ "n_dropped": 0,
116
+ "mean": 0.011296655833779506,
117
+ "std": 0.01624824833020934,
118
+ "median": 0.006648023492931011,
119
+ "p10": 0.001163632370746493,
120
+ "p90": 0.025950693104023422,
121
+ "max": 0.15539145716491734,
122
+ "min": 1.1985245394828982e-05
123
+ },
124
+ "band_40_80_rel_error": {
125
+ "n": 1000,
126
+ "n_dropped": 0,
127
+ "mean": 0.05686653491482379,
128
+ "std": 0.05903794962463782,
129
+ "median": 0.04075277549157511,
130
+ "p10": 0.006204828203153473,
131
+ "p90": 0.12901330518484758,
132
+ "max": 0.8283902263237897,
133
+ "min": 8.1587715689226e-06
134
+ },
135
+ "band_total_rel_error": {
136
+ "n": 1000,
137
+ "n_dropped": 0,
138
+ "mean": 0.020497223527047453,
139
+ "std": 0.0177426692820455,
140
+ "median": 0.015764304630104344,
141
+ "p10": 0.005270400632299576,
142
+ "p90": 0.04202261900666001,
143
+ "max": 0.24061172996488198,
144
+ "min": 0.001146485690793292
145
+ }
146
+ },
147
+ "weighted_freq_prd_percent": {
148
+ "n": 1000,
149
+ "n_dropped": 0,
150
+ "mean": 2.680039060358527,
151
+ "std": 2.0713081277358936,
152
+ "median": 2.1605574292796006,
153
+ "p10": 1.1193817994946402,
154
+ "p90": 4.872174661200073,
155
+ "max": 21.84177016812817,
156
+ "min": 0.5580532976102264
157
+ },
158
+ "coherence": {
159
+ "n": 1000,
160
+ "n_dropped": 0,
161
+ "mean": 1.0,
162
+ "std": 7.021666937153402e-18,
163
+ "median": 1.0,
164
+ "p10": 1.0,
165
+ "p90": 1.0,
166
+ "max": 1.0,
167
+ "min": 0.9999999999999998
168
+ }
169
+ },
170
+ "physiology": {
171
+ "vs_raw_original": {
172
+ "num_total_pairs": 1000.0,
173
+ "num_valid_pairs": 973.0,
174
+ "hr_mae_bpm": 0.8903444104999889,
175
+ "hr_median_ae_bpm": 0.0,
176
+ "hr_std_ae_bpm": 3.519383682396205,
177
+ "hr_p90_ae_bpm": 0.5121920844449206,
178
+ "hr_max_ae_bpm": 30.695027774014363,
179
+ "hr_bias_bpm": 0.24780378638014677,
180
+ "hr_bias_std_bpm": 3.62179071133064,
181
+ "peak_count_exact_match_pct": 93.93627954779033,
182
+ "total_missed_peaks": 27.0,
183
+ "total_extra_peaks": 32.0,
184
+ "peak_timing_mae_ms": 8.86750768442623,
185
+ "peak_timing_median_ms": 0.0,
186
+ "peak_timing_std_ms": 74.4909559459923,
187
+ "peak_timing_p90_ms": 0.0,
188
+ "peak_timing_max_ms": 964.84375,
189
+ "peak_timing_within_10ms_pct": 97.5,
190
+ "sdnn_mae_ms": 2.739848379504238,
191
+ "sdnn_std_ae_ms": 12.556863633614741,
192
+ "sdnn_p90_ae_ms": 4.510548978043943,
193
+ "rmssd_mae_ms": 3.1580713068013404,
194
+ "rmssd_std_ae_ms": 14.098116766676908,
195
+ "rmssd_p90_ae_ms": 5.524271728019897
196
+ },
197
+ "vs_filtered_original": {
198
+ "num_total_pairs": 1000.0,
199
+ "num_valid_pairs": 973.0,
200
+ "hr_mae_bpm": 1.3729838056839319,
201
+ "hr_median_ae_bpm": 0.14986827983217665,
202
+ "hr_std_ae_bpm": 5.015107525701715,
203
+ "hr_p90_ae_bpm": 1.4299190568044486,
204
+ "hr_max_ae_bpm": 81.4345859971932,
205
+ "hr_bias_bpm": 0.1270265353283639,
206
+ "hr_bias_std_bpm": 5.1981008343762225,
207
+ "peak_count_exact_match_pct": 92.90853031860226,
208
+ "total_missed_peaks": 36.0,
209
+ "total_extra_peaks": 33.0,
210
+ "peak_timing_mae_ms": 12.982536764705882,
211
+ "peak_timing_median_ms": 0.0,
212
+ "peak_timing_std_ms": 82.50055129353322,
213
+ "peak_timing_p90_ms": 3.90625,
214
+ "peak_timing_max_ms": 1015.625,
215
+ "peak_timing_within_10ms_pct": 95.87418300653594,
216
+ "sdnn_mae_ms": 5.739248553333784,
217
+ "sdnn_std_ae_ms": 20.93350817178139,
218
+ "sdnn_p90_ae_ms": 6.765823467065928,
219
+ "rmssd_mae_ms": 6.888278753769465,
220
+ "rmssd_std_ae_ms": 25.363600477467383,
221
+ "rmssd_p90_ae_ms": 8.286407592029853
222
+ },
223
+ "by_noise_tertile": {
224
+ "thresholds_bp_noise_rms": {
225
+ "clean_max": 0.22999871272534286,
226
+ "median_max": 0.3920438317209633
227
+ },
228
+ "buckets": {
229
+ "clean": {
230
+ "n": 324,
231
+ "hr_mae_bpm": {
232
+ "n": 324,
233
+ "n_dropped": 0,
234
+ "mean": 0.5223879590461533,
235
+ "std": 2.9669948050447847,
236
+ "median": 0.0,
237
+ "p10": 0.0,
238
+ "p90": 0.27820002063560295,
239
+ "max": 30.695027774014363,
240
+ "min": 0.0
241
+ },
242
+ "sdnn_mae_ms": {
243
+ "n": 138,
244
+ "n_dropped": 0,
245
+ "mean": 2.9863934786504998,
246
+ "std": 13.769328025102318,
247
+ "median": 0.0,
248
+ "p10": 0.0,
249
+ "p90": 4.510548978043951,
250
+ "max": 117.39815222264123,
251
+ "min": 0.0
252
+ },
253
+ "rmssd_mae_ms": {
254
+ "n": 138,
255
+ "n_dropped": 0,
256
+ "mean": 3.1146520569779357,
257
+ "std": 13.104907846032265,
258
+ "median": 0.0,
259
+ "p10": 0.0,
260
+ "p90": 5.524271728019903,
261
+ "max": 107.7232986963881,
262
+ "min": 0.0
263
+ }
264
+ },
265
+ "median": {
266
+ "n": 325,
267
+ "hr_mae_bpm": {
268
+ "n": 325,
269
+ "n_dropped": 0,
270
+ "mean": 1.1073962555187133,
271
+ "std": 3.8953160730399143,
272
+ "median": 0.0,
273
+ "p10": 0.0,
274
+ "p90": 0.8025275379708642,
275
+ "max": 26.583491821985547,
276
+ "min": 0.0
277
+ },
278
+ "sdnn_mae_ms": {
279
+ "n": 155,
280
+ "n_dropped": 0,
281
+ "mean": 0.8297355181321688,
282
+ "std": 1.6928539697176916,
283
+ "median": 0.0,
284
+ "p10": 0.0,
285
+ "p90": 2.2552744890219856,
286
+ "max": 11.276372445109871,
287
+ "min": 0.0
288
+ },
289
+ "rmssd_mae_ms": {
290
+ "n": 155,
291
+ "n_dropped": 0,
292
+ "mean": 1.0110841056015798,
293
+ "std": 2.0824097463457987,
294
+ "median": 0.0,
295
+ "p10": 0.0,
296
+ "p90": 2.762135864009963,
297
+ "max": 13.810679320049758,
298
+ "min": 0.0
299
+ }
300
+ },
301
+ "noisy": {
302
+ "n": 324,
303
+ "hr_mae_bpm": {
304
+ "n": 324,
305
+ "n_dropped": 0,
306
+ "mean": 1.0405791038331909,
307
+ "std": 3.6010854670628447,
308
+ "median": 0.0,
309
+ "p10": 0.0,
310
+ "p90": 1.4961974206996516,
311
+ "max": 22.32253962486942,
312
+ "min": 0.0
313
+ },
314
+ "sdnn_mae_ms": {
315
+ "n": 135,
316
+ "n_dropped": 0,
317
+ "mean": 4.68091704491525,
318
+ "std": 17.168888730658267,
319
+ "median": 0.0,
320
+ "p10": 0.0,
321
+ "p90": 4.715747921940822,
322
+ "max": 130.80592036327457,
323
+ "min": 0.0
324
+ },
325
+ "rmssd_mae_ms": {
326
+ "n": 135,
327
+ "n_dropped": 0,
328
+ "mean": 5.667514807998323,
329
+ "std": 20.928626393562887,
330
+ "median": 0.0,
331
+ "p10": 0.0,
332
+ "p90": 7.129884912731746,
333
+ "max": 160.2038801125772,
334
+ "min": 0.0
335
+ }
336
+ }
337
+ }
338
+ }
339
+ },
340
+ "morphology": {
341
+ "num_windows": 1000,
342
+ "num_windows_with_beats": 1000,
343
+ "num_beats_matched": 2469,
344
+ "r_amplitude": {
345
+ "orig": {
346
+ "n": 2469,
347
+ "mean": 5.106483284762972,
348
+ "std": 1.7550622785860068,
349
+ "median": 5.493165615610351,
350
+ "p10": 2.1655347272038536,
351
+ "p90": 6.967342533982293,
352
+ "min": 0.14606412627618914,
353
+ "max": 10.645864129634788
354
+ },
355
+ "recon": {
356
+ "n": 2469,
357
+ "mean": 5.109044808938828,
358
+ "std": 1.7540763176331446,
359
+ "median": 5.5019502664597875,
360
+ "p10": 2.1753874102900754,
361
+ "p90": 6.95601761075717,
362
+ "min": 0.14656473062072906,
363
+ "max": 10.651807793753115
364
+ },
365
+ "abs_delta": {
366
+ "n": 2469,
367
+ "mean": 0.02112243799718501,
368
+ "std": 0.031743108410785446,
369
+ "median": 0.013052317521845325,
370
+ "p10": 0.00235964535197315,
371
+ "p90": 0.04443346883124699,
372
+ "min": 4.412151228372352e-06,
373
+ "max": 0.8856587098212063
374
+ },
375
+ "delta": {
376
+ "n": 2469,
377
+ "mean": 0.002561524175855769,
378
+ "std": 0.03804235682000143,
379
+ "median": 0.0008515002680402617,
380
+ "p10": -0.027308210024760804,
381
+ "p90": 0.03231113211629937,
382
+ "min": -0.29989994932821706,
383
+ "max": 0.8856587098212063
384
+ }
385
+ },
386
+ "qrs_width_ms": {
387
+ "orig": {
388
+ "n": 2469,
389
+ "mean": 73.41186968408262,
390
+ "std": 15.74804998325554,
391
+ "median": 74.21875,
392
+ "p10": 54.6875,
393
+ "p90": 101.5625,
394
+ "min": 23.4375,
395
+ "max": 101.5625
396
+ },
397
+ "recon": {
398
+ "n": 2469,
399
+ "mean": 73.46724382341029,
400
+ "std": 15.688475553768187,
401
+ "median": 74.21875,
402
+ "p10": 54.6875,
403
+ "p90": 101.5625,
404
+ "min": 27.34375,
405
+ "max": 101.5625
406
+ },
407
+ "abs_delta": {
408
+ "n": 2469,
409
+ "mean": 0.9730027339003645,
410
+ "std": 3.9211019436671415,
411
+ "median": 0.0,
412
+ "p10": 0.0,
413
+ "p90": 3.90625,
414
+ "min": 0.0,
415
+ "max": 54.6875
416
+ },
417
+ "delta": {
418
+ "n": 2469,
419
+ "mean": 0.055374139327663024,
420
+ "std": 4.039642122453614,
421
+ "median": 0.0,
422
+ "p10": 0.0,
423
+ "p90": 0.0,
424
+ "min": -50.78125,
425
+ "max": 54.6875
426
+ }
427
+ },
428
+ "st_deviation": {
429
+ "orig": {
430
+ "n": 2379,
431
+ "mean": -0.08826343352040417,
432
+ "std": 0.6974349046922551,
433
+ "median": -0.07900503201612286,
434
+ "p10": -0.7636725712947089,
435
+ "p90": 0.45902816028972443,
436
+ "min": -3.196353637542299,
437
+ "max": 5.885724864483545
438
+ },
439
+ "recon": {
440
+ "n": 2379,
441
+ "mean": -0.08924011368353617,
442
+ "std": 0.6966761584424268,
443
+ "median": -0.08084547824839872,
444
+ "p10": -0.7776567703715781,
445
+ "p90": 0.45741750700865597,
446
+ "min": -3.167612578354168,
447
+ "max": 5.881542335100175
448
+ },
449
+ "abs_delta": {
450
+ "n": 2379,
451
+ "mean": 0.028596220915268148,
452
+ "std": 0.05646715065772953,
453
+ "median": 0.016521166838300516,
454
+ "p10": 0.0028883639610697296,
455
+ "p90": 0.06257665646197359,
456
+ "min": 5.107980197704975e-07,
457
+ "max": 1.3892312137760763
458
+ },
459
+ "delta": {
460
+ "n": 2379,
461
+ "mean": -0.0009766801631320016,
462
+ "std": 0.06328766901930018,
463
+ "median": -0.0003400819536540922,
464
+ "p10": -0.03807184424051578,
465
+ "p90": 0.03903506389174415,
466
+ "min": -1.3194291776642093,
467
+ "max": 1.3892312137760763
468
+ }
469
+ },
470
+ "t_amplitude": {
471
+ "orig": {
472
+ "n": 2316,
473
+ "mean": 1.1557765006548992,
474
+ "std": 1.4937146304353133,
475
+ "median": 1.33907087586785,
476
+ "p10": -0.9540406520422422,
477
+ "p90": 2.7505082614262477,
478
+ "min": -6.4516422819751575,
479
+ "max": 7.349344800134131
480
+ },
481
+ "recon": {
482
+ "n": 2316,
483
+ "mean": 1.1538874871639662,
484
+ "std": 1.4959623034050218,
485
+ "median": 1.3414300146033193,
486
+ "p10": -0.9557416245899509,
487
+ "p90": 2.759208320299438,
488
+ "min": -6.337218705727515,
489
+ "max": 7.361900974094114
490
+ },
491
+ "abs_delta": {
492
+ "n": 2316,
493
+ "mean": 0.041027222977706335,
494
+ "std": 0.126473210299573,
495
+ "median": 0.019383074214501805,
496
+ "p10": 0.0026708838601493257,
497
+ "p90": 0.07473324026215933,
498
+ "min": 9.257117981942287e-06,
499
+ "max": 2.4886252821657155
500
+ },
501
+ "delta": {
502
+ "n": 2316,
503
+ "mean": -0.0018890134909328145,
504
+ "std": 0.13294787541278547,
505
+ "median": -9.223264803176479e-05,
506
+ "p10": -0.044946568910058105,
507
+ "p90": 0.04696076913311509,
508
+ "min": -2.4886252821657155,
509
+ "max": 1.939513557299418
510
+ }
511
+ },
512
+ "baseline_drift": {
513
+ "orig": {
514
+ "n": 2469,
515
+ "mean": -0.357029214619568,
516
+ "std": 0.5839703582436081,
517
+ "median": -0.3684001670187222,
518
+ "p10": -0.8910601311489106,
519
+ "p90": 0.29071443871136626,
520
+ "min": -4.856197967682362,
521
+ "max": 2.190076471852864
522
+ },
523
+ "recon": {
524
+ "n": 2469,
525
+ "mean": -0.3559722661136686,
526
+ "std": 0.582813728220067,
527
+ "median": -0.3695169945950044,
528
+ "p10": -0.8880950446227386,
529
+ "p90": 0.29069232628405806,
530
+ "min": -4.856719952241616,
531
+ "max": 2.1916058701139725
532
+ },
533
+ "abs_delta": {
534
+ "n": 2469,
535
+ "mean": 0.020640527302533636,
536
+ "std": 0.03472931618244391,
537
+ "median": 0.011830273442307915,
538
+ "p10": 0.0021088931286832482,
539
+ "p90": 0.045082183244476756,
540
+ "min": 1.5241597167703347e-06,
541
+ "max": 0.7712792138944913
542
+ },
543
+ "delta": {
544
+ "n": 2469,
545
+ "mean": 0.0010569485058994083,
546
+ "std": 0.0403861316503905,
547
+ "median": -2.0935289426482484e-05,
548
+ "p10": -0.027729441156817195,
549
+ "p90": 0.029257557047485033,
550
+ "min": -0.4014403324483856,
551
+ "max": 0.7712792138944913
552
+ }
553
+ },
554
+ "beat_shape_correlation": {
555
+ "n": 2469,
556
+ "mean": 0.9996073181680776,
557
+ "std": 0.0012403374253073932,
558
+ "median": 0.9998789177144909,
559
+ "p10": 0.999209060097531,
560
+ "p90": 0.9999751625932705,
561
+ "min": 0.9686211583786922,
562
+ "max": 0.9999984455106599
563
+ },
564
+ "params": {
565
+ "sample_rate": 256,
566
+ "timing_tolerance_ms": 25.0,
567
+ "min_beats": 1
568
+ }
569
+ },
570
+ "stability": {
571
+ "hard_concat": {
572
+ "prd_percent_mean": 3.282201703174477,
573
+ "cosine_similarity_mean": 0.9994123578071594,
574
+ "mse_mean": 0.0011756749212509022,
575
+ "seam_ratio_mean": 0.5731069863747071,
576
+ "seam_rms_mean": 0.18017865624278784,
577
+ "non_seam_rms_mean": 0.2848012447357178,
578
+ "num_recordings": 10
579
+ },
580
+ "overlap_add": {
581
+ "prd_percent_mean": 3.1772366378865406,
582
+ "cosine_similarity_mean": 0.9994480729103088,
583
+ "mse_mean": 0.0011040973797207699,
584
+ "seam_ratio_mean": 0.6181993929472054,
585
+ "seam_rms_mean": 0.1895649865269661,
586
+ "non_seam_rms_mean": 0.2848160281777382,
587
+ "num_recordings": 10
588
+ },
589
+ "linear_crossfade": {
590
+ "prd_percent_mean": 3.1408874162390985,
591
+ "cosine_similarity_mean": 0.999460083246231,
592
+ "mse_mean": 0.001080048603762407,
593
+ "seam_ratio_mean": 0.6182909049593934,
594
+ "seam_rms_mean": 0.1895568324252963,
595
+ "non_seam_rms_mean": 0.2847407117486,
596
+ "num_recordings": 10
597
+ },
598
+ "tukey_overlap_add": {
599
+ "prd_percent_mean": 3.1008192976134863,
600
+ "cosine_similarity_mean": 0.9994731068611145,
601
+ "mse_mean": 0.0010540422532358206,
602
+ "seam_ratio_mean": 0.6185368766940235,
603
+ "seam_rms_mean": 0.18955991864204408,
604
+ "non_seam_rms_mean": 0.2846134573221207,
605
+ "num_recordings": 10
606
+ }
607
+ },
608
+ "by_noise_tertile": {
609
+ "thresholds_bp_noise_rms": {
610
+ "clean_max": 0.23304778728471306,
611
+ "median_max": 0.39769795604024094
612
+ },
613
+ "buckets": {
614
+ "clean": {
615
+ "n": 333,
616
+ "time_domain": {
617
+ "prd_percent": {
618
+ "n": 333,
619
+ "n_dropped": 0,
620
+ "mean": 3.1024477632606327,
621
+ "std": 1.8127322994308743,
622
+ "median": 2.5313865477471302,
623
+ "p10": 1.4108445168986874,
624
+ "p90": 5.721060829876195,
625
+ "max": 10.35516517678904,
626
+ "min": 0.7942406124415968
627
+ },
628
+ "prdn_noise_percent": {
629
+ "n": 333,
630
+ "n_dropped": 0,
631
+ "mean": 0.0,
632
+ "std": 0.0,
633
+ "median": 0.0,
634
+ "p10": 0.0,
635
+ "p90": 0.0,
636
+ "max": 0.0,
637
+ "min": 0.0
638
+ },
639
+ "rmse": {
640
+ "n": 333,
641
+ "n_dropped": 0,
642
+ "mean": 0.03102423300067677,
643
+ "std": 0.018127154691452377,
644
+ "median": 0.025313725156701345,
645
+ "p10": 0.014108380442527772,
646
+ "p90": 0.057210114222336135,
647
+ "max": 0.10355059015203963,
648
+ "min": 0.007942382927649167
649
+ },
650
+ "cosine_similarity": {
651
+ "n": 333,
652
+ "n_dropped": 0,
653
+ "mean": 0.9993557682982436,
654
+ "std": 0.0008165002736565256,
655
+ "median": 0.9996796250343323,
656
+ "p10": 0.9983636021614075,
657
+ "p90": 0.999900484085083,
658
+ "max": 0.9999684691429138,
659
+ "min": 0.994625985622406
660
+ }
661
+ },
662
+ "spectral": {
663
+ "band_total_rel_error": {
664
+ "n": 333,
665
+ "n_dropped": 0,
666
+ "mean": 0.019232433094782033,
667
+ "std": 0.01555242150837912,
668
+ "median": 0.015142066920613963,
669
+ "p10": 0.004634220789503501,
670
+ "p90": 0.03865539049986073,
671
+ "max": 0.1053433615163589,
672
+ "min": 0.0012028982790263615
673
+ },
674
+ "weighted_freq_prd_percent": {
675
+ "n": 333,
676
+ "n_dropped": 0,
677
+ "mean": 2.1267163745476063,
678
+ "std": 1.1537940130117639,
679
+ "median": 1.8665771918081215,
680
+ "p10": 1.014640010499677,
681
+ "p90": 4.028595126502776,
682
+ "max": 6.278611072935796,
683
+ "min": 0.5836019432126249
684
+ },
685
+ "coherence": {
686
+ "n": 333,
687
+ "n_dropped": 0,
688
+ "mean": 1.0,
689
+ "std": 0.0,
690
+ "median": 1.0,
691
+ "p10": 1.0,
692
+ "p90": 1.0,
693
+ "max": 1.0,
694
+ "min": 1.0
695
+ }
696
+ }
697
+ },
698
+ "median": {
699
+ "n": 334,
700
+ "time_domain": {
701
+ "prd_percent": {
702
+ "n": 334,
703
+ "n_dropped": 0,
704
+ "mean": 3.8744154032605365,
705
+ "std": 2.5540896498475427,
706
+ "median": 3.2704982367025037,
707
+ "p10": 1.7476202879200657,
708
+ "p90": 7.289068433721563,
709
+ "max": 16.805563665507577,
710
+ "min": 0.8372726528556411
711
+ },
712
+ "prdn_noise_percent": {
713
+ "n": 334,
714
+ "n_dropped": 0,
715
+ "mean": 0.0,
716
+ "std": 0.0,
717
+ "median": 0.0,
718
+ "p10": 0.0,
719
+ "p90": 0.0,
720
+ "max": 0.0,
721
+ "min": 0.0
722
+ },
723
+ "rmse": {
724
+ "n": 334,
725
+ "n_dropped": 0,
726
+ "mean": 0.03874379958471226,
727
+ "std": 0.02554066329382415,
728
+ "median": 0.03270461053103901,
729
+ "p10": 0.017476055876534044,
730
+ "p90": 0.07289003532063035,
731
+ "max": 0.16805456985385103,
732
+ "min": 0.008372697833019046
733
+ },
734
+ "cosine_similarity": {
735
+ "n": 334,
736
+ "n_dropped": 0,
737
+ "mean": 0.9989261646827537,
738
+ "std": 0.0017820690776030874,
739
+ "median": 0.9994670152664185,
740
+ "p10": 0.9973538815975189,
741
+ "p90": 0.9998475134372711,
742
+ "max": 0.9999649524688721,
743
+ "min": 0.9859107136726379
744
+ }
745
+ },
746
+ "spectral": {
747
+ "band_total_rel_error": {
748
+ "n": 334,
749
+ "n_dropped": 0,
750
+ "mean": 0.01962949599778787,
751
+ "std": 0.014854285699743284,
752
+ "median": 0.01530833392656374,
753
+ "p10": 0.005507309489765383,
754
+ "p90": 0.04142927052048217,
755
+ "max": 0.0942392259009491,
756
+ "min": 0.001146485690793292
757
+ },
758
+ "weighted_freq_prd_percent": {
759
+ "n": 334,
760
+ "n_dropped": 0,
761
+ "mean": 2.6635029310331264,
762
+ "std": 1.6291598390106723,
763
+ "median": 2.2224964679554797,
764
+ "p10": 1.2076056544884082,
765
+ "p90": 4.871740869955328,
766
+ "max": 11.30312328683475,
767
+ "min": 0.5580532976102264
768
+ },
769
+ "coherence": {
770
+ "n": 334,
771
+ "n_dropped": 0,
772
+ "mean": 1.0,
773
+ "std": 1.2149740217561496e-17,
774
+ "median": 1.0,
775
+ "p10": 1.0,
776
+ "p90": 1.0,
777
+ "max": 1.0,
778
+ "min": 0.9999999999999998
779
+ }
780
+ }
781
+ },
782
+ "noisy": {
783
+ "n": 333,
784
+ "time_domain": {
785
+ "prd_percent": {
786
+ "n": 333,
787
+ "n_dropped": 0,
788
+ "mean": 4.675199339155779,
789
+ "std": 4.589238934115222,
790
+ "median": 3.2904495105509044,
791
+ "p10": 1.6219601194226116,
792
+ "p90": 9.230258753496251,
793
+ "max": 35.671991746644096,
794
+ "min": 0.8152801652825812
795
+ },
796
+ "prdn_noise_percent": {
797
+ "n": 333,
798
+ "n_dropped": 0,
799
+ "mean": 0.0,
800
+ "std": 0.0,
801
+ "median": 0.0,
802
+ "p10": 0.0,
803
+ "p90": 0.0,
804
+ "max": 0.0,
805
+ "min": 0.0
806
+ },
807
+ "rmse": {
808
+ "n": 333,
809
+ "n_dropped": 0,
810
+ "mean": 0.04675157031278666,
811
+ "std": 0.045891896557329635,
812
+ "median": 0.03290430584362445,
813
+ "p10": 0.01621947505174277,
814
+ "p90": 0.09230178532334445,
815
+ "max": 0.3567163560396821,
816
+ "min": 0.008152783186980352
817
+ },
818
+ "cosine_similarity": {
819
+ "n": 333,
820
+ "n_dropped": 0,
821
+ "mean": 0.9978594998339633,
822
+ "std": 0.006201095769999017,
823
+ "median": 0.9994598031044006,
824
+ "p10": 0.9957409501075745,
825
+ "p90": 0.9998684287071228,
826
+ "max": 0.9999668002128601,
827
+ "min": 0.9364176988601685
828
+ }
829
+ },
830
+ "spectral": {
831
+ "band_total_rel_error": {
832
+ "n": 333,
833
+ "n_dropped": 0,
834
+ "mean": 0.02263234727694861,
835
+ "std": 0.021800192686236095,
836
+ "median": 0.016444517376322708,
837
+ "p10": 0.005977950747354246,
838
+ "p90": 0.04639383468776052,
839
+ "max": 0.24061172996488198,
840
+ "min": 0.0023283163483819196
841
+ },
842
+ "weighted_freq_prd_percent": {
843
+ "n": 333,
844
+ "n_dropped": 0,
845
+ "mean": 3.2499475335408703,
846
+ "std": 2.8738871111303808,
847
+ "median": 2.407530521721784,
848
+ "p10": 1.1634408848082476,
849
+ "p90": 5.946873052434487,
850
+ "max": 21.84177016812817,
851
+ "min": 0.5691230325707283
852
+ },
853
+ "coherence": {
854
+ "n": 333,
855
+ "n_dropped": 0,
856
+ "mean": 1.0,
857
+ "std": 0.0,
858
+ "median": 1.0,
859
+ "p10": 1.0,
860
+ "p90": 1.0,
861
+ "max": 1.0,
862
+ "min": 1.0
863
+ }
864
+ }
865
+ }
866
+ }
867
+ },
868
+ "context": {
869
+ "noise_power": {
870
+ "n": 1000,
871
+ "n_dropped": 0,
872
+ "mean": 0.2259401602467991,
873
+ "std": 0.4306358609000623,
874
+ "median": 0.08733900095250383,
875
+ "p10": 0.020580006421658425,
876
+ "p90": 0.5107709036037087,
877
+ "max": 4.270555694425935,
878
+ "min": 0.004356308578118169
879
+ },
880
+ "noise_rms": {
881
+ "n": 1000,
882
+ "n_dropped": 0,
883
+ "mean": 0.38253588644594216,
884
+ "std": 0.28214616039885504,
885
+ "median": 0.2955315190608555,
886
+ "p10": 0.14345728777974984,
887
+ "p90": 0.7146815271273129,
888
+ "max": 2.066532287293362,
889
+ "min": 0.06600233767161713
890
+ },
891
+ "qrs_snr_db": {
892
+ "n": 24,
893
+ "n_dropped": 0,
894
+ "mean": 12.742358167394059,
895
+ "std": 5.017646283623076,
896
+ "median": 13.267522105619305,
897
+ "p10": 5.140991695074948,
898
+ "p90": 18.96420766829537,
899
+ "max": 21.594237327775787,
900
+ "min": 2.052900271876336
901
+ }
902
+ },
903
+ "robustness": {
904
+ "n_windows": 500,
905
+ "prd_threshold": 10.0,
906
+ "headline": {
907
+ "empirical_snr": {
908
+ "prd_at_0db": 51.77107238769531,
909
+ "prd_at_-6db": 79.86663818359375,
910
+ "prd_slope_per_db": 3.990253646881387,
911
+ "robust_snr_db_at_prd_threshold": 12.0
912
+ },
913
+ "artifacts": {
914
+ "prd_by_family_mid_severity": {
915
+ "colored": 81.16638946533203,
916
+ "mains": 79.48155975341797,
917
+ "motion": 83.06532287597656,
918
+ "lead_off": 94.9478759765625,
919
+ "weak_leak": 117.25982666015625
920
+ },
921
+ "worst_family": "weak_leak",
922
+ "worst_prd_mid_severity": 117.25982666015625
923
+ },
924
+ "imprint_output_autocorr_max": 0.2469116747379303
925
+ },
926
+ "empirical_snr_curve": [
927
+ {
928
+ "snr_db": 12.0,
929
+ "prd_mean": 14.9020357131958,
930
+ "prd_median": 14.329540252685547
931
+ },
932
+ {
933
+ "snr_db": 8.0,
934
+ "prd_mean": 23.742143630981445,
935
+ "prd_median": 23.128978729248047
936
+ },
937
+ {
938
+ "snr_db": 6.0,
939
+ "prd_mean": 28.603673934936523,
940
+ "prd_median": 27.298553466796875
941
+ },
942
+ {
943
+ "snr_db": 3.0,
944
+ "prd_mean": 39.11989212036133,
945
+ "prd_median": 38.58624267578125
946
+ },
947
+ {
948
+ "snr_db": 0.0,
949
+ "prd_mean": 51.77107238769531,
950
+ "prd_median": 50.85601043701172
951
+ },
952
+ {
953
+ "snr_db": -3.0,
954
+ "prd_mean": 66.01786804199219,
955
+ "prd_median": 65.71646118164062
956
+ },
957
+ {
958
+ "snr_db": -6.0,
959
+ "prd_mean": 79.86663818359375,
960
+ "prd_median": 81.61154174804688
961
+ },
962
+ {
963
+ "snr_db": -9.0,
964
+ "prd_mean": 94.48633575439453,
965
+ "prd_median": 96.40992736816406
966
+ },
967
+ {
968
+ "snr_db": -12.0,
969
+ "prd_mean": 106.05288696289062,
970
+ "prd_median": 108.72895812988281
971
+ }
972
+ ],
973
+ "reference": {
974
+ "clean": 1.8647409677505493,
975
+ "native": 38.31148147583008
976
+ },
977
+ "artifacts": {
978
+ "colored": [
979
+ {
980
+ "severity": 0.25,
981
+ "prd_mean": 61.597740173339844
982
+ },
983
+ {
984
+ "severity": 0.5,
985
+ "prd_mean": 81.16638946533203
986
+ },
987
+ {
988
+ "severity": 0.75,
989
+ "prd_mean": 100.41177368164062
990
+ }
991
+ ],
992
+ "mains": [
993
+ {
994
+ "severity": 0.25,
995
+ "prd_mean": 62.40423583984375
996
+ },
997
+ {
998
+ "severity": 0.5,
999
+ "prd_mean": 79.48155975341797
1000
+ },
1001
+ {
1002
+ "severity": 0.75,
1003
+ "prd_mean": 98.35430908203125
1004
+ }
1005
+ ],
1006
+ "motion": [
1007
+ {
1008
+ "severity": 0.25,
1009
+ "prd_mean": 64.58673858642578
1010
+ },
1011
+ {
1012
+ "severity": 0.5,
1013
+ "prd_mean": 83.06532287597656
1014
+ },
1015
+ {
1016
+ "severity": 0.75,
1017
+ "prd_mean": 102.24476623535156
1018
+ }
1019
+ ],
1020
+ "lead_off": [
1021
+ {
1022
+ "severity": 0.25,
1023
+ "prd_mean": 71.43106079101562
1024
+ },
1025
+ {
1026
+ "severity": 0.5,
1027
+ "prd_mean": 94.9478759765625
1028
+ },
1029
+ {
1030
+ "severity": 0.75,
1031
+ "prd_mean": 122.9718017578125
1032
+ }
1033
+ ],
1034
+ "weak_leak": [
1035
+ {
1036
+ "severity": 0.25,
1037
+ "prd_mean": 95.4238052368164
1038
+ },
1039
+ {
1040
+ "severity": 0.5,
1041
+ "prd_mean": 117.25982666015625
1042
+ },
1043
+ {
1044
+ "severity": 0.75,
1045
+ "prd_mean": 131.9951934814453
1046
+ }
1047
+ ]
1048
+ },
1049
+ "imprint": {
1050
+ "pure_noise": {
1051
+ "input_autocorr_mean": 0.24699077010154724,
1052
+ "output_autocorr_mean": 0.2469116747379303,
1053
+ "residual_rms": 1.0
1054
+ }
1055
+ }
1056
+ }
1057
+ }
reference_vectors.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f76f07055e9e022ee8de6d8b7f60751fd7a1f770d5a79a874184c71d471820fe
3
+ size 31175
sample_stimulus.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c266d1e5539601457ca51ada46e9edb2e99bb6f148cf37be658dcb1670f94dc0
3
+ size 14744
scorecard.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "mean_prd_percent": 3.884,
3
+ "median_prd_percent": 3.0432,
4
+ "p95_prd_percent": 9.2236,
5
+ "mean_snr_db": 30.073,
6
+ "median_snr_db": 30.333,
7
+ "actual_cr": 7.999,
8
+ "bitrate_bps": 512.07,
9
+ "n_frames": 1000
10
+ }
spiht_app_config.h ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * SPIHT codec deploy configuration for ECG @ 8x.
3
+ *
4
+ * Generated by compressionkit.export.spiht_deploy.export_spiht_deploy().
5
+ * Operating-point macros only — pair this with the SPIHT C algorithm
6
+ * sources shipped from a separate C-module repository.
7
+ */
8
+ #ifndef COMPRESSIONKIT_SPIHT_APP_CONFIG_H
9
+ #define COMPRESSIONKIT_SPIHT_APP_CONFIG_H
10
+
11
+ #define APP_SPIHT_FRAME_SIZE 512
12
+ #define APP_SPIHT_LEVELS 6
13
+ #define APP_SPIHT_MAX_BITS 1024
14
+ #define APP_SPIHT_MAX_BYTES 128
15
+ #define APP_SPIHT_USE_AC 1
16
+ #define APP_SPIHT_WAVELET_NAME "bior4.4"
17
+ #define APP_SPIHT_MODALITY "ecg"
18
+
19
+ #endif /* COMPRESSIONKIT_SPIHT_APP_CONFIG_H */
spiht_config.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "modality": "ecg",
3
+ "sample_rate": 256,
4
+ "frame_size": 512,
5
+ "target_cr": 8.0,
6
+ "wavelet": "bior4.4",
7
+ "levels": 6,
8
+ "use_ac": true,
9
+ "bits_per_sample": 16,
10
+ "max_bits": 1024
11
+ }