code wiki / (root) / nx_rec_grade_gate.nx

nx_rec_grade_gate.nx source

↩ module page · 122 lines · 4224 B

1// nx_rec_grade_gate.nx -- REFEREE for the recording-quality grader (nx_rec_grade). 2// 3// Synthesizes signals with known defects and checks the grader flags each: 4// GOOD : triangle amp 8000, no offset -> REC_GOOD (trips nothing) 5// CLIPPED: triangle amp 50000 (pins to +-FS) -> REC_CLIPPED 6// QUIET : triangle amp 500 -> REC_TOO_QUIET 7// DC_BIAS: triangle amp 8000 + offset 12000 -> REC_DC_BIAS 8// LOUD : square amp 30000 (hot, no clip) -> REC_TOO_LOUD 9// The GOOD case is the NEG-CONTROL: a clean recording must not trip any defect. 10// 11// Evidence -> stdout + knowledge/status/rec_grade_gate.log. Exit 0 GREEN / 1 RED. 12// Sovereign x86_64 throughout. license_tier: ORIGINAL 13import "nx_syscalls_x86_64.nx" 14import "nx_rec_grade.nx" 15 16const NS: i64 = 2048 17 18func gp(logfd: i64, s: *u8) -> i64 { 19 var n: i64 = 0 20 while s[n] != (0 as u8) { n = n + 1 } 21 sys_write(1, s, n) 22 if logfd > 0 { sys_write(logfd, s, n) } 23 return 0 24} 25func gn(logfd: i64, v: i64) -> i64 { 26 let bb: *u8 = sys_mmap(28) 27 var m: i64 = v 28 if m < 0 { sys_write(1, "-\x00" as *u8, 1); if logfd > 0 { sys_write(logfd, "-\x00" as *u8, 1) } m = 0 - m } 29 let t: *u8 = sys_mmap(28) 30 var k: i64 = 0 31 if m == 0 { t[0] = 48 as u8; k = 1 } 32 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 33 var i: i64 = 0 34 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 35 sys_write(1, bb, k) 36 if logfd > 0 { sys_write(logfd, bb, k) } 37 return 0 38} 39 40func _store_i16(buf: *u8, i: i64, v: i64) -> i64 { 41 var x: i64 = v 42 if x > 32767 { x = 32767 } 43 if x < -32768 { x = -32768 } 44 if x < 0 { x = x + 0x10000 } 45 buf[i * 2] = (x & 0xff) as u8 46 buf[i * 2 + 1] = ((x >> 8) & 0xff) as u8 47 return 0 48} 49 50// triangle wave, period 64, +-amp, plus DC offset 51func gen_tri(buf: *u8, n: i64, amp: i64, dc: i64) -> i64 { 52 var i: i64 = 0 53 while i < n { 54 let ph: i64 = i % 64 55 var v: i64 = 0 56 if ph < 32 { v = (0 - amp) + (2 * amp * ph) / 32 } 57 if ph >= 32 { v = amp - (2 * amp * (ph - 32)) / 32 } 58 _store_i16(buf, i, v + dc) 59 i = i + 1 60 } 61 return 0 62} 63// square wave, period 64, +-amp (hot level, no clipping if amp < clip thresh) 64func gen_sq(buf: *u8, n: i64, amp: i64) -> i64 { 65 var i: i64 = 0 66 while i < n { 67 var v: i64 = amp 68 if (i % 64) >= 32 { v = 0 - amp } 69 _store_i16(buf, i, v) 70 i = i + 1 71 } 72 return 0 73} 74 75func grade1(logfd: i64, label: *u8, pcm: *u8, out: *i64) -> i64 { 76 let verdict: i64 = nx_rec_grade(pcm, NS, out) 77 gp(logfd, label) 78 gp(logfd, " peak=\x00" as *u8); gn(logfd, out[0]) 79 gp(logfd, " rms=\x00" as *u8); gn(logfd, out[1]) 80 gp(logfd, " dc=\x00" as *u8); gn(logfd, out[2]) 81 gp(logfd, " clip=\x00" as *u8); gn(logfd, out[3]) 82 gp(logfd, " verdict=\x00" as *u8); gn(logfd, verdict) 83 gp(logfd, "\n\x00" as *u8) 84 return verdict 85} 86 87func main() -> i64 { 88 let logfd: i64 = sys_openat_append("knowledge/status/rec_grade_gate.log\x00" as *u8, 0x1a4) 89 gp(logfd, "REC-GRADE-GATE recording-quality\n\x00" as *u8) 90 91 let out: *i64 = sys_mmap(32) as *i64 92 let buf: *u8 = sys_mmap(NS * 2) 93 94 gen_tri(buf, NS, 8000, 0) 95 let v_good: i64 = grade1(logfd, " GOOD \x00" as *u8, buf, out) 96 gen_tri(buf, NS, 50000, 0) 97 let v_clip: i64 = grade1(logfd, " CLIPPED\x00" as *u8, buf, out) 98 gen_tri(buf, NS, 500, 0) 99 let v_quiet: i64 = grade1(logfd, " QUIET \x00" as *u8, buf, out) 100 gen_tri(buf, NS, 8000, 12000) 101 let v_dc: i64 = grade1(logfd, " DC_BIAS\x00" as *u8, buf, out) 102 gen_sq(buf, NS, 30000) 103 let v_loud: i64 = grade1(logfd, " LOUD \x00" as *u8, buf, out) 104 105 var ok: i64 = 1 106 if v_good != REC_GOOD { ok = 0 } 107 if v_clip != REC_CLIPPED { ok = 0 } 108 if v_quiet != REC_TOO_QUIET { ok = 0 } 109 if v_dc != REC_DC_BIAS { ok = 0 } 110 if v_loud != REC_TOO_LOUD { ok = 0 } 111 112 if ok == 1 { 113 gp(logfd, "REC-GRADE-GATE result=ALL-PASS verdict=GREEN\n\x00" as *u8) 114 if logfd > 0 { sys_close(logfd) } 115 sys_exit(0) 116 return 0 117 } 118 gp(logfd, "REC-GRADE-GATE result=FAIL verdict=RED\n\x00" as *u8) 119 if logfd > 0 { sys_close(logfd) } 120 sys_exit(1) 121 return 1 122}