跳转至

P_dsp.A21.F5-transfer-module-algorithm · XiLink Transfer Module DSP 算法层(GCC-PHAT + Coherence)+ dspalgo_dll export

Worker:ClaudeB(DSP · dsp_algo 独立仓主 worktree · F3 串行后续) · 部门:DSP+P_dsp · 预计:2.5d · 优先级:P0 · 状态:dispatched · isolation:🧵 file(dsp_algo 独立仓 master · 与 F1 frontend / F3 phase 算法 文件正交 · 仅 dspalgo_dll.c 与 F3 有 merge 点)

🔍 触发与解锁链

触发:用户 2026-06-13 09:55 提 5 点新需求 #5(xilink 新增 transfer 功能 · 双通道频响/相位/延时分析)· 12:51 拍板 accept ADR-21 · 14:15 拍板 start F1+F3+F5 三连。

用户原话(verbatim · ADR-21 §1.1):

"5. xilink 中需要添加 transfer 功能 · 可以选择两个通道做对比的相位曲线和频响曲线差异 · 以及延时分析"

架构契约(ADR-21 §3.4 业务契约 5 必填段全填): - 输入:refChannel ChannelBuffer + measureChannel ChannelBuffer + sampleRate · controls(refNodeId/refChannelIdx/measureNodeId/measureChannelIdx/fftSize/averaging/delayCompensation/delayMs/coherenceThreshold) - 输出:MeterFrame_Transfer(freqs Hz / magnitudeDb / phaseWrapped ° / phaseUnwrapped ° / coherence 0~1 / delayLockedMs / delayFinderMs / averagedCount / resolution / timestamp) - 算法:GCC-PHAT delay finder + cross-spectral density coherence + H(f) = X(f)/Y(f) magnitude/phase + averaging(rms/exp) - 三层分工:L1 算法库(本任务)· L3 前端零数学(F6)

解锁链(本任务 zombie 后): - F6 transfer-module 前端 ready(blocked-by-F1+F5 · 等 F1 dock host 也 zombie 后 ClaudeA 2.0d) - F7 e2e ≥ 15 case 真值断言(blocked-by-F2+F4+F6)

任务定义(基于 ADR-21 §3.4)

子任务 ① · transfer_module.c + .h 算法实装(1.4d)

Step 1.1:NEW dsp_algo/modules/transfer_module.h(仿 phase_module.h F3 标本): - 函数声明: - int transfer_module_init(int fftSize, const char* averaging) - int transfer_module_process(const char* refNodeId, int refChannelIdx, const char* measureNodeId, int measureChannelIdx, MeterFrame_Transfer* outFrame) - int transfer_module_destroy(void) - 类型:MeterFrame_Transfer(若 dsp_algo 已有则复用 · 否则 NEW · 字段对齐 ADR-12 §3.3 / ADR-21 §3.4 ①) - typeId:TRANSFER_MODULE_TYPE_ID = 0x100E0005(承接 F3 phase 0x100E0004 序列)

Step 1.2:NEW dsp_algo/modules/transfer_module.c: - 算法核心 7 步: 1. 从 BuiltinLinkRegistry 查 refNodeId / measureNodeId 节点 · 取对应通道 PCM 各 fftSize 长度 2. 应用 windowFunction(默认 hann) 3. FFT 双通道(复用 F7 fft_module.c)→ Xref(f) + Xmeasure(f) 4. GCC-PHAT delay finder: - cross-spectrum:Sxy(f) = Xref(f) × Xmeasure(f) - PHAT 加权:Sxy_phat(f) = Sxy(f) / |Sxy(f)| - IFFT(Sxy_phat) → 时域互相关 r(τ) - argmax® → delayFinderMs(sample-accurate · 单位 ms) 5. Coherence:γ²(f) = |Sxy(f)|² / (Sxx(f) × Syy(f))(0~1 · auto-spectra 平均) 6. Magnitude/Phase:H(f) = Xmeasure(f) / Xref(f)(复数除法) - magnitudeDb = 20 * log10(|H(f)|) - phaseWrapped = atan2(imag(H), real(H)) · degrees - phaseUnwrapped = numpy.unwrap 等价(同 F3) 7. averaging(rms / exp · 仿 F7 fft_module):exp 用 EWMA · rms 用 sqrt(mean(x²)) - 严守探针架构铁律:只读节点 input port samples · 不修改主链路数据*(同 F7 c099772 + F3 铁律) - 失败回退(ADR-21 §3.4 ③): - Ref/measure 同信号:delayFinderMs ≈ 0 · 正常显示 - Coherence < threshold:mag/phase 字段标记 unreliable(前端灰显) - GCC-PHAT 跳变:delayFinder 平滑滤波 200ms 防抖 - Ref/measure 通道相同:返回错误码 -5(用户误选) - FFT OOM(fftSize=8192 + 8 ref/measure 多 instance):clamp 单 instance + log_warn

