apage-ambiq commited on
Commit
2bfee75
·
verified ·
1 Parent(s): 9ee01a9

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
+ - ppg
9
+ - spiht
10
+ - wavelet
11
+ - edge-ai
12
+ - dsp
13
+ ---
14
+
15
+ # compressionkit-ppg-spiht-32x
16
+
17
+ A **PPG** 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 | PPG |
24
+ | Sample rate | 64 Hz |
25
+ | Frame size | 320 samples |
26
+ | Target CR | 32x |
27
+ | Wavelet | `coif5` |
28
+ | DWT levels | 6 |
29
+ | Bit budget | 160 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 (%) | 19.35 |
41
+ | Truth PRD at native noise (%) | 40.07 |
42
+ | Faithful PRD vs input (%) | 20.38 |
43
+ | PRD degradation slope (PRD%/dB) | 4.18 |
44
+ | PRD at 0 dB SNR (%) | 78.25 |
45
+ | PRD at -6 dB SNR (%) | 106.31 |
46
+ | Pure-noise imprint autocorr | 0.2850 |
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 (%) | 20.3765 | 19.8541 | 26.5802 |
55
+ | RMSE | 0.2038 | 0.1985 | 0.2658 |
56
+ | Cosine Similarity | 0.9783 | 0.9804 | 0.9889 |
57
+
58
+ ### Spectral
59
+
60
+ - **Band Total Relative Error (median):** 0.1120
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-ppg-spiht-32x")
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 provenance is not recorded in this package; sample data uses synthetic physiokit waveforms only — no patient data is redistributed.
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": "2b871bfb3806bbf5fe405bfa7dffd546d305d64403bcca514c7874ac31e78d21",
4
+ "bytes": 1675
5
+ },
6
+ "codec_spec.json": {
7
+ "sha256": "9c64f4dd791ed684c1446d120b723e68c0d956759b8f63343e9669caa079a4d1",
8
+ "bytes": 573
9
+ },
10
+ "deploy_manifest.json": {
11
+ "sha256": "21343081c3d8f5ba708b65ba45d146a74d3b6349f2ed5e12ae79af0d1e543714",
12
+ "bytes": 1541
13
+ },
14
+ "model_card.json": {
15
+ "sha256": "ada5ed880e2e27c5bf0af4a7fde3a490c4f7312390de3b0701410a0a90d31a23",
16
+ "bytes": 179
17
+ },
18
+ "reference_vectors.npz": {
19
+ "sha256": "ec8f4520cb5ade6769aa1805f28f45f40c9306392113adbf662f8362ee6ffb24",
20
+ "bytes": 19702
21
+ },
22
+ "sample_stimulus.npz": {
23
+ "sha256": "7b9d0a4f6866fc18e08c70a88a38f3c16a9b0abb44c74c5f86bba0cb30de5368",
24
+ "bytes": 9464
25
+ },
26
+ "scorecard.json": {
27
+ "sha256": "78af3da30865fa80f8e98567a1116848006ae0882528c458a1f82f79aba6fcbe",
28
+ "bytes": 215
29
+ },
30
+ "spiht_app_config.h": {
31
+ "sha256": "5fb538242c50b03236352e6273a5bb0e77c98f8a2bd383a6efbed67b239b84f6",
32
+ "bytes": 642
33
+ },
34
+ "spiht_config.json": {
35
+ "sha256": "5138a13fa0eb9bd9b56590969ae25b039b002bad39ec5afe325ca66e1d83ba46",
36
+ "bytes": 185
37
+ }
38
+ }
codec_spec.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "family": "spiht",
3
+ "method": "dsp",
4
+ "modality": "ppg",
5
+ "sample_rate": 64,
6
+ "frame_size": 320,
7
+ "compression_ratio": 32.0,
8
+ "experiment_id": "ppg-spiht-32x",
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": "ppg",
18
+ "sample_rate": 64,
19
+ "frame_size": 320,
20
+ "target_cr": 32.0,
21
+ "wavelet": "coif5",
22
+ "levels": 6,
23
+ "use_ac": true,
24
+ "bits_per_sample": 16,
25
+ "max_bits": 160
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": "ppg",
7
+ "experiment_id": "ppg-spiht-32x",
8
+ "run_name": null,
9
+ "compression_ratio": 32.0,
10
+ "spec": "codec_spec.json",
11
+ "scorecard": "scorecard.json",
12
+ "checksums": "checksums.json",
13
+ "model_name": "ppg_spiht_32x",
14
+ "model_version": "1.0",
15
+ "codec": {
16
+ "modality": "ppg",
17
+ "sample_rate": 64,
18
+ "frame_size": 320,
19
+ "target_cr": 32.0,
20
+ "wavelet": "coif5",
21
+ "levels": 6,
22
+ "use_ac": true,
23
+ "bits_per_sample": 16,
24
+ "max_bits": 160
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": "ppg-spiht-32x",
40
+ "modality": "ppg",
41
+ "method": "spiht",
42
+ "sample_rate": 64,
43
+ "compression_ratio": 32,
44
+ "wavelet": "coif5",
45
+ "levels": 6,
46
+ "use_ac": true,
47
+ "frame_size": 320,
48
+ "dataset_id": "ppg-unified-strict-sanitize-v1"
49
+ },
50
+ "scorecard_summary": {
51
+ "mean_prd_percent": 20.3765,
52
+ "median_prd_percent": 19.8541,
53
+ "p95_prd_percent": 28.9464,
54
+ "mean_snr_db": 14.044,
55
+ "median_snr_db": 14.043,
56
+ "actual_cr": 31.944,
57
+ "bitrate_bps": 32.06,
58
+ "n_frames": 5980
59
+ }
60
+ }
model_card.json ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model_name": "ppg_spiht_32x",
3
+ "model_version": "1.0",
4
+ "modality": "ppg",
5
+ "sample_rate": 64,
6
+ "compression_ratio": 32,
7
+ "license": "other",
8
+ "scorecard_summary": {}
9
+ }
quality_scorecard.json ADDED
@@ -0,0 +1,1150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "headline": {
3
+ "num_samples": 5980,
4
+ "compression_ratio": 31.944,
5
+ "faithful_prd_vs_input_pct": 20.376,
6
+ "truth_prd_vs_clean_pct": 19.347,
7
+ "truth_prd_at_native_noise_pct": 40.068,
8
+ "prd_degradation_slope_per_db": 4.18,
9
+ "prd_at_0db_pct": 78.245,
10
+ "prd_at_-6db_pct": 106.315,
11
+ "imprint_output_autocorr": 0.285
12
+ },
13
+ "run_dir": "results/ppg_spiht_64hz_32x_golden",
14
+ "modality": "ppg",
15
+ "sample_rate": 64,
16
+ "num_samples_loaded": 5980,
17
+ "num_samples": 5980,
18
+ "num_samples_rejected": 0,
19
+ "min_signal_std": 0.0001,
20
+ "noise_estimator": "bp",
21
+ "bitrate": {
22
+ "codec_compression_ratio": 31.9444,
23
+ "effective_downsample_factor": 1,
24
+ "downsample_factor": 1,
25
+ "effective_sample_rate_hz": 64,
26
+ "uniform_codec_bitrate_bps": 32.06,
27
+ "uniform_bits_per_frame": 160.28,
28
+ "raw_bitrate_bps": 1024,
29
+ "raw_bits_per_frame": 5120,
30
+ "encoder_total_params": 0
31
+ },
32
+ "time_domain": {
33
+ "prd_percent": {
34
+ "n": 5980,
35
+ "n_dropped": 0,
36
+ "mean": 20.37649645810537,
37
+ "std": 4.659572510149367,
38
+ "median": 19.854120638052645,
39
+ "p10": 14.951996625127169,
40
+ "p90": 26.580180681086983,
41
+ "max": 49.76236603461514,
42
+ "min": 6.566833162129387
43
+ },
44
+ "prdn_noise_percent": {
45
+ "n": 5960,
46
+ "n_dropped": 0,
47
+ "mean": 1.9206560364570298,
48
+ "std": 5.189531859752168,
49
+ "median": 0.0,
50
+ "p10": 0.0,
51
+ "p90": 9.673888325619528,
52
+ "max": 40.84668005586006,
53
+ "min": 0.0
54
+ },
55
+ "rmse": {
56
+ "n": 5980,
57
+ "n_dropped": 0,
58
+ "mean": 0.2037648012474131,
59
+ "std": 0.04659577610965675,
60
+ "median": 0.19854120356838917,
61
+ "p10": 0.1495184422018494,
62
+ "p90": 0.26580180204933296,
63
+ "max": 0.4976235179826352,
64
+ "min": 0.06566832920012071
65
+ },
66
+ "cosine_similarity": {
67
+ "n": 5980,
68
+ "n_dropped": 0,
69
+ "mean": 0.9783456976397779,
70
+ "std": 0.010220290344419973,
71
+ "median": 0.9803689122200012,
72
+ "p10": 0.9653107523918152,
73
+ "p90": 0.9889066696166993,
74
+ "max": 0.997847318649292,
75
+ "min": 0.8731319904327393
76
+ }
77
+ },
78
+ "spectral": {
79
+ "band_total_rel_error": {
80
+ "n": 5980,
81
+ "n_dropped": 0,
82
+ "mean": 0.12492778762281315,
83
+ "std": 0.08052631106599405,
84
+ "median": 0.11197406707057,
85
+ "p10": 0.03747424970166678,
86
+ "p90": 0.22659292721528526,
87
+ "max": 0.9417399364967387,
88
+ "min": 0.0016862046092425468
89
+ },
90
+ "per_band_rel_error": {
91
+ "band_0.5_3_rel_error": {
92
+ "n": 5980,
93
+ "n_dropped": 0,
94
+ "mean": 0.04184556091420972,
95
+ "std": 0.037800013420961856,
96
+ "median": 0.03264164915561008,
97
+ "p10": 0.005890066524914806,
98
+ "p90": 0.08837346180214994,
99
+ "max": 0.8118068719682139,
100
+ "min": 5.31986675360905e-06
101
+ },
102
+ "band_3_8_rel_error": {
103
+ "n": 5980,
104
+ "n_dropped": 0,
105
+ "mean": 0.20801001433141655,
106
+ "std": 0.15550010552608343,
107
+ "median": 0.18064002577165805,
108
+ "p10": 0.03641616149740282,
109
+ "p90": 0.40747097934812554,
110
+ "max": 1.806259712173308,
111
+ "min": 0.00014313063523362516
112
+ },
113
+ "band_total_rel_error": {
114
+ "n": 5980,
115
+ "n_dropped": 0,
116
+ "mean": 0.12492778762281315,
117
+ "std": 0.08052631106599405,
118
+ "median": 0.11197406707057,
119
+ "p10": 0.03747424970166678,
120
+ "p90": 0.22659292721528526,
121
+ "max": 0.9417399364967387,
122
+ "min": 0.0016862046092425468
123
+ }
124
+ },
125
+ "weighted_freq_prd_percent": {
126
+ "n": 5980,
127
+ "n_dropped": 0,
128
+ "mean": 17.163168330842037,
129
+ "std": 3.955644673153658,
130
+ "median": 16.57678119214653,
131
+ "p10": 12.706902345158817,
132
+ "p90": 22.42964898476846,
133
+ "max": 46.956720665598404,
134
+ "min": 6.322059086593934
135
+ },
136
+ "coherence": {
137
+ "n": 5980,
138
+ "n_dropped": 0,
139
+ "mean": 0.6070001017665995,
140
+ "std": 0.075388215408136,
141
+ "median": 0.5979704438131292,
142
+ "p10": 0.5242656092276127,
143
+ "p90": 0.7041801211136897,
144
+ "max": 0.970981941325815,
145
+ "min": 0.2382247154287746
146
+ }
147
+ },
148
+ "physiology": {
149
+ "num_total_pairs": 5980,
150
+ "num_valid_pairs": 3502,
151
+ "target_mean_hr_bpm": 87.38784037435592,
152
+ "reconstructed_mean_hr_bpm": 87.71864864414114,
153
+ "hr_mae_bpm": 2.7589173486971608,
154
+ "hr_median_ae_bpm": 1.3153819956782087,
155
+ "hr_bias_bpm": 0.3308082697852188,
156
+ "target_mean_rmssd_ms": 167.20086595947114,
157
+ "reconstructed_mean_rmssd_ms": 197.14249532458786,
158
+ "rmssd_mae_ms": 124.89946044584234,
159
+ "rmssd_median_ae_ms": 30.492342965805534,
160
+ "target_mean_sdnn_ms": 127.94480573807891,
161
+ "reconstructed_mean_sdnn_ms": 147.56940288366587,
162
+ "sdnn_mae_ms": 85.69445604354024,
163
+ "sdnn_median_ae_ms": 20.606364854923928,
164
+ "peak_alignment": {
165
+ "num_total_pairs": 5980.0,
166
+ "num_valid_pairs": 3502.0,
167
+ "timing_tolerance_ms": 125.0,
168
+ "timing_tolerance_samples": 8.0,
169
+ "target_total_peaks": 23137.0,
170
+ "reconstructed_total_peaks": 22996.0,
171
+ "matched_total_peaks": 21368.0,
172
+ "total_missed_peaks": 1769.0,
173
+ "total_extra_peaks": 1628.0,
174
+ "peak_count_exact_match_pct": 67.90405482581382,
175
+ "peak_precision_pct": 92.57148873082627,
176
+ "peak_recall_pct": 92.10801516840924,
177
+ "peak_f1_pct": 92.04408458349441,
178
+ "peak_timing_mae_ms": 21.718369758517408,
179
+ "peak_timing_median_ms": 15.625,
180
+ "peak_timing_p90_ms": 46.875,
181
+ "peak_timing_max_ms": 125.0,
182
+ "peak_timing_within_1sample_pct": 64.43747660052415,
183
+ "ibi_mae_ms": 27.591930910774217,
184
+ "ibi_median_ae_ms": 15.625,
185
+ "ibi_p90_ae_ms": 62.5
186
+ },
187
+ "by_noise_tertile": {
188
+ "thresholds_bp_noise_rms": {
189
+ "clean_max": 0.25994590456462363,
190
+ "median_max": 0.3631107343475049
191
+ },
192
+ "buckets": {
193
+ "clean": {
194
+ "n": 1167,
195
+ "hr_mae_bpm": {
196
+ "n": 1167,
197
+ "n_dropped": 0,
198
+ "mean": 2.491940494144929,
199
+ "std": 3.847721367661954,
200
+ "median": 1.1867942647107412,
201
+ "p10": 0.22152568121070715,
202
+ "p90": 6.173752392942772,
203
+ "max": 41.868463862421564,
204
+ "min": 0.0
205
+ },
206
+ "sdnn_mae_ms": {
207
+ "n": 1167,
208
+ "n_dropped": 0,
209
+ "mean": 82.02381610732813,
210
+ "std": 153.6050155601954,
211
+ "median": 20.674478764859032,
212
+ "p10": 3.4468555316144447,
213
+ "p90": 281.56999253150036,
214
+ "max": 865.9483347456503,
215
+ "min": 0.0
216
+ },
217
+ "rmssd_mae_ms": {
218
+ "n": 1167,
219
+ "n_dropped": 0,
220
+ "mean": 118.52031853587911,
221
+ "std": 231.68657600145738,
222
+ "median": 30.85819539231131,
223
+ "p10": 5.192397244006989,
224
+ "p90": 399.4258490953256,
225
+ "max": 1394.798466357055,
226
+ "min": 0.0
227
+ },
228
+ "peak_timing_mae_ms": {
229
+ "n": 1167,
230
+ "n_dropped": 0,
231
+ "mean": 22.59425086184405,
232
+ "std": 10.532995649216751,
233
+ "median": 20.833333333333332,
234
+ "p10": 11.71875,
235
+ "p90": 36.458333333333336,
236
+ "max": 78.125,
237
+ "min": 0.0
238
+ },
239
+ "peak_f1_pct": {
240
+ "n": 1167,
241
+ "n_dropped": 0,
242
+ "mean": 92.13500111138804,
243
+ "std": 12.77084669245445,
244
+ "median": 100.0,
245
+ "p10": 72.72727272727272,
246
+ "p90": 100.0,
247
+ "max": 100.0,
248
+ "min": 18.18181818181818
249
+ }
250
+ },
251
+ "median": {
252
+ "n": 1168,
253
+ "hr_mae_bpm": {
254
+ "n": 1168,
255
+ "n_dropped": 0,
256
+ "mean": 2.939384302721725,
257
+ "std": 4.3699098204675595,
258
+ "median": 1.39417641030861,
259
+ "p10": 0.2389793589876632,
260
+ "p90": 7.513081197734013,
261
+ "max": 47.588323235502415,
262
+ "min": 0.0
263
+ },
264
+ "sdnn_mae_ms": {
265
+ "n": 1168,
266
+ "n_dropped": 0,
267
+ "mean": 85.94225430350195,
268
+ "std": 155.68626272606159,
269
+ "median": 21.295496018452845,
270
+ "p10": 3.166113043081192,
271
+ "p90": 271.2805995630214,
272
+ "max": 952.8876744108564,
273
+ "min": 0.0
274
+ },
275
+ "rmssd_mae_ms": {
276
+ "n": 1168,
277
+ "n_dropped": 0,
278
+ "mean": 125.7409674359292,
279
+ "std": 237.88730062596227,
280
+ "median": 30.810706186535,
281
+ "p10": 5.35274109312582,
282
+ "p90": 428.856571343453,
283
+ "max": 1424.1178977112086,
284
+ "min": 0.0
285
+ },
286
+ "peak_timing_mae_ms": {
287
+ "n": 1168,
288
+ "n_dropped": 0,
289
+ "mean": 22.112622197235318,
290
+ "std": 10.415203404059424,
291
+ "median": 20.572916666666664,
292
+ "p10": 11.160714285714286,
293
+ "p90": 35.15625,
294
+ "max": 80.72916666666667,
295
+ "min": 2.6041666666666665
296
+ },
297
+ "peak_f1_pct": {
298
+ "n": 1168,
299
+ "n_dropped": 0,
300
+ "mean": 92.20813193349666,
301
+ "std": 11.84063541884435,
302
+ "median": 100.0,
303
+ "p10": 74.31818181818183,
304
+ "p90": 100.0,
305
+ "max": 100.0,
306
+ "min": 30.769230769230766
307
+ }
308
+ },
309
+ "noisy": {
310
+ "n": 1167,
311
+ "hr_mae_bpm": {
312
+ "n": 1167,
313
+ "n_dropped": 0,
314
+ "mean": 2.845272607447601,
315
+ "std": 4.3519959995923605,
316
+ "median": 1.353796977460206,
317
+ "p10": 0.2405261509552048,
318
+ "p90": 6.806477149013663,
319
+ "max": 44.2098664827932,
320
+ "min": 0.0
321
+ },
322
+ "sdnn_mae_ms": {
323
+ "n": 1167,
324
+ "n_dropped": 0,
325
+ "mean": 89.11708538195012,
326
+ "std": 152.00842209556924,
327
+ "median": 19.738562339373967,
328
+ "p10": 3.12138957205176,
329
+ "p90": 315.45271275454434,
330
+ "max": 930.8512945807298,
331
+ "min": 0.0
332
+ },
333
+ "rmssd_mae_ms": {
334
+ "n": 1167,
335
+ "n_dropped": 0,
336
+ "mean": 130.43637428003737,
337
+ "std": 227.01385665842164,
338
+ "median": 30.323419668099028,
339
+ "p10": 5.38253296877649,
340
+ "p90": 457.08071507807057,
341
+ "max": 1469.815030046699,
342
+ "min": 0.0
343
+ },
344
+ "peak_timing_mae_ms": {
345
+ "n": 1167,
346
+ "n_dropped": 0,
347
+ "mean": 22.66236200603167,
348
+ "std": 11.63682463689191,
349
+ "median": 20.833333333333332,
350
+ "p10": 10.416666666666666,
351
+ "p90": 37.5,
352
+ "max": 88.54166666666667,
353
+ "min": 0.0
354
+ },
355
+ "peak_f1_pct": {
356
+ "n": 1167,
357
+ "n_dropped": 0,
358
+ "mean": 91.7889801337476,
359
+ "std": 12.624643221637104,
360
+ "median": 100.0,
361
+ "p10": 72.72727272727272,
362
+ "p90": 100.0,
363
+ "max": 100.0,
364
+ "min": 36.36363636363636
365
+ }
366
+ }
367
+ }
368
+ }
369
+ },
370
+ "morphology": {
371
+ "num_windows": 5980,
372
+ "num_windows_with_pulses": 5973,
373
+ "num_pulses_matched": 37574,
374
+ "ac_amplitude_norm": {
375
+ "orig": {
376
+ "n": 37574,
377
+ "mean": 2.959150182562879,
378
+ "std": 0.802914493783668,
379
+ "median": 3.0410043385073484,
380
+ "p10": 1.927128389509608,
381
+ "p90": 3.8106234237470233,
382
+ "min": 0.06438463513323886,
383
+ "max": 7.313599535369477
384
+ },
385
+ "recon": {
386
+ "n": 37574,
387
+ "mean": 2.9385366577677585,
388
+ "std": 0.8163350701436546,
389
+ "median": 3.025717527319731,
390
+ "p10": 1.8640155165162124,
391
+ "p90": 3.827011452777453,
392
+ "min": 0.08744170097181875,
393
+ "max": 7.430297218862092
394
+ },
395
+ "abs_delta": {
396
+ "n": 37574,
397
+ "mean": 0.214661192383328,
398
+ "std": 0.18498673035917357,
399
+ "median": 0.16974065823686058,
400
+ "p10": 0.03156449666287014,
401
+ "p90": 0.45445504232065187,
402
+ "min": 9.601399619807438e-06,
403
+ "max": 2.3027110609681296
404
+ },
405
+ "delta": {
406
+ "n": 37574,
407
+ "mean": -0.020613524795119454,
408
+ "std": 0.28262094848034663,
409
+ "median": -0.016258897305488018,
410
+ "p10": -0.3592095635871942,
411
+ "p90": 0.3105445854622742,
412
+ "min": -1.9363139514796828,
413
+ "max": 2.3027110609681296
414
+ }
415
+ },
416
+ "upstroke_slope": {
417
+ "orig": {
418
+ "n": 37574,
419
+ "mean": 25.20521483067877,
420
+ "std": 7.601299706466235,
421
+ "median": 25.916519200583785,
422
+ "p10": 15.123060806071342,
423
+ "p90": 33.653055314267974,
424
+ "min": 0.7446070594204981,
425
+ "max": 88.52815887665066
426
+ },
427
+ "recon": {
428
+ "n": 37574,
429
+ "mean": 22.920010480755288,
430
+ "std": 8.456527769715766,
431
+ "median": 22.463997135485435,
432
+ "p10": 12.641235872406163,
433
+ "p90": 34.45068981556052,
434
+ "min": 0.31425512867727257,
435
+ "max": 89.30491982718056
436
+ },
437
+ "abs_delta": {
438
+ "n": 37574,
439
+ "mean": 4.292970030707765,
440
+ "std": 3.384657376229356,
441
+ "median": 3.6002109919749437,
442
+ "p10": 0.6430519271774102,
443
+ "p90": 8.798257399658084,
444
+ "min": 8.668626423258274e-05,
445
+ "max": 49.39642180134973
446
+ },
447
+ "delta": {
448
+ "n": 37574,
449
+ "mean": -2.2852043499234798,
450
+ "std": 4.966219721086616,
451
+ "median": -2.3239906661213734,
452
+ "p10": -8.38521913046407,
453
+ "p90": 3.971472904016975,
454
+ "min": -48.24213821609442,
455
+ "max": 49.39642180134973
456
+ }
457
+ },
458
+ "pulse_width_sec": {
459
+ "orig": {
460
+ "n": 37574,
461
+ "mean": 1.3353661275083835,
462
+ "std": 0.5459271739077451,
463
+ "median": 1.328125,
464
+ "p10": 0.640625,
465
+ "p90": 2.109375,
466
+ "min": 0.21875,
467
+ "max": 3.0
468
+ },
469
+ "recon": {
470
+ "n": 37574,
471
+ "mean": 1.3362980385372865,
472
+ "std": 0.5470036327593154,
473
+ "median": 1.328125,
474
+ "p10": 0.640625,
475
+ "p90": 2.109375,
476
+ "min": 0.171875,
477
+ "max": 3.0
478
+ },
479
+ "abs_delta": {
480
+ "n": 37574,
481
+ "mean": 0.22013351985415447,
482
+ "std": 0.34660898363806053,
483
+ "median": 0.03125,
484
+ "p10": 0.0,
485
+ "p90": 0.765625,
486
+ "min": 0.0,
487
+ "max": 2.25
488
+ },
489
+ "delta": {
490
+ "n": 37574,
491
+ "mean": 0.0009319110289029648,
492
+ "std": 0.41060404971678366,
493
+ "median": 0.0,
494
+ "p10": -0.59375,
495
+ "p90": 0.578125,
496
+ "min": -2.125,
497
+ "max": 2.25
498
+ }
499
+ },
500
+ "rise_time_sec": {
501
+ "orig": {
502
+ "n": 37574,
503
+ "mean": 0.6042675786448076,
504
+ "std": 0.4249839556959997,
505
+ "median": 0.46875,
506
+ "p10": 0.171875,
507
+ "p90": 1.25,
508
+ "min": 0.0625,
509
+ "max": 1.5
510
+ },
511
+ "recon": {
512
+ "n": 37574,
513
+ "mean": 0.6218549562197264,
514
+ "std": 0.4225239038577469,
515
+ "median": 0.46875,
516
+ "p10": 0.1875,
517
+ "p90": 1.25,
518
+ "min": 0.0625,
519
+ "max": 1.5
520
+ },
521
+ "abs_delta": {
522
+ "n": 37574,
523
+ "mean": 0.14999775443125565,
524
+ "std": 0.2777271231052974,
525
+ "median": 0.03125,
526
+ "p10": 0.0,
527
+ "p90": 0.640625,
528
+ "min": 0.0,
529
+ "max": 1.375
530
+ },
531
+ "delta": {
532
+ "n": 37574,
533
+ "mean": 0.017587377574918826,
534
+ "std": 0.31515451034818065,
535
+ "median": 0.015625,
536
+ "p10": -0.078125,
537
+ "p90": 0.12031250000006821,
538
+ "min": -1.328125,
539
+ "max": 1.375
540
+ }
541
+ },
542
+ "fall_time_sec": {
543
+ "orig": {
544
+ "n": 37574,
545
+ "mean": 0.7310985488635758,
546
+ "std": 0.38969873438013686,
547
+ "median": 0.59375,
548
+ "p10": 0.28125,
549
+ "p90": 1.328125,
550
+ "min": 0.0625,
551
+ "max": 1.5
552
+ },
553
+ "recon": {
554
+ "n": 37574,
555
+ "mean": 0.71444308231756,
556
+ "std": 0.39233754391483794,
557
+ "median": 0.578125,
558
+ "p10": 0.265625,
559
+ "p90": 1.3125,
560
+ "min": 0.0625,
561
+ "max": 1.5
562
+ },
563
+ "abs_delta": {
564
+ "n": 37574,
565
+ "mean": 0.12819536115398947,
566
+ "std": 0.23986697642557983,
567
+ "median": 0.03125,
568
+ "p10": 0.0,
569
+ "p90": 0.59375,
570
+ "min": 0.0,
571
+ "max": 1.3125
572
+ },
573
+ "delta": {
574
+ "n": 37574,
575
+ "mean": -0.01665546654601586,
576
+ "std": 0.27146420101937196,
577
+ "median": -0.015625,
578
+ "p10": -0.109375,
579
+ "p90": 0.0625,
580
+ "min": -1.296875,
581
+ "max": 1.3125
582
+ }
583
+ },
584
+ "pulse_shape_correlation": {
585
+ "n": 37574,
586
+ "mean": 0.7576523671764147,
587
+ "std": 0.3385571831622873,
588
+ "median": 0.9508628829413152,
589
+ "p10": 0.15194861380193941,
590
+ "p90": 0.9874023469055643,
591
+ "min": -0.6261673048198875,
592
+ "max": 0.9997991205620966
593
+ },
594
+ "dicrotic_notch": {
595
+ "agreement": 0.8074998669292596,
596
+ "orig_detection_rate": 0.49395858838558576,
597
+ "recon_detection_rate": 0.5299143024431788,
598
+ "both_present": 15619,
599
+ "orig_only": 2941,
600
+ "recon_only": 4292,
601
+ "both_absent": 14722
602
+ },
603
+ "params": {
604
+ "sample_rate": 64,
605
+ "low_hz": 0.5,
606
+ "high_hz": 8.0,
607
+ "order": 3,
608
+ "min_pulses": 1,
609
+ "timing_tolerance_ms": 125.0,
610
+ "max_pulse_ms": 1500.0
611
+ }
612
+ },
613
+ "stability": {
614
+ "hard_concat": {
615
+ "prd_percent_mean": 19.09274522701782,
616
+ "cosine_similarity_mean": 0.9740768790245056,
617
+ "mse_mean": 0.050070305913686754,
618
+ "seam_ratio_mean": 2.2361870556380667,
619
+ "seam_rms_mean": 0.2949856370687485,
620
+ "non_seam_rms_mean": 0.160403461009264,
621
+ "num_recordings": 10
622
+ },
623
+ "overlap_add": {
624
+ "prd_percent_mean": 17.319936367650484,
625
+ "cosine_similarity_mean": 0.978507000207901,
626
+ "mse_mean": 0.041687718313187364,
627
+ "seam_ratio_mean": 1.047013449075557,
628
+ "seam_rms_mean": 0.14204380214214324,
629
+ "non_seam_rms_mean": 0.15792215690016748,
630
+ "num_recordings": 10
631
+ },
632
+ "linear_crossfade": {
633
+ "prd_percent_mean": 16.938314316849926,
634
+ "cosine_similarity_mean": 0.9792609930038452,
635
+ "mse_mean": 0.04017392275854945,
636
+ "seam_ratio_mean": 1.0500081935686618,
637
+ "seam_rms_mean": 0.14176798462867737,
638
+ "non_seam_rms_mean": 0.1568159691989422,
639
+ "num_recordings": 10
640
+ },
641
+ "tukey_overlap_add": {
642
+ "prd_percent_mean": 16.518801849556173,
643
+ "cosine_similarity_mean": 0.9799336493015289,
644
+ "mse_mean": 0.038790098018944265,
645
+ "seam_ratio_mean": 1.0553856803941275,
646
+ "seam_rms_mean": 0.14182619601488114,
647
+ "non_seam_rms_mean": 0.15522599294781686,
648
+ "num_recordings": 10
649
+ }
650
+ },
651
+ "by_noise_tertile": {
652
+ "thresholds_bp_noise_rms": {
653
+ "clean_max": 0.2704280751515924,
654
+ "median_max": 0.3824211146952535
655
+ },
656
+ "buckets": {
657
+ "clean": {
658
+ "n": 1993,
659
+ "time_domain": {
660
+ "prd_percent": {
661
+ "n": 1993,
662
+ "n_dropped": 0,
663
+ "mean": 20.25401100667352,
664
+ "std": 4.145112855138137,
665
+ "median": 19.661443512121668,
666
+ "p10": 15.63630697927566,
667
+ "p90": 25.764670701633847,
668
+ "max": 39.47303268590466,
669
+ "min": 7.928268982114174
670
+ },
671
+ "prdn_noise_percent": {
672
+ "n": 1993,
673
+ "n_dropped": 0,
674
+ "mean": 5.470065931442477,
675
+ "std": 7.572460203340446,
676
+ "median": 0.0,
677
+ "p10": 0.0,
678
+ "p90": 17.42995163135611,
679
+ "max": 36.551554345576356,
680
+ "min": 0.0
681
+ },
682
+ "rmse": {
683
+ "n": 1993,
684
+ "n_dropped": 0,
685
+ "mean": 0.20254000735716904,
686
+ "std": 0.041451138113113274,
687
+ "median": 0.19661443701900738,
688
+ "p10": 0.15636305858214766,
689
+ "p90": 0.2576467067349471,
690
+ "max": 0.394730281670748,
691
+ "min": 0.07928268864769462
692
+ },
693
+ "cosine_similarity": {
694
+ "n": 1993,
695
+ "n_dropped": 0,
696
+ "mean": 0.9787768911789005,
697
+ "std": 0.009141814556132492,
698
+ "median": 0.9807648658752441,
699
+ "p10": 0.9671634078025818,
700
+ "p90": 0.987883985042572,
701
+ "max": 0.9969350695610046,
702
+ "min": 0.9194924831390381
703
+ }
704
+ },
705
+ "spectral": {
706
+ "band_total_rel_error": {
707
+ "n": 1993,
708
+ "n_dropped": 0,
709
+ "mean": 0.11788271084808284,
710
+ "std": 0.06922970007304675,
711
+ "median": 0.10772446471290559,
712
+ "p10": 0.037755744472932035,
713
+ "p90": 0.21075176086680966,
714
+ "max": 0.4863936402341885,
715
+ "min": 0.0023175960290837704
716
+ },
717
+ "weighted_freq_prd_percent": {
718
+ "n": 1993,
719
+ "n_dropped": 0,
720
+ "mean": 16.456377498985205,
721
+ "std": 3.484430353028752,
722
+ "median": 15.850709359494445,
723
+ "p10": 12.646003638366013,
724
+ "p90": 21.299068456554878,
725
+ "max": 31.242950008858607,
726
+ "min": 6.881057422832186
727
+ },
728
+ "coherence": {
729
+ "n": 1993,
730
+ "n_dropped": 0,
731
+ "mean": 0.6077523737613125,
732
+ "std": 0.06660964723397608,
733
+ "median": 0.600602073274619,
734
+ "p10": 0.5315293104791412,
735
+ "p90": 0.6964260803676924,
736
+ "max": 0.9134117222792593,
737
+ "min": 0.45634934358303714
738
+ }
739
+ }
740
+ },
741
+ "median": {
742
+ "n": 1994,
743
+ "time_domain": {
744
+ "prd_percent": {
745
+ "n": 1994,
746
+ "n_dropped": 0,
747
+ "mean": 20.605158686629977,
748
+ "std": 4.703505059925269,
749
+ "median": 20.110607258460057,
750
+ "p10": 14.97378224078493,
751
+ "p90": 26.69323390577234,
752
+ "max": 49.76236603461514,
753
+ "min": 7.37384356898855
754
+ },
755
+ "prdn_noise_percent": {
756
+ "n": 1994,
757
+ "n_dropped": 0,
758
+ "mean": 0.2734546519152656,
759
+ "std": 2.0561753899863318,
760
+ "median": 0.0,
761
+ "p10": 0.0,
762
+ "p90": 0.0,
763
+ "max": 40.84668005586006,
764
+ "min": 0.0
765
+ },
766
+ "rmse": {
767
+ "n": 1994,
768
+ "n_dropped": 0,
769
+ "mean": 0.20605142898104276,
770
+ "std": 0.04703510711112982,
771
+ "median": 0.2011060688829414,
772
+ "p10": 0.1497378241518304,
773
+ "p90": 0.2669323332911922,
774
+ "max": 0.4976235179826352,
775
+ "min": 0.07373842929029631
776
+ },
777
+ "cosine_similarity": {
778
+ "n": 1994,
779
+ "n_dropped": 0,
780
+ "mean": 0.9778557237734646,
781
+ "std": 0.010359907785270905,
782
+ "median": 0.9798967838287354,
783
+ "p10": 0.964844536781311,
784
+ "p90": 0.9888759851455688,
785
+ "max": 0.9973605275154114,
786
+ "min": 0.8731319904327393
787
+ }
788
+ },
789
+ "spectral": {
790
+ "band_total_rel_error": {
791
+ "n": 1994,
792
+ "n_dropped": 0,
793
+ "mean": 0.12026475878291672,
794
+ "std": 0.07097882930739927,
795
+ "median": 0.11044840142334293,
796
+ "p10": 0.0360310351248394,
797
+ "p90": 0.22108133030575675,
798
+ "max": 0.5461868248785344,
799
+ "min": 0.0016862046092425468
800
+ },
801
+ "weighted_freq_prd_percent": {
802
+ "n": 1994,
803
+ "n_dropped": 0,
804
+ "mean": 17.04944997930087,
805
+ "std": 3.8230457892038507,
806
+ "median": 16.59788536963567,
807
+ "p10": 12.599366077714466,
808
+ "p90": 22.249450108248297,
809
+ "max": 37.176514275320756,
810
+ "min": 7.242742783206634
811
+ },
812
+ "coherence": {
813
+ "n": 1994,
814
+ "n_dropped": 0,
815
+ "mean": 0.6098215005775911,
816
+ "std": 0.0753621023935375,
817
+ "median": 0.6002069398266277,
818
+ "p10": 0.5244453100177369,
819
+ "p90": 0.7080955777191399,
820
+ "max": 0.9493542514169659,
821
+ "min": 0.45903252824012536
822
+ }
823
+ }
824
+ },
825
+ "noisy": {
826
+ "n": 1993,
827
+ "time_domain": {
828
+ "prd_percent": {
829
+ "n": 1993,
830
+ "n_dropped": 0,
831
+ "mean": 20.270204948333966,
832
+ "std": 5.074554944670852,
833
+ "median": 19.803340232001297,
834
+ "p10": 14.183888779269875,
835
+ "p90": 26.923690760353413,
836
+ "max": 43.79183213721506,
837
+ "min": 6.566833162129387
838
+ },
839
+ "prdn_noise_percent": {
840
+ "n": 1973,
841
+ "n_dropped": 0,
842
+ "mean": 0.0,
843
+ "std": 0.0,
844
+ "median": 0.0,
845
+ "p10": 0.0,
846
+ "p90": 0.0,
847
+ "max": 0.0,
848
+ "min": 0.0
849
+ },
850
+ "rmse": {
851
+ "n": 1993,
852
+ "n_dropped": 0,
853
+ "mean": 0.20270182007450735,
854
+ "std": 0.0507456295978959,
855
+ "median": 0.19803102644308318,
856
+ "p10": 0.14183888858374952,
857
+ "p90": 0.26923690081475593,
858
+ "max": 0.4379182587342702,
859
+ "min": 0.06566832920012071
860
+ },
861
+ "cosine_similarity": {
862
+ "n": 1993,
863
+ "n_dropped": 0,
864
+ "mean": 0.9784047238143676,
865
+ "std": 0.011046786543852116,
866
+ "median": 0.980591893196106,
867
+ "p10": 0.9643956303596497,
868
+ "p90": 0.9900771498680114,
869
+ "max": 0.997847318649292,
870
+ "min": 0.8991802930831909
871
+ }
872
+ },
873
+ "spectral": {
874
+ "band_total_rel_error": {
875
+ "n": 1993,
876
+ "n_dropped": 0,
877
+ "mean": 0.1366382329408217,
878
+ "std": 0.09703050109011963,
879
+ "median": 0.11864333423198366,
880
+ "p10": 0.038664597644223024,
881
+ "p90": 0.2514669456129381,
882
+ "max": 0.9417399364967387,
883
+ "min": 0.0025669583156433208
884
+ },
885
+ "weighted_freq_prd_percent": {
886
+ "n": 1993,
887
+ "n_dropped": 0,
888
+ "mean": 17.983734573121883,
889
+ "std": 4.358799983184669,
890
+ "median": 17.605689840472774,
891
+ "p10": 12.907123432550424,
892
+ "p90": 23.368471342820385,
893
+ "max": 46.956720665598404,
894
+ "min": 6.322059086593934
895
+ },
896
+ "coherence": {
897
+ "n": 1993,
898
+ "n_dropped": 0,
899
+ "mean": 0.6034250153066995,
900
+ "std": 0.08314173451956625,
901
+ "median": 0.591643434915085,
902
+ "p10": 0.5176387221705776,
903
+ "p90": 0.7092491018907441,
904
+ "max": 0.970981941325815,
905
+ "min": 0.2382247154287746
906
+ }
907
+ }
908
+ }
909
+ }
910
+ },
911
+ "context": {
912
+ "noise_power": {
913
+ "n": 5980,
914
+ "n_dropped": 0,
915
+ "mean": 0.15037502391967347,
916
+ "std": 0.32709821991828314,
917
+ "median": 0.1032668806994739,
918
+ "p10": 0.03498012965736385,
919
+ "p90": 0.2733015819428877,
920
+ "max": 8.300822757983141,
921
+ "min": 0.002485580136875297
922
+ },
923
+ "noise_rms": {
924
+ "n": 5980,
925
+ "n_dropped": 0,
926
+ "mean": 0.34740656615714216,
927
+ "std": 0.17228958677348064,
928
+ "median": 0.3213516463286604,
929
+ "p10": 0.1870297557340719,
930
+ "p90": 0.522782537227703,
931
+ "max": 2.8811148463716507,
932
+ "min": 0.049855592834458375
933
+ },
934
+ "qrs_snr_db": {
935
+ "n": 0,
936
+ "n_dropped": 0
937
+ }
938
+ },
939
+ "robustness": {
940
+ "n_windows": 500,
941
+ "prd_threshold": 10.0,
942
+ "headline": {
943
+ "empirical_snr": {
944
+ "prd_at_0db": 78.24470520019531,
945
+ "prd_at_-6db": 106.31517028808594,
946
+ "prd_slope_per_db": 4.180139424493857,
947
+ "robust_snr_db_at_prd_threshold": 12.0
948
+ },
949
+ "artifacts": {
950
+ "prd_by_family_mid_severity": {
951
+ "motion": 39.208396911621094,
952
+ "baseline_wander": 48.87016677856445
953
+ },
954
+ "worst_family": "baseline_wander",
955
+ "worst_prd_mid_severity": 48.87016677856445
956
+ },
957
+ "imprint_output_autocorr_max": 0.28498268127441406,
958
+ "morphology": {
959
+ "clean": {
960
+ "ac_ratio": 1.0003251198538354,
961
+ "ac_abs_err_pct": 6.2061084314799695,
962
+ "shape_corr": 0.7596679101936857,
963
+ "notch_agreement": 0.8273031316509577,
964
+ "n_pulses_matched": 3289.0
965
+ },
966
+ "at_0db": {
967
+ "ac_ratio": 0.8360110941523184,
968
+ "ac_abs_err_pct": 22.821792472957654,
969
+ "shape_corr": 0.5099669848264383,
970
+ "notch_agreement": 0.6566478076379066,
971
+ "n_pulses_matched": 2828.0
972
+ },
973
+ "at_-6db": {
974
+ "ac_ratio": 0.6991996833578716,
975
+ "ac_abs_err_pct": 36.002287078112175,
976
+ "shape_corr": 0.44304784665928343,
977
+ "notch_agreement": 0.6371326803205699,
978
+ "n_pulses_matched": 2246.0
979
+ }
980
+ }
981
+ },
982
+ "empirical_snr_curve": [
983
+ {
984
+ "snr_db": 12.0,
985
+ "prd_mean": 30.90505027770996,
986
+ "prd_median": 30.481647491455078,
987
+ "morphology": {
988
+ "ac_ratio": 0.9868498548078241,
989
+ "ac_abs_err_pct": 8.452655946276574,
990
+ "shape_corr": 0.6904320488611952,
991
+ "notch_agreement": 0.7771587743732591,
992
+ "n_pulses_matched": 3231.0
993
+ }
994
+ },
995
+ {
996
+ "snr_db": 8.0,
997
+ "prd_mean": 42.041404724121094,
998
+ "prd_median": 42.21662902832031,
999
+ "morphology": {
1000
+ "ac_ratio": 0.9674848394527191,
1001
+ "ac_abs_err_pct": 11.281486636744939,
1002
+ "shape_corr": 0.6253737542255217,
1003
+ "notch_agreement": 0.7519525148391127,
1004
+ "n_pulses_matched": 3201.0
1005
+ }
1006
+ },
1007
+ {
1008
+ "snr_db": 6.0,
1009
+ "prd_mean": 49.59197998046875,
1010
+ "prd_median": 49.87632751464844,
1011
+ "morphology": {
1012
+ "ac_ratio": 0.9473137104660547,
1013
+ "ac_abs_err_pct": 13.046730739813128,
1014
+ "shape_corr": 0.6100892569035186,
1015
+ "notch_agreement": 0.7406698564593301,
1016
+ "n_pulses_matched": 3135.0
1017
+ }
1018
+ },
1019
+ {
1020
+ "snr_db": 3.0,
1021
+ "prd_mean": 62.89875030517578,
1022
+ "prd_median": 62.890846252441406,
1023
+ "morphology": {
1024
+ "ac_ratio": 0.9067035424193783,
1025
+ "ac_abs_err_pct": 17.12815019522914,
1026
+ "shape_corr": 0.5662361207614421,
1027
+ "notch_agreement": 0.725289256198347,
1028
+ "n_pulses_matched": 3025.0
1029
+ }
1030
+ },
1031
+ {
1032
+ "snr_db": 0.0,
1033
+ "prd_mean": 78.24470520019531,
1034
+ "prd_median": 78.48385620117188,
1035
+ "morphology": {
1036
+ "ac_ratio": 0.8360110941523184,
1037
+ "ac_abs_err_pct": 22.821792472957654,
1038
+ "shape_corr": 0.5099669848264383,
1039
+ "notch_agreement": 0.6566478076379066,
1040
+ "n_pulses_matched": 2828.0
1041
+ }
1042
+ },
1043
+ {
1044
+ "snr_db": -3.0,
1045
+ "prd_mean": 94.68470764160156,
1046
+ "prd_median": 94.78465270996094,
1047
+ "morphology": {
1048
+ "ac_ratio": 0.7605883360323906,
1049
+ "ac_abs_err_pct": 29.652624719607502,
1050
+ "shape_corr": 0.4820204597809022,
1051
+ "notch_agreement": 0.6509803921568628,
1052
+ "n_pulses_matched": 2550.0
1053
+ }
1054
+ },
1055
+ {
1056
+ "snr_db": -6.0,
1057
+ "prd_mean": 106.31517028808594,
1058
+ "prd_median": 106.75015258789062,
1059
+ "morphology": {
1060
+ "ac_ratio": 0.6991996833578716,
1061
+ "ac_abs_err_pct": 36.002287078112175,
1062
+ "shape_corr": 0.44304784665928343,
1063
+ "notch_agreement": 0.6371326803205699,
1064
+ "n_pulses_matched": 2246.0
1065
+ }
1066
+ },
1067
+ {
1068
+ "snr_db": -9.0,
1069
+ "prd_mean": 116.08651733398438,
1070
+ "prd_median": 116.25309753417969,
1071
+ "morphology": {
1072
+ "ac_ratio": 0.6568885212060525,
1073
+ "ac_abs_err_pct": 40.31230960925028,
1074
+ "shape_corr": 0.4123020472992563,
1075
+ "notch_agreement": 0.6119246861924686,
1076
+ "n_pulses_matched": 1912.0
1077
+ }
1078
+ },
1079
+ {
1080
+ "snr_db": -12.0,
1081
+ "prd_mean": 124.2331771850586,
1082
+ "prd_median": 124.06021881103516,
1083
+ "morphology": {
1084
+ "ac_ratio": 0.6195120909506531,
1085
+ "ac_abs_err_pct": 44.41244959694391,
1086
+ "shape_corr": 0.40056227076570483,
1087
+ "notch_agreement": 0.583077866339669,
1088
+ "n_pulses_matched": 1631.0
1089
+ }
1090
+ }
1091
+ ],
1092
+ "reference": {
1093
+ "clean": 19.34735870361328,
1094
+ "native": 40.06845474243164
1095
+ },
1096
+ "reference_morphology": {
1097
+ "clean": {
1098
+ "ac_ratio": 1.0003251198538354,
1099
+ "ac_abs_err_pct": 6.2061084314799695,
1100
+ "shape_corr": 0.7596679101936857,
1101
+ "notch_agreement": 0.8273031316509577,
1102
+ "n_pulses_matched": 3289.0
1103
+ },
1104
+ "native": {
1105
+ "ac_ratio": 0.9606663771475679,
1106
+ "ac_abs_err_pct": 9.40649283613031,
1107
+ "shape_corr": 0.7164764154397771,
1108
+ "notch_agreement": 0.8020994133991973,
1109
+ "n_pulses_matched": 3239.0
1110
+ }
1111
+ },
1112
+ "artifacts": {
1113
+ "motion": [
1114
+ {
1115
+ "severity": 0.25,
1116
+ "prd_mean": 29.84205436706543
1117
+ },
1118
+ {
1119
+ "severity": 0.5,
1120
+ "prd_mean": 39.208396911621094
1121
+ },
1122
+ {
1123
+ "severity": 0.75,
1124
+ "prd_mean": 53.669395446777344
1125
+ }
1126
+ ],
1127
+ "baseline_wander": [
1128
+ {
1129
+ "severity": 0.25,
1130
+ "prd_mean": 35.275936126708984
1131
+ },
1132
+ {
1133
+ "severity": 0.5,
1134
+ "prd_mean": 48.87016677856445
1135
+ },
1136
+ {
1137
+ "severity": 0.75,
1138
+ "prd_mean": 60.49037170410156
1139
+ }
1140
+ ]
1141
+ },
1142
+ "imprint": {
1143
+ "pure_noise": {
1144
+ "input_autocorr_mean": 0.2852746248245239,
1145
+ "output_autocorr_mean": 0.28498268127441406,
1146
+ "residual_rms": 1.0
1147
+ }
1148
+ }
1149
+ }
1150
+ }
reference_vectors.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ec8f4520cb5ade6769aa1805f28f45f40c9306392113adbf662f8362ee6ffb24
3
+ size 19702
sample_stimulus.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7b9d0a4f6866fc18e08c70a88a38f3c16a9b0abb44c74c5f86bba0cb30de5368
3
+ size 9464
scorecard.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "mean_prd_percent": 20.3765,
3
+ "median_prd_percent": 19.8541,
4
+ "p95_prd_percent": 28.9464,
5
+ "mean_snr_db": 14.044,
6
+ "median_snr_db": 14.043,
7
+ "actual_cr": 31.944,
8
+ "bitrate_bps": 32.06,
9
+ "n_frames": 5980
10
+ }
spiht_app_config.h ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * SPIHT codec deploy configuration for PPG @ 32x.
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 320
12
+ #define APP_SPIHT_LEVELS 6
13
+ #define APP_SPIHT_MAX_BITS 160
14
+ #define APP_SPIHT_MAX_BYTES 20
15
+ #define APP_SPIHT_USE_AC 1
16
+ #define APP_SPIHT_WAVELET_NAME "coif5"
17
+ #define APP_SPIHT_MODALITY "ppg"
18
+
19
+ #endif /* COMPRESSIONKIT_SPIHT_APP_CONFIG_H */
spiht_config.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "modality": "ppg",
3
+ "sample_rate": 64,
4
+ "frame_size": 320,
5
+ "target_cr": 32.0,
6
+ "wavelet": "coif5",
7
+ "levels": 6,
8
+ "use_ac": true,
9
+ "bits_per_sample": 16,
10
+ "max_bits": 160
11
+ }