| { |
| "family": "rvq", |
| "method": "ai", |
| "modality": "ppg", |
| "sample_rate": 64, |
| "compression_ratio": 32, |
| "experiment_id": "ppg-rvq-32x", |
| "run_name": "ppg_rvq_64hz_32x_golden", |
| "package_version": "1.0", |
| "input_contract": { |
| "encoder_input_shape": [ |
| null, |
| 1, |
| 320, |
| 1 |
| ], |
| "encoder_input_dtype": "float32" |
| }, |
| "preprocessing_contract": { |
| "format_version": 1, |
| "sample_rate_hz": 64, |
| "frame_size": 320, |
| "input_shape": [ |
| 1, |
| 1, |
| 320, |
| 1 |
| ], |
| "normalization": { |
| "kind": "per_frame_layer_norm", |
| "mean": "mean over all samples in each frame", |
| "variance": "mean squared deviation over all samples in each frame", |
| "epsilon": 0.001, |
| "inverse_for_display": "raw = normalized * sqrt(variance + epsilon) + mean" |
| }, |
| "int8_quantization": { |
| "calibration_frames": 4096, |
| "validation_frames": 2048, |
| "sampling_pool_frames": 65536, |
| "sampling_method": "seeded reservoir sample; disjoint calibration and validation partitions" |
| } |
| }, |
| "encoder": { |
| "tflite": "encoder_float32.tflite", |
| "header": "encoder.h", |
| "default_variant": "float32", |
| "default_tflite": "encoder_float32.tflite", |
| "float32_tflite": "encoder_float32.tflite", |
| "fp16_tflite": "encoder_fp16.tflite", |
| "fp16_header": "encoder_fp16.h", |
| "int16x8_tflite": "encoder_int16x8.tflite", |
| "int16x8_header": "encoder_int16x8.h", |
| "int8_tflite": "encoder.tflite", |
| "int8_header": "encoder.h", |
| "variants": { |
| "float32": { |
| "tflite": "encoder_float32.tflite", |
| "input_dtype": "float32" |
| }, |
| "fp16": { |
| "tflite": "encoder_fp16.tflite", |
| "input_dtype": "float32" |
| }, |
| "int16x8": { |
| "tflite": "encoder_int16x8.tflite", |
| "input_dtype": "float32" |
| }, |
| "int8": { |
| "tflite": "encoder.tflite", |
| "input_dtype": "int8" |
| } |
| }, |
| "keras": "encoder.keras", |
| "input_shape": [ |
| null, |
| 1, |
| 320, |
| 1 |
| ], |
| "output_shape": [ |
| null, |
| 1, |
| 20, |
| 16 |
| ] |
| }, |
| "decoder": { |
| "keras": "decoder.keras", |
| "float32_tflite": "decoder_float32.tflite", |
| "int8_tflite": "decoder.tflite", |
| "int8_header": "decoder.h", |
| "input_shape": [ |
| null, |
| 1, |
| 20, |
| 16 |
| ], |
| "output_shape": [ |
| null, |
| 1, |
| 320, |
| 1 |
| ] |
| }, |
| "codebook": { |
| "npz": "codebook.npz", |
| "header": "codebook.h", |
| "num_levels": 2, |
| "num_embeddings": 256, |
| "embedding_dim": 16 |
| }, |
| "sample_data": { |
| "npz": "sample_data.npz", |
| "num_samples": 10, |
| "arrays": [ |
| "inputs", |
| "targets", |
| "reconstructions" |
| ] |
| } |
| } |