Step 1.3:GCC-PHAT 算法标本参考(C 实装): - 参考论文:Knapp & Carter "The Generalized Correlation Method for Estimation of Time Delay"(1976) - 标准实装:librosa.feature.gcc_phat 等价 C 翻译 · 不调 Python(本任务 C 实装) - sample-accurate:48000 Hz · 4ms = 192 sample · IFFT 后 argmax 索引 → 转 ms

子任务 ② · dspalgo_dll.c 加 transfer export(0.3d)

Step 2.1:dsp_algo/dll/dspalgo_dll.c 加 export 函数(仿 F7 + F3 模式 · 但要等 F3 先 commit phase export · 然后 rebase): - __declspec(dllexport) int transfer_module_get_transfer(const char* refNodeId, int refChannelIdx, const char* measureNodeId, int measureChannelIdx, int fftSize, const char* averaging, int delayCompensation_auto, double delayMs_manual, double coherenceThreshold, MeterFrame_Transfer* outFrame) - 参数与 F6 前端 P/Invoke 签名严格一致(F6 prompt 起草前通过 ADR-21 §3.4 ① 锁定) - 返回 0 = 成功 · -1 = refNodeId 不存在 · -2 = measureNodeId 不存在 · -3 = channelIdx 越界 · -4 = fftSize 不合法 · -5 = ref/measure 通道相同

Step 2.2:仿 F7 + F3 export 模式

Step 2.3:dsp_algo/dll/dspalgo_dll.h 同步加函数声明

Step 2.4:与 F3 共享 dspalgo_dll.c 的 merge 协议: - F3 先 commit phase_module_get_phase export - 本任务 git -C dsp_algo pull --rebase origin master 后再 commit transfer_module_get_transfer

子任务 ③ · CMake 集成 + 注册修复(0.3d)

Step 3.1:dsp_algo/modules/CMakeLists.txttransfer_module.c 源文件 Step 3.2:dsp_algo/dll/CMakeLists.txt 链接 transfer_module · 编入 dspalgo_dll.dll Step 3.3:dsp_algo/include/module_type_id.hTRANSFER_MODULE_TYPE_ID = 0x100E0005(承接 F3 phase 0x100E0004) Step 3.4:dsp_algo/include/modules_config.hDYNCHAIN_ENABLE_TRANSFER(默认 ON) Step 3.5:cmake build · dumpbin /exports dspalgo_dll.dll | grep transfer_module · 1 export 在 Step 3.6:CMake build 0 errors · 不破坏 F7 + F3 已锁基线(rms/scope/fft + phase 4 module + 508 passed 估)

子任务 ④ · 单元测试(0.5d)

