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.txt 加 transfer_module.c 源文件
Step 3.2:dsp_algo/dll/CMakeLists.txt 链接 transfer_module · 编入 dspalgo_dll.dll
Step 3.3:dsp_algo/include/module_type_id.h 加 TRANSFER_MODULE_TYPE_ID = 0x100E0005(承接 F3 phase 0x100E0004)
Step 3.4:dsp_algo/include/modules_config.h 加 DYNCHAIN_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 串行后续) | — |