马上注册 家电论坛,众多有奖活动等你来参与!
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 64728998 于 2026-5-7 18:09 编辑
摘要 近些年来,wfgui在模拟音频界无人不知,无人不晓,它的初衷是将昂贵稀少的实体抖晃仪软件化,使得维修人员、卡友爱好者以低成本的方式来标调自己卡座的带速及机械性能。本人考虑到移动端相应生态的缺失,移植其核心滤波器及算法,也一直以为wfgui就是行业内的金标准,主要的开发工作就是语法翻译、UI设计,直到后来有专业维修人员 抖音@模拟音频工坊 向我反馈wfgui其实是不符合抖晃仪的相应标准的,于是我开始扒开源码,深究其中的原因并耗时一个多月,对NewTuner的抖晃仪模块算法彻底进行重写。 本文基于三类证据:一是对 wfgui(wow-and-flutter-analyzer-master)与 NewTuner 最新源码包的静态审计;二是 IEC / DIN 公开点表与经校准实体抖晃仪 MEGURO MK-668G 、KENWOOD的实测点;三是 IEC / AES 公开标准摘要及主流硬件抖晃仪公开手册。 结论很明确:wfgui 更接近一个抖晃参数工程近似分析器,而不是一个前端可切换 JIS / NAB / DIN / CCIR 及出可靠读数的完整标准的数字抖晃仪。 wfgui 的主要问题不在于采用数字实现本身,而在于把不同标准中的滤波器家族、测试载频和显示统计混在了一起:主数值始终是 RMS,WOW / UNWTD 低频边界固定在 0.3 Hz 家族,3000 Hz 模式又没有重算独立的 3000 Hz 离散系数;与此同时,其 WTD 曲线与公开标准点表存在明显失配。 相比之下,重构后的 NewTuner 采用传统模拟抖晃仪一致的算法,并非采用现代的等效公式,而是采用微分方程和连续积分的思路,完全等价模拟传统抖晃仪的检测行为;其次,采用把滤波器家族、中心载频和显示统计分层处理。对数字抖晃仪而言,这种做法更适合今天的工程环境:既能对齐 JIS / NAB 与 DIN / CCIR 的核心滤波参数,又能在保持传统抖晃仪一致的读数观感的情况下以数字的形式准确读出、分析统计。
一、先把三个概念分开:滤波器曲线、中心载频、显示统计 讨论抖晃仪时,最容易混淆的其实不是“有没有滤波器”,而是下面三件事被很多软件写成了一个按钮:解调算法、各种参数的检测器、滤波器家族、中心载频、显示统计。 公开手册对此讲得很直接。Kenwood FL-180A 的公开规格明确写出:显示系统分别是 RMS value (JIS)、Mean value (NAB)、Peak value (CCIR, DIN);同时 WOW 频段给出 0.5–6 Hz(JIS/NAB)与 0.3–6 Hz(CCIR/DIN),UNWTD 则给出 0.5–200 Hz(JIS/NAB)与 0.3–200 Hz(CCIR/DIN)。 Meguro MK-669C 的公开规格也给出相同划分:RMS / NAB 用 3 kHz,IEC(DIN/CCIR) 用 3.15 kHz。(早期的CCIR标准采用3kHz测试频率,后期的机器更多按AES6-2008(r2012)标准说明时,又把它列为兼容 IEC 60386、IEEE Std-193、CCIR 409-2、DIN 45507,并明确说 standard test frequency is 3150 Hz,同时 3000 Hz can also be used作为工程兼容。) 真正严谨的实现应该先回答三个问题:每一种指标现在走的是哪一族滤波器?测试基频现在用的是 3 kHz 还是 3.15 kHz?最后对外显示的是 RMS、mean,还是 peak / sigma 一类的统计?这三个问题分不清,结果就很容易看起来像标准,实际上不是那个标准。
二、标准与行业共识:问题不在“数字化”,而在“混搭” IEC 60386 的公开说明写得很清楚:它规定的是录放设备速度波动的测量方法,适用于 weighted peak 检测的 flutter / wow 测量,并定义测量设备特性。AES6-2008 (R2012) 的公开摘要进一步说明:weighted peak flutter 使用 3150 Hz 测试信号,经解调、频响加权、峰-峰检测、时间加权后,在至少 5 s 的统计时间上读数;该标准与 IEC 60386、DIN 45507 等旧标准在技术要求上等价。 这并不意味着数字仪表只能照搬老式模拟表头。数字实现完全可以采用工程上等效、甚至更稳健的统计显示方式。问题的关键在于:滤波器家族必须对,中心频率映射必须对,显示统计必须标清楚,不能把不同标准的要素交叉借用却仍然宣称“符合标准”。
三、wfgui 的实际实现是什么:单 RMS 主读数 + 工程 peak 表头 + 若干带通滤波器 wfgui 的 UI 只有一个滤波器下拉框,选项为 Unweighted / DIN / Wow / Flutter,默认选中 DIN;并没有 JIS、NAB、CCIR、IEC 这样的标准选择器。 图1:wfgui 主界面与 RMS / Peak 显示结构
更关键的是,wfgui 的主数值框始终叫 RMS (%),而实际代码也确实始终按 RMS 方式计算:无论下拉框当前选的是 DIN、Wow、Flutter 还是 Unweighted,最终都在 ProcessHeader() 中把滤波后的误差量累加到 sum_of_squares,并输出 RMS 百分比。 因此,wfgui 并没有实现“JIS = RMS、NAB = mean、IEC/DIN = peak”这一套标准统计分工。它实现的其实是:一个固定的 RMS 主读数、一个独立的 peak 指针/10 秒最大值链路,再配一个“具体哪一段频率做带通/加权”的下拉菜单。
四、wfgui 的第一个核心问题:WOW 与 UNWTD 只实现了 0.3 Hz 家族 公开硬件手册给出的标准边界非常一致:JIS / NAB:WOW = 0.5–6 Hz,UNWTD = 0.5–200 Hz;DIN / IEC / CCIR:WOW = 0.3–6 Hz,UNWTD = 0.3–200 Hz。 而 wfgui 的 filters.c 中,process_wow() 的注释直接写明是 BpBe4/0.3–6,process_unweighted() 直接写明是 BpBe4/0.3–200。也就是说,wfgui 的 WOW / UNWTD 低频边界天然属于 DIN/IEC 风格。 图2:wfgui 中 UNWTD 的 0.3–200 Hz 实现代码片段
图3:wfgui 中 WOW 的 0.3–6 Hz 实现代码片段
错不在它实现了 0.3 Hz 家族,而在于它没有再提供 JIS/NAB 那一族 0.5 Hz 低端边界的版本,却很容易被用户当作“任何标准下的 wow / unweighted”。如果拿这套滤波器去解释 3 kHz 口径下的 JIS RMS 或 NAB mean,结果就会偏高——因为它让 0.3–0.5 Hz 这一段本应被进一步抑制的慢速摆动,提前进入了统计。
五、wfgui 的第二个核心问题:3000 Hz 模式并没有重算 3000 Hz 的滤波器系数 wfgui 的 ProcessHeader() 只是根据单选框把 center_freq 设为 3000 或 3150,然后修改 proper_interval 用于频偏计算;但随后调用的仍然是同一套 process_DIN() / process_wow() / process_flutter() / process_unweighted(),并不存在独立的 3000 版与 3150 版系数函数。 同时,filters.c 里多个滤波器注释都明确写着 Sampling rate is 6300 Hz,例如前端判频链使用的 process_2nd_order() 就写着采样率 6300 Hz,对应 3150 Hz 载频的半周期节拍。 这说明 wfgui 的实现思路不是“为 3000 Hz 和 3150 Hz 各自设计一套离散滤波器”,而更像是“先按 3150 Hz 那一套离散系统写死,再在前端把理想半周期改成 3000 或 3150”。wfgui 的 3000 / 3150 同名曲线平均偏差仍达到 0.175–0.871 dB,最大偏差可到 2 dB 左右;而 NewTuner 相应曲线几乎完全重合,说明其 3000 / 3150 两套系数是独立重算而非简单共用。 图4:wfgui 八条滤波器曲线与 NewTuner滤波器曲线叠加图
表1:3000 / 3150 曲线重合度摘要 由表1可见,wfgui 在同名曲线的 3000 / 3150 重合度上存在明显偏差;而 NewTuner 各曲线几乎完全重合,其基准频率分支是独立重算的。
六、wfgui 的第三个核心问题:界面把 WTD 写成 DIN,概念层面就错位了 公开硬件手册普遍把前面板逻辑分成两层:一层是 weighted / unweighted / wow / flutter 这样的滤波器模式;另一层是 JIS / NAB / IEC(DIN/CCIR) 这样的检测标准。 wfgui 的下拉框却把“DIN”直接放进了与 Unweighted、Wow、Flutter 并列的位置,并且主读数仍然是 RMS。这样一来,用户极容易把“DIN”理解成“我当前在做 DIN 标准测量”,但实际上它只是在一个单 RMS 软件里选择了“加权综合曲线”这一路。 更准确、也更不容易误导的写法,应该是把这个项目写成 WTD,而把 JIS / NAB / DIN / CCIR 放到独立的检测标准层。 图5:wfgui 界面将 WTD 加权曲线标记为“DIN”
七、wfgui 的第四个核心问题:它的 WTD 曲线与公开标准点表拟合明显失真 以 IEC / DIN 公布的 WTD 点表为参照,对 wfgui 与 NewTuner 的 WTD 曲线分别按 3000 Hz、3150 Hz 两档口径复算,可得到一组非常清楚的误差指标:wfgui 在 3000 Hz 档的平均绝对误差为 3.793 dB、最大绝对误差为 23.518 dB;在 3150 Hz 档的平均绝对误差为 3.820 dB、最大绝对误差为 22.360 dB。相对地,NewTuner 在 3000 Hz 档的平均绝对误差为 0.244 dB、最大绝对误差为 0.880 dB;在 3150 Hz 档的平均绝对误差为 0.228 dB、最大绝对误差为 0.878 dB。 图6:wfgui / NewTuner 与 WTD 标准曲线的对比图
图7:公开手册中的 WTD 标准点位图(引用)
表2:WTD 曲线相对标准点表的误差汇总(3000 / 3150 Hz) 从新版图和计算结果可以看出,wfgui 的 WTD 曲线不是“整体平移一点”的小误差,而是曲线形状本身就发生了偏离:在约 6–20 Hz 区间衰减偏小,读数偏热;到 20–30 Hz 以上又下滑过快,在 40、63、100、200 Hz 一带明显低于公开点表。NewTuner 则在 3000 / 3150 两档都能稳定贴合标准点位,同时与实机点的整体趋势也更一致。 这意味着 wfgui 的 WTD 结果不宜被直接当作 IEC / DIN 标准值引用;它更适合作为一种工程近似读数。对于以低频慢摆或中高频 flutter 为主的样机,这种曲线形状失真会直接改变读数的偏向。
八、wfgui 的第五个核心问题:它的 peak 链路是经验型工程表头,NewTuner所有的参数、设计、校准、都有据可依。 wfgui 的 peak 链路在代码里写得很直白:v = fabs(err) * 10000 / 85; // emperical calibration。也就是说,它先把滤波后的误差信号取绝对值,再乘以一个经验比例常数,把数值“推”到大致可读的刻度范围内;随后再叠加一组经验性的 attack / release 平滑常数,最后把结果放进 10 秒最大值历史里显示。
这种做法并不意味着它“完全不能用”。事实上,很多早期桌面测量软件都是类似思路:先把滤波后的误差信号用一个经验增益折算成百分比,再加一个看起来比较顺眼的表头缓动,让用户有一个“近似实体表头”的视觉反馈。问题在于,一旦把这种链路与实体机器相比,尤其是对指针动态较为敏感的PEAK、MEAN档位,它的局限就会立即暴露出来:“数值看上去差不多,但指针摆幅、轨迹形状与实体抖晃仪大相径庭”。
首先,它的动态特性没有明确的规范归属:标准语境下讨论的 weighted peak,并不是“把某一路滤波后的瞬时值做个平滑”这么简单,而是包含了滤波器家族、检波方式、时间权重、记忆方式和显示口径在内的一整套测量语义。wfgui 的 peak 链路虽然有“峰值指针”的观感,但它的 attack / release 常数属于经验设置,并没有给出与哪一种标准表头等价、与哪一种仪器时间常数对齐、与哪一种 sigma memory 结果可互换的依据。换句话说,它更像一个工程经验表头,而不是一个可以严格声明“本指示与某标准 peak 测量一致”的表头。
其次,它的数值刻度依赖经验标定常数,追溯性较弱:10000 / 85 这样的经验比例,能够把结果调整到“有那么点像”,但它并不能天然回答两个关键问题:第一,这个比例对应的是哪一类标准输入、哪一类校准条件、哪一类表头灵敏度;第二,当滤波器家族、测试基频、输入幅度或时间常数发生变化时,这个比例是否仍然成立。也就是说,wfgui 的 peak 读数在工程上可以“好用”,但如果要把它当作标准意义上的 peak indication 来引用,其可复验性和可追溯性就明显不足。
NewTuner它不是先做一个“差不多会动”的表头,再去调经验常数;而是先把传统抖晃仪的测量语义拆清楚:RMS、Peak、NAB 平均值是三条不同的检测链,时间常数、检波器形式和刻度依据也应该分别建立。
1)RMS 检测器常数:按 LFM-39A / JIS 动态要求设置,而不是主观平滑 NewTuner 的 RMS 检测器常数:它不是为了“让数值更稳”随手加的平滑,而是按 JIS / effective value 这一条检测链来建模。LFM-39A 说明书第 3 页给出的 JIS dynamic characteristics 是:在满量程条件下,施加适当输入后达到 95% 读数所需时间为 3.5 s ± 1 s;这等于给了 RMS 检测器一个非常明确的动态目标。Newtuner的 RMS 支路不是“数字滤波后再做一个随意长窗”,而是按传统仪器的有效值检测响应去复刻。
2)Peak 检测器常数:按 quasi-peak / weighted-peak 的脉冲权重语义设置 NewTuner 的 Peak 检测器常数是按照是以 CCIR / IEC / DIN 的 quasi-peak / weighted-peak 的充放电行为目标去校准的。peak 检测并不是简单取最大值,而是对脉冲持续时间赋权;Adapted from Tuning Fork magazine, by Pioneer Electronics (No4, 1980)中一个关键描述是,持续时间为 0.1 个完整周期的方波脉冲按 100% 权重计,到下一脉冲开始时衰减到约 40%。这实际上就是一个明确的“充电—释放”目标,而不是任意设 attack / release。NewTuner 的 Peak 表头并非沿用 wfgui 那种经验比例 + 经验释放,而是以权威资料中对 quasi-peak / weighted-peak 的脉冲加权行为为约束,反推检测器的充电与释放常数,再通过实体仪器指针观感和标准输入做最终校准。这样一来,Peak 指针就不再只是一个“好看的动画”,而是有标准语义支撑的表头复现。
3)NAB 检测器常数:按 mean indication / average measurement law 建立 NewTuner 的 NAB 检测器不是对 JIS RMS 结果再做换算,而是依据 FL-180A 对 Mean indication 的定义,以及 NAB 公开资料所体现的 average measurement law 单独建立,其时间常数和读数刻度都服从平均值检测链,而不与 RMS 或 Peak 混用。NAB的原文描述很清楚:“At low frequencies where the meter pointer follows the wave form, the maximum deflection shall indicate the rms value.” NewTuner 的 MEAN(NAB)不是“数字平均数显示”,而是“FL-180A / NAB 语义下的全波整流平均值检测器 + 正弦 RMS 标尺校准 + 机械表头动态呈现”。
因此,wfgui 与 NewTuner 最本质的区别,不只是“一个峰值高一点、一个低一点”,而是二者对表头和检测器的理解根本不同。
wfgui 的 peak 更接近一个工程经验表头:它能用,但动态与刻度的标准归属并不够清晰;而 NewTuner 的 RMS、Peak、NAB 三条链路,则分别按 JIS 的 effective value 动态、CCIR / IEC / DIN 的 weighted-peak / quasi-peak 语义、NAB 的 mean / average law 去建立,并且再与实体仪器的校准逻辑和表头行为对齐。这样做的结果是:NewTuner 不是单纯把传统公式搬进手机里,而是在数字域里尽量复刻传统模拟抖晃仪“检测器怎么工作、表头怎么动、读数为什么这样显示”的完整行为链。这也是本项目最值得强调的实现亮点之一。
九、对 wfgui 影响最实际的几个后果 把上面的代码和曲线问题落到实际使用场景,大致会出现以下后果:把 wfgui 结果直接写成“JIS 值”或“NAB 值”风险很高;对慢 wow 明显的设备,wfgui 容易读高;对 flutter 较多或高频抖晃成分较多的设备,wfgui 的 WTD 与 FLUTTER 又可能读低;3000 Hz 与 3150 Hz 横向比较会带入额外系统误差;界面标签会诱导用户误读结果含义;peak 结果的可追溯性也不足等等问题。
十、结论 wfgui 更适合被理解为一个基于 DIN / IEC 滤波器家族的抖晃参数工程近似分析软件。它在学习、观察和快速对比上有价值,但不宜直接当作 JIS / NAB / DIN / CCIR 四标准等价实现来引用。 其主要不足不在于采用数字实现,而在于把不同标准里的滤波器边界、中心载频和显示统计混在了一起:主读数固定为 RMS,WOW / UNWTD 只实现了 0.3 Hz 家族,3000 Hz 模式未重算独立系数,UI 又把 WTD 写成 DIN,容易误导用户对结果口径的理解;其纯数字指标检测器按照纯数字的方式也与传统实体抖晃仪产生一定的差距。同时,WTD 曲线相对标准点表存在明显形状失真也与手册标准WTD曲线、 NewTuner 拉开差距。 相比之下,NewTuner 的实现思路是把标准滤波器家族、中心载频和统计显示分层处理,并尽量按传统模拟抖晃仪的电路级行为来重建测量链路,再以现代数字仪表的形式输出结果。它的指标时间常数经过实体仪器对照、扫频拟合与多轮实测校准,同时还加入 FFT 频域抖晃观察,既保留了实体仪器的体验,又提供了数字系统在稳定显示和频域诊断上的优势。对于今天的工程环境,这种实现方式显然比简单沿用一套历史工程近似滤波器更完整,也更容易获得可解释、可复验的结果。
十一、后语 本人当初也一直使用wfgui这款产品进行卡座标调及维修,从未质疑过其背后逻辑实现的准确性。但这个软件是桌面端app,很多维修人员及卡座爱好者需要用电脑、音频对录线进行测量,颇有不便,因此今年年初开始进行安卓移动端移植适配计划,主要是逻辑语法翻译和UI设计,起初我也认为该app为众多网友朋友使用,没有人对其准确度提出质疑,该软件的地位堪称卡座界的“金标准”。但我的app发布到网上不久,就有专业人士抖音 @模拟音频工坊 手持校准后的抖晃仪提出了异议,于是乎就与他开展了长达数周的阅读资料、源码理解、曲线拟合仿真、滤波器及检测器的架构及重构,扫频测试等,为此付出了大量的时间心血。
因此从1.4.0开始,做了架构级重构的NewTuner抖晃仪模块不再免费提供,如需要准确测量的朋友可以付费VIP,也算对作者的一种支持吧,谢谢大家。
下载地址:https://pan.baidu.com/s/1-zZZ9kFJLonQqTSGHPRdKQ?pwd=xb3y提取码:xb3y
另外,IOS版本也在全力开发中…… 图8:IOS版本正在适配中…… 图9:新版本功能界面UI
使用说明: 卡座直接1个声道至功放喇叭,避免方位角相位引起的波形失真。 请将测试信号调至合理音量,不要过小、不要过载,音量电平条在2/3以上满格以下为最佳。 测试时尽量寻找安静环境,房间尽量不要有回声混响,不要移动手机设备,环境杂音、混响、麦克风周围的气流变化会导致结果精度下降甚至无法出正常数据。 如果要求高精度要求,请购买外置独立声卡,打开手机OTG模式接至手机后,软件会自动走外置声卡采集模式,以获得高精度检测结果。 参考资料 1、IEC Webstore, IEC 60386:1972 — Method of measurement of speed fluctuations in sound recording and reproducing equipment(公开摘要页)。 2、AES 6-2008 (R2012) — Method for measurement of weighted peak flutter of analogue sound recording and reproducing equipment(公开摘要页)。 3、Kenwood FL-180A Instruction Manual(公开镜像文本),关键条款:JIS=RMS,NAB=Mean,CCIR/DIN=Peak;WOW 0.5–6 Hz vs 0.3–6 Hz;UNWTD 0.5–200 Hz vs 0.3–200 Hz。 4、Meguro MK-669C Wow Flutter Meter 公共产品页,关键条款:RMS/NAB 用 3 kHz,IEC(DIN/CCIR) 用 3.15 kHz;weighted/unweighted/wow/flutter 可分别测定;IEC 家族有 sigma memory。 5、IEC(JJF 1683-2017) WTD 标准点表图。
|