Step 4.1:NEW dsp_algo/tests/test_transfer_module.c(仿 F7 + F3 模式): - Case 1:GCC-PHAT 4ms 延时 fixture · ref → 4ms delay → measure · delayFinderMs = 4ms ± 0.1ms(sample-accurate · ADR-21 §3.4 ② 延时检测精度) - Case 2:Magnitude PEQ -3dB@1kHz · ref → PEQ -3dB@1kHz → measure · magnitudeDb@1kHz = -3 ± 0.5dB(ADR-21 §3.4 ② 频响精度) - Case 3:Coherence 直连:ref/measure 直连无失真 · coherence > 0.95 全频段(ADR-21 §3.4 ② coherence 算法正确) - Case 4:异步信号:ref + measure 不相关白噪 · coherence < 0.3(ADR-21 §3.4 ② 区分能力) - Case 5:Ref/measure 通道相同:返回 -5 错误码(ADR-21 §3.4 ③ 用户误选) - Case 6:FFT OOM 防御:fftSize=8192 + 8 ref/measure instance · clamp 单 instance(防崩) - Case 7:Coherence < threshold:噪声主导 · mag/phase 字段标记 unreliable - Case 8:Averaging 收敛:exp/rms 模式收敛 < 3s(ADR-21 §3.4 ② 实时性)

Step 4.2:cmake test 全过 · 不破坏 F7 + F3 基线(零回归 · 估 502 + 6(F3) + 8(本) = 516 passed)

完整 prompt(直接复制粘贴 ClaudeB 终端)

[U-thread] P_dsp.A21.F5-transfer-module-algorithm · ADR-21 §3.4 transfer-module DSP 算法层 + dspalgo_dll export
[部门] DSP+P_dsp
[Worker CWD] d:/work/25_claude/workspace/AlgoDepartment/04_development/dsp_algo/
[Occupies] P_dsp.K-transfer-module + P5.K-dspalgo-dll
[优先级] P0(2.5d · transfer 算法 GCC-PHAT + coherence · 与 F1 frontend / F3 phase 算法 文件正交)
[ADR] docs/08-implementation/40-aios/ADR/ADR-AIOS-21-xilink-dock-and-analysis-modules.md(必读 §3.4 + §1.4 三层分工铁律)
[isolation] file(dsp_algo 独立仓 master · 与 F1/F3 文件正交 · 仅 dspalgo_dll.c 与 F3 共享 · F3 先 commit · 本任务 rebase)

⚠️ 重大铁律(F7 c099772 v4 教训沉淀):
**dsp_algo 是独立 git 仓库**(不是 04_development 子目录)· 必须 `cd 04_development/dsp_algo && git ...` 在 dsp_algo 仓 master branch 操作
不要在 04_development 主仓 commit 本任务 · 否则真值核查会 fatal: Needed a single revision

⚠️ 与 F3 共享 dspalgo_dll.c merge 协议:
F3 先 commit phase_module_get_phase export · 本任务起跑前 `git -C dsp_algo pull --rebase origin master` · 否则 dspalgo_dll.c 冲突

[参考文档绝对路径]
  - 业务契约:ADR-21 §3.4 完整 5 必填段(① TransferModuleManifest + MeterFrame_Transfer 接口 / ② GCC-PHAT 4ms ± 0.1ms / Magnitude PEQ ±0.5dB / Coherence > 0.95 / ③ 5 类失败回退 / ④ 5 步操作流 / ⑤ playwright e2e PEQ -3dB + 4ms 延时 + coherence 真值断言)
  - 用户 2026-06-13 09:55 拍板原话(ADR-21 §1.1 #5):xilink transfer 双通道频响/相位/延时分析
  - 范式 commits(worker 必读 · 用 `git -C 04_development/dsp_algo log --oneline` 查):
    * c099772 P_dsp.A18.F7 analysis-algorithms zombie 最末态(rms/scope/fft 3 module · dll export 模式 · CMake 集成 · 单测 · 严守探针架构)
    * 209cc8d F7 主体 commit(rms_v1 0x...01 + scope_v1 0x...02 + fft_v1 0x...03 · 1024-point radix-2 + Hann · 本任务 transfer_v1 = 0x100E0005 承接 F3 phase 0x100E0004)
    * 1556c99 F7 注册修复(module_type_id.h + modules_config.h + dynchain_core.h MAX_PORTS 8→16)
    * (F3 commit hash · 本任务起跑前 git pull 后查):P_dsp.A21.F3 phase_module(本任务 dspalgo_dll.c rebase 基线)
  - 现状参考(用 `git -C 04_development/dsp_algo show HEAD:dsp_algo/...` 查):
    * dsp_algo/modules/fft_module.c(F7 · FFT 算法标本 · 1024-point radix-2 + Hann · 本任务直接复用 FFT 主体)
    * dsp_algo/modules/phase_module.c(F3 · atan2/unwrap 标本 · 本任务参考相位部分)
    * dsp_algo/dll/dspalgo_dll.c(F7 + F3 · analysis_module_* + phase_module_get_phase export 模式 · 本任务 rebase 后加 transfer)
    * dsp_algo/include/module_type_id.h(F7 + F3 · 0x100E0001~4 · 本任务加 0x100E0005)
    * dsp_algo/tests/test_phase_module.c(F3 · 单测模式标本 · 本任务仿写 test_transfer_module.c)
  - 三层分工:ADR-07 §1.3.4 · ADR-21 §1.4 铁律(L1 算法库 = 本任务 · L3 前端零数学 = F6)
  - GCC-PHAT 论文:Knapp & Carter 1976(标准实装)· librosa.feature.gcc_phat 等价 C 翻译

[文件正交策略](.clinerules §任务隔离类型分配准则 v1.4):
  isolation: file · dsp_algo 独立仓 master · 与 F1 frontend / F3 phase 文件正交
  本任务文件:dsp_algo/modules/transfer_module.{c,h} + tests/test_transfer_module.c + dll export 加 transfer + module_type_id.h(加 TRANSFER)+ modules_config.h(加 ENABLE_TRANSFER)+ CMakeLists
  F1 文件:frontend_vue3/src/stages/xilink/dock/*(完全正交 · 不在 dsp_algo 仓)
  F3 文件:dsp_algo/modules/phase_module.{c,h} + tests/test_phase_module.c(完全正交 · 不同 module 文件)
  共享点:dspalgo_dll.c + .h(F3 先 commit phase export · 本任务 rebase 后加 transfer export)
  完全正交 · F3+F5 串行 commit dspalgo_dll.c 即可

【背景】
  用户 2026-06-13 09:55 提 5 点新需求中 #5:xilink transfer 功能 · 双通道频响/相位/延时分析(类 Smaart Suite)。
  ADR-21 accepted 2026-06-13 12:51 · 7 fork 13d · 本任务 F5 是 DSP 算法层(L1 算法库 · 含 GCC-PHAT)· F6 前端等 F1+F5 全 zombie。
  ADR-18 F7(c099772)+ F3(本周期并行)已落地 rms/scope/fft + phase 4 module · 本任务直接仿其结构加 transfer_module(typeId 0x100E0005 承接序列)。
  与 F1 dock host(frontend_vue3 · ClaudeA)+ F3 phase 算法(同 dsp_algo · 同 ClaudeB · 串行)文件正交 · 三线并行起跑。
  GCC-PHAT delay finder 是本任务核心难点(标准互相关 + PHAT 加权 + IFFT argmax · sample-accurate)。

【架构关键约束】
  ⚡ dsp_algo 是独立 git 仓库(F7 v4 教训沉淀):必须 `cd dsp_algo` 后 commit · 不在 04_development 主仓
  ⚡ 与 F3 共享 dspalgo_dll.c · F3 先 commit phase export · 本任务 rebase 后加 transfer export
  🎨 transfer_v1 typeId = 0x100E0005(承接 F7 0x...01~03 + F3 phase 0x...04)
  📋 输出 frame schema 必须复用 ADR-12 §3.3 / ADR-21 §3.4 ① MeterFrame_Transfer(字段不变)
  📋 探针架构铁律(F7 + F3 承接):**只读节点 input port samples · 不修改主链路数据**
  📋 三层分工(ADR-21 §1.4):L1 本任务 · L3 F6 前端零数学 · 不在 P7 sidecar
  ⚡ F5 范围与下游边界:本 F5 仅 DSP 算法 + dll export · **不实装前端 vue 组件**(那是 F6 范围 · 等 F1+F5 全 zombie)
  ⚡ FFT 算法直接复用 F7 fft_module.c 1024-point radix-2(不重造)· 仅在其上加 GCC-PHAT + Coherence + H(f) 计算

【执行步骤】
  Step 0 · 文件注入真值核查(强制门槛 · F2 教训承接 · F7 v4 dsp_algo 独立仓教训 · F3 共享 dspalgo_dll.c 教训)
    - cd 04_development/dsp_algo · 确认在 dsp_algo 独立仓
    - git -C 04_development/dsp_algo pull --rebase origin master · 拉取 F3 已 commit 的 phase export
    - git -C 04_development/dsp_algo log --oneline -10 · 确认 c099772 / 209cc8d / 1556c99 + F3 phase commit 在 master
    - git -C 04_development/dsp_algo show HEAD:dsp_algo/modules/fft_module.c | head -100 · 学习 F7 fft 实装
    - git -C 04_development/dsp_algo show HEAD:dsp_algo/dll/dspalgo_dll.c | grep "_module_get_" · 确认 phase export 已存在
    - git -C 04_development/dsp_algo show HEAD:dsp_algo/include/module_type_id.h · 确认 typeId 序列含 PHASE 0x100E0004
    - 留 commit log:Step 0 三层核查记录

  Step 1 · transfer_module.h + transfer_module.c 算法实装 1.4d(子任务 ①)
    - transfer_module.h:函数声明 + MeterFrame_Transfer 类型 + typeId 0x100E0005
    - transfer_module.c:核心算法 7 步(查节点 → window → FFT 双通道 → GCC-PHAT → Coherence → H(f) mag/phase → averaging)
    - GCC-PHAT 实装:cross-spectrum + PHAT 加权 + IFFT + argmax(sample-accurate)
    - 失败回退 5 类(同信号 / coherence 低 / 跳变 / 通道相同 / FFT OOM)
    - 严守探针架构(只读 input port · 不调任何 set_*)

  Step 2 · dspalgo_dll.c 加 transfer export 0.3d(子任务 ②)
    - transfer_module_get_transfer 签名(10 参数:ref/measure 节点 + channel + fftSize + averaging + delayCompensation + delayMs + coherenceThreshold + outFrame)
    - 仿 F7 + F3 export 模式(在 F3 phase export 之后 append)
    - dspalgo_dll.h 同步加声明
    - 错误码 -1/-2/-3/-4/-5(节点/节点/channel/fftSize/通道相同)

  Step 3 · CMake 集成 + 注册修复 0.3d(子任务 ③)
    - modules/CMakeLists.txt + dll/CMakeLists.txt 加源文件链接
    - module_type_id.h:TRANSFER_MODULE_TYPE_ID = 0x100E0005(F3 已加 PHASE 0x...04 · 本任务 append)
    - modules_config.h:DYNCHAIN_ENABLE_TRANSFER(默认 ON)
    - cmake build 0 errors · dumpbin /exports dspalgo_dll.dll | grep -c "_module_get_" · 5 export 全在(rms/scope/fft + phase + transfer)
    - F7 + F3 基线零回归(估 502 + 6 = 508 passed 起步)

  Step 4 · 单元测试 0.5d(子任务 ④)
    - NEW test_transfer_module.c · 8 case(详见任务定义子任务 ④ Step 4.1)
    - GCC-PHAT 4ms ± 0.1ms 是核心 case(sample-accurate · 48000Hz × 4ms = 192 sample 整数偏移)
    - cmake test 全过 · 估 508 + 8 = 516 passed / 6 pre-existing failed 基线

  Step 5 · 构建 + 测试 + dll 验证全绿
    - cmake build 0 errors
    - cmake test 全过(基线 + 8 新增 case)
    - dumpbin /exports dspalgo_dll.dll | grep -c "_module_get_" · 5 export 全在(rms/scope/fft + phase + transfer)

  Step 6 · F6 联调验收(F6 zombie 后 · 但本任务 zombie 前先做 dll 拷贝准备)
    - 拷贝 dspalgo_dll.dll 到 backend_csharp 输出目录(若 P/Invoke 已就位)
    - F6 dotnet run + npm run dev · 实测 transfer-module 弹窗显示 mag/phase/coherence/delay 4 chart
    - 验 PEQ -3dB@1kHz + 4ms delay fixture → magnitudeDb@1kHz ≈ -3 ± 0.5dB · delayFinderMs ≈ 4ms ± 0.1ms · coherence > 0.95(ADR-21 §3.4 ② 真值断言)

  Step 7 · commit(在 dsp_algo 独立仓!)
    - cd 04_development/dsp_algo && git add . && git commit -m "feat(dsp_algo/transfer): P_dsp.A21.F5 transfer-module GCC-PHAT + Coherence + dspalgo_dll export

      用户 2026-06-13 09:55 提 5 点新需求 #5 · 12:51 accept ADR-21 · 14:15 拍板 start F1+F3+F5 三连。
      F5 本任务(ADR-21 §3.4):
      ① transfer_module.{c,h}(typeId 0x100E0005 承接 F3 phase 0x...04 · FFT 复用 fft_module · GCC-PHAT delay finder + Coherence + H(f) mag/phase + averaging)
      ② dspalgo_dll.c rebase F3 phase export 后加 transfer_module_get_transfer export(10 参数 · 与 F6 P/Invoke 签名一致)
      ③ CMake 集成 + module_type_id.h + modules_config.h 注册(ENABLE_TRANSFER 默认 ON)
      ④ test_transfer_module.c 8 case(GCC-PHAT 4ms±0.1ms / PEQ -3dB±0.5dB / coherence>0.95 / 异步<0.3 / 通道相同 -5 / FFT OOM / coherence 低 unreliable / averaging<3s)
      ⑤ cmake build + test 全绿 · F7 c099772 + F3 phase 基线零回归(估 516 passed)
      解锁 F6 transfer-module 前端(等 F1 dock host zombie 后并行启动)

      [step=7/7] [pid=P_dsp] [uid=P_dsp.A21.F5-transfer-module-algorithm] [type=fork] [isolation=file]
      [occupies=P_dsp.K-transfer-module+P5.K-dspalgo-dll] [files=7] [ipc=none]
      [adr=ADR-AIOS-21 §3.4 transfer-module 新增(#5 双通道频响/相位/延时 + GCC-PHAT)]"
    - git push(dsp_algo master · 不推 04_development 主仓)

【验收】
  ☐ Step 0 文件注入真值核查通过(`git -C dsp_algo log` + pull rebase F3 已 commit + module_type_id.h 含 PHASE)
  ☐ Step 1 transfer_module.{c,h} 7 步算法 + 5 类失败回退 + 探针架构铁律 + GCC-PHAT sample-accurate
  ☐ Step 2 dspalgo_dll.c transfer_module_get_transfer export · dumpbin 验证存在 · 与 F6 P/Invoke 签名一致
  ☐ Step 3 CMake build 0 errors · TRANSFER_MODULE_TYPE_ID = 0x100E0005
  ☐ Step 4 test_transfer_module.c 8 case 全过(GCC-PHAT 4ms±0.1ms 是核心)
  ☐ Step 5 cmake test 全过 · F7+F3 基线零回归(估 516 passed)
  ☐ Step 6 dll 拷贝准备完毕(F6/F1 zombie 后端到端验证 PEQ-3dB + 4ms 延时 + coherence>0.95)
  ☐ Step 7 commit 在 dsp_algo 独立仓(用 `git -C dsp_algo`)· 含 7 元组 trailer + ADR §3.4 引用

【禁止】
  ❌ 禁止跳过 Step 0 文件注入核查(F2 教训:必须 git pull rebase F3 + read 4 标本)
  ❌ 禁止在 04_development 主仓 commit(F7 v4 教训:dsp_algo 独立仓 · 必须 `cd dsp_algo` 操作)
  ❌ 禁止与 F3 同时 commit dspalgo_dll.c(merge 协议:F3 先 · 本任务 rebase 后)
  ❌ 禁止重造 FFT 算法(必须复用 F7 fft_module.c 1024-point radix-2 实装)
  ❌ 禁止在 P7 sidecar 实装 transfer 算法(三层分工铁律 · L1 算法库 = dsp_algo · 不是 P7)
  ❌ 禁止超前实施 transfer-module 前端 vue 组件(那是 F6 范围 · 本 F5 仅 DSP 算法 + dll export)
  ❌ 禁止破坏 F7 c099772 + F3 phase 已锁基线(零回归是硬门槛)
  ❌ 禁止修改 BuiltinLinkRegistry 接口(只读查询节点)
  ❌ 禁止修改主链路数据(探针架构铁律)
  ❌ 禁止 commit 缺三元组 trailer(.clinerules v1.6 铁律)
  ❌ 禁止嵌入完整 c 文件 > 60 行(.clinerules v1.6)· GCC-PHAT 拆 helper 函数(cross_spectrum / phat_weight / ifft_argmax)

解锁链(本任务 zombie 后)

  • ✅ transfer_module 算法层完成 · dspalgo_dll.dll 含 transfer_module_get_transfer export
  • ✅ MeterFrame_Transfer frame schema 锁定(对接 F6 前端消费 + Smaart 风格 4 chart)
  • ✅ GCC-PHAT delay finder sample-accurate 单测验证(4ms ± 0.1ms)
  • ✅ F6 transfer-module 前端 ready(blocked-by-F1+F5 · 等 F1 dock host 也 zombie 后 ClaudeA 2.0d)
  • ✅ F7 e2e ≥ 15 case 真值断言可起草(blocked-by-F2+F4+F6)

风险评估

风险 缓解
dsp_algo 独立仓 commit 误推到 04_development(F7 v4 教训复发风险) Step 7 显式 cd dsp_algo + git -C dsp_algo · prompt 多次警示
与 F3 共享 dspalgo_dll.c 冲突(同 ClaudeB 串行 commit) Step 0 强制 git -C dsp_algo pull --rebase · F3 先 commit · 本任务后 rebase + append transfer export
GCC-PHAT 算法实装复杂度高(论文级算法 · sample-accurate 困难) Step 1.3 引用 Knapp & Carter 1976 标准实装 + librosa.feature.gcc_phat 等价 C 翻译 + 单测 4ms ± 0.1ms 严格容差 + helper 函数拆分(cross_spectrum / phat_weight / ifft_argmax)
Coherence 算法易错(Sxx/Syy auto-spectra 需平均 N 帧) 单测 Case 3 直连 > 0.95 + Case 4 异步 < 0.3 双向覆盖 · averaging exp/rms 模式收敛 < 3s
H(f) = X(f)/Y(f) 复数除法 NaN 防御 0/0 时输出 NaN · 前端识别为 unreliable(coherence < threshold 时灰显)
PEQ -3dB@1kHz 频响精度 ±0.5dB 容差(频率 bin 不一定对齐 1kHz) fftSize=4096 · 48000Hz · bin resolution = 11.7Hz · 1kHz 落在 bin[85] 附近 · 单测取最近 ±2 bin 平均
8 通道并行 FFT OOM(fftSize=8192 × 8 通道 = 64KB × 复数 = 1MB / instance) clamp 单 instance · 多 instance 警告 · 单测 Case 6 验证
ClaudeB 排队膨胀(F3 2.0d + 本 F5 2.5d = 4.5d 串行) F3 文件正交但同 ClaudeB · 串行可接受 · 用户预期 2-2.5 周可完成
MeterFrame_Transfer schema 与 ADR-12 §3.3 字段不一致 Step 1.1 read ADR-12 §3.3 line 642-669 严格对齐字段名

历史

时间 事件 hash
2026-06-13 14:16 dispatched(用户 14:15 拍板 start F1+F3+F5 三连 · ClaudeB DSP 算法层 2.5d · dsp_algo 独立仓 · F3 串行后续)