
nyanpasu64 的博客跨性别者的权利就是人权。修复 2.58 美元 HDMI 转 VGA 适配器的模拟音频问题作者为 nyanpasu64日期是 2026 年 7 月 4 日。最近其买了一个超便宜的 HDMI 转 VGA DAC想把任天堂 Switch 连接到 CRT 显示器和外接音箱上可惜它的音频输出接口在音频混音器以及电脑的麦克风接口上都产生了严重的噪音问题。其花了好几天时间来诊断阻抗问题为 delta - sigma 音频 DAC 设计滤波方案还对 PCB 元件进行了重新改造力求用现有的硬件实现最佳音质。前传修复旧 HDMI DAC在购买这个音频 DAC 之前最初的视频连接方案是把 Switch 底座插入 ICY - Box HDMI 转 VGA DAC。在改造 I2C 线路时不小心损坏了电路板上的几根走线还弄丢了一些元件只好通过在 GIMP 里追踪 I2C 线路来了解其功能进而重新修复它们。这款 DAC 的 HDMI 输入是一个 I2C 从设备/外设SDA/SCL 线路有高阻抗上拉电阻连接到 5V之前忽略了这一点同时还有低阻抗电阻连接到芯片把总线拉到地。这让其有机会用磁线和 3 秒焊锡掩膜练习微焊接技术为之后安装 Switch 破解芯片做准备。36 号线规的磁线很有用它的瓷漆绝缘层比 Kynar 更不容易熔化而且线的粗细适中既不容易折断又能避免轻易扯掉焊盘。焊锡掩膜可以覆盖不想焊接的裸露焊盘还在处理附近线路时用它固定“完成”的焊点和电线不过它对 PCB 的附着力不太好。也许需要更彻底地清洁和打磨表面或者试试 YCS 的 3 秒焊锡掩膜而不是 Relife 的产品。在照片里追踪 PCB 线路时好几次因为在正反两面切换查看时看错了 PCB 的方向而搞砸。下次可能会用 KiCad 的参考照片功能来对 PCB 进行符号化建模而不是用 GIMP 的铅笔工具手动追踪线路。将 Switch 连接到音频混音器出人意料的是整个设置过程中最困难的部分是把游戏机连接到外接音箱。ICY - Box DAC 没有音频输出ITE IT6892FN 芯片不输出模拟音频而 Switch 的耳机插孔会给音频混音器和音箱带来恼人的干扰。经过几个小时的故障排查不断插拔和更换各种电缆与元件最终得出结论当 Switch 连接到接地环路且不处于睡眠模式时其音频电路会拾取 60Hz 的嗡嗡声并将其放大到输出中。在网上寻求建议得到了一大堆不同可行性的方案接地环路隔离器利用变压器在具有独立接地的电路段之间传递电压偏移但小型的接地环路隔离器往往会衰减低音和其他低频信号而大型的又很昂贵将音频设备转换为平衡差分音频可以避免接地环路问题专业音频混音控制台就是采用这种方法然而相关设备价格似乎很贵而且 DI 盒通常会将电压降低到麦克风电平另一个选择是 HDMI 音频提取器但 chaos 试过的每一个来自速卖通的 HDMI 转 3.5mm 或 TOSLINK 提取器质量都很差而发烧友级别的产品又很贵负反馈音频光隔离器有两个接收器LED 驱动使得两个接收器的电压与输入电压匹配但 1BitSquared Discord 服务器劝阻使用它们研究过将接地和两个音频信号作为差分放大器的输入进行处理但放弃了这个想法因为不知道如何让它在输入超出放大器电源轨的情况下工作而且它的共模噪声抑制能力可能较差。找到的最简单的解决办法是把 Switch 的音量旋钮调到最大关闭耳机音量限制器这样游戏音频就会比接地环路的嗡嗡声更响亮然后再在混音器里调低音量。但每次把游戏机放进或拿出底座时都得插拔耳机插孔而且还担心这会对游戏机的音频放大器造成长期损坏。也测试了苹果的 USB - C 音频转接头但没有得到音频输出。还发现把一个“朋友的”Switch 2 连接到混音器时也出现了同样的音频嗡嗡声当时以为是第三方 HDMI 转接头的问题。顺便说一句任天堂起诉 Switch 模拟器开发者后再也不会买他们的新游戏机了。他们滥用公司的法律预算以个人破产威胁独立开发者进行受法律保护的活动以此来充实公司的金库还继续对 GitHub 上的分支发出下架通知。HDMI 转 VGA 音频提取器/crt/ Discord 服务器推荐了一款速卖通的 VGA 转接头带有 3.5mm 音频输出售价 2.58 美元外加运费。价格会随时间略有波动目前不包括临时的 7 月 4 日促销价为 2.71 美元。一周后转接头到货把 VGA 输出插到视频切换器上将 HDMI 输入连接到 Switch 的视频输出把音频输出接到音频混音器结果听到了从 Switch 上听过的最糟糕的噼啪声。很困惑于是把它连接到电脑上通过主板的麦克风插孔录制音频。发现当把瑞昱音频的麦克风增益关闭时噪音几乎听不见但当把它调到 30 dB 时噪音就会盖过正常声音。这时怀疑音频转接头要么是在输出超声波谐波要么是当改变麦克风增益导致麦克风插孔的输入阻抗变化时其放大器发生了失真。当按下 Switch 控制器的主页按钮音频逐渐消失时随着音量衰减到静音会出现一个下降的噪声扫描。为了验证阻抗理论用示波器测量了主板音频输入和地之间的电阻。恼人的是输入引脚有超过 2 伏的恒定直流偏移短路到地时这个偏移会消失但移除短路后不久又会重新出现。这使得无法正确测量阻抗。但没有气馁还是从两个方向测量了电阻发现一个方向显示开路另一个方向显示 300 欧姆。重要的是这个测量结果不会因切换麦克风增益水平而改变。这时得用示波器检查信号问题了。用示波器探测音频把音频输出插到一个分线电缆上用示波器探测暴露的导线。结果发现音频上覆盖着惊人的 500 - 600 mV 噪声谐波频率高达 50 MHz。sigma - delta DAC 的原始输出峰峰值振幅超过 600 mV周期约为 80 ns但充满了周期低至 20 ns 的子振荡。这里无法分辨出原始比特。这是捕捉到的几乎无声的音乐渐弱过程但仍能看到 500 mV 的噪声以及 sigma - delta 比特流不同区域之间的不稳定过渡。这样就确认了音频问题确实是 MHz 范围内的超声波 DAC 开关噪声被非线性放大器调制为可听的失真。这时打开转接头看看里面是什么芯片。一张照片显示芯片是 NX3303X找不到任何数据手册但一个中文网站有该芯片的框图和引脚图。在网上搜索使用这款芯片的其他用户发现了 c0pperdragon 的 HDMI2SCART 项目。这块 PCB 上的芯片大多是从像这样的速卖通 DAC 上拆下来的而且它直接把音频输出连接到音箱。后来得知他也遇到了和一样的音频问题不得不在芯片输出和地之间添加电容。浏览该项目的问题跟踪器时看到了问题“哪里可以买到 NX3303X”。这个帖子显示MX9291 是另一种带有集成音频输出的 HDMI 转 VGA DAC 芯片。在网上搜索 NX3303X 时还找到了 MX9291 的手册说这款芯片可以替代 NX3303X并且有一个 sigma - delta DAC这表明 NX3303X 可能也有。不过 MX9292 的引脚图与手上的芯片不同所以没有进一步研究它。构建低通滤波器为了修复音频播放问题得设计一个低通滤波器来消除开关噪声。设计信号滤波器时通常建议绘制波特图来展示滤波器的频率响应。找到了一个波特图生成器它通过在频率扫描中评估滤波器的复传递函数来绘制精确的曲线。为了模拟一个截止频率为 50 kHz 的一阶 LPF从频率 10 MHz 到 10 kHz 绘制了 1/(1 s/50000) 的曲线。然后可以检查在 20 kHz 处损失了多少高音以及在 5 - 10 MHz 处抑制了多少开关噪声。确定了 50 KHz 的截止频率后开始寻找合适的电阻和电容值来实现这个截止频率。要找到 RC 滤波器的截止频率可以使用公式 f 1 / (2π RC)。把数值代入 qalc 计算得出可以串联一个 31 欧姆的电阻然后接一个 100 nF 的 MLCC 到地。不过这里有个问题X7R 陶瓷电容会把振动转化为信号但玩游戏时大家对音质也没那么高要求而且还得考虑时钟抖动的问题。把发现报告到了 HDMI2SCART 项目仓库的一个问题中。作者很快回复说他需要添加滤波电容来阻挡 DAC 噪声。有趣的是他发现不使用滤波电阻时10 nF 甚至 1 nF 的电容就足以阻挡开关噪声。旁注音频时钟抖动用示波器探测滤波后的波形时注意到波形周期有明显的抖动。这意味着 DAC 的音频输出存在明显的采样时钟抖动相对于“真实”的采样率采样时间会前后偏移。这本该是一个稳定的锯齿波但不同部分的播放速度不同。位移带似乎从右向左移动。出现抖动可能有几种原因它会把每个消隐期的音频样本拉伸到下一行扫描中即使样本数量不固定DAC 使用了不稳定的振荡器或 PLL 来控制采样输出的时间DAC 会根据从 HDMI 接收到但尚未播放的样本数量不断调整音频播放速率这可以解释偶尔听到的音频间隙。据了解要减少抖动最好是重新生成一个稳定的音频时钟并使其与通过 TMDS 消隐期到达的音频大致同步。不过怀疑其中很多都是噱头。无论如何抖动对于测试音调或游戏音频并没有产生任何可听的问题整体音频输出对于游戏来说“足够好”不过它也存在音量低和偶尔出现音频间隙的问题。毕竟3 美元的 HDMI DAC 也就这样了。确定开关频率出于好奇想了解一下滤波后音频信号的特性。先从确定开关噪声的频率入手这样能更好地了解 delta - sigma DAC并选择最佳的滤波器截止频率。让 DAC 播放静音测量了 RC 滤波器前后的信号。芯片输出符号 10产生一个周期为 76.8 ns、振幅为 175 mV 的方波。滤波器把振荡衰减为一个安静的类似三角形的波。安装滤波器后实际上可以看到 sigma - delta DAC 输出的单个比特。输入静音信号时会输出一串 10 和 1100 符号。通过测量 delta - sigma 信号中每个高或低脉冲的周期估计每个符号长 37 ns。10 符号产生的方波频率约为 13.5 MHz根据示波器频率约为 13.02 MHz。记得启动时DAC 会输出一串 1100 符号产生一个更长的周期 151 ns。1100 符号产生的方波频率约为 6.76 MHz根据示波器频率约为 6.62 MHz。有趣的是这些频率比之前注意到的 50 MHz 低很多。也许快速边缘是信号反射现在被 RC 滤波器隐藏了。如果向 DAC 发送非静音音频它会输出不均匀的符号混合。这会产生一个具有中间频谱能量分布的非周期性信号。根据这些数据必须在 5 - 10 MHz 处实现最大衰减同时在 20 KHz 处保留可听的高音。在探测电路时还记录了 DAC 输出和滤波后音频信号的电压/振幅。音频 DAC 的输出中心电压为 1.675 V这意味着它在 3.35 V 的电源轨上输出 50% 的占空比。播放最大音量的音频信号时电压摆动限制在接近地或 3.35 V 的 50% 左右。这与在网上读到的关于 delta - sigma DAC 在失真变得过大之前实际调制深度为 50% 的说法一致。这意味着 DAC 相对于静音状态只能输出最高 ±0.8375 伏的信号。对于响亮的音频源来说这个范围足够了但任天堂 Switch 的授权游戏音频往往比较安静可能需要调高音箱或混音器的音量来补偿或者使用 MasterVolume 自制软件来提高 Switch 游戏的音量。可惜的是MasterVolume 不能在开机时运行每次在 emuMMC 和 sysMMC 之间重启游戏机时都得重新设置音频音量。正如预期的那样输出中的开关噪声消失了但令人惊讶的是在滤波电阻之前它就已经被大幅衰减了。探测 DAC 芯片进入滤波器的输出时开关噪声被降低到了 175 mV难道是滤波器干扰了 DAC内部电阻决定进一步探究这个音频异常现象用 Audacity 生成方波和锯齿波输入到 DAC 中。开始注意到一些意外的阶跃响应。向 DAC 输入一个方波但得到的是电平之间的曲线过渡。这意味着波形被低通滤波了。向 DAC 输入一个上升的锯齿波得到的是曲线下降而不是阶跃。了解到 HDMI 设备通常更喜欢 48 kHz设备的 EDID 声称支持 32、44.1 和 48 kHz但为了简单起见使用了 48 kHz。怀疑 DAC 无法提供足够的电流来驱动全尺寸波形通过滤波器。尝试在 Audacity 中将增益降低到 -16 dB但仍然看到同样的低通滤波后的锯齿波波谷被削平。这表明问题不是削波而是一个线性时不变低通滤波器其效果比预期的要强得多。这时仍然认为游戏声音听起来正常问题肯定出在合成测试用例或 Windows 音频处理效果上。于是把 Switch 启动到 L4T Ubuntu 24.04 系统在实际的游戏机硬件上测试 DAC但捕获的方波和锯齿波结果还是一样错误。作为最后一个测试在笔记本电脑和 HDMI DAC 上都播放了《塞尔达传说风之杖》中 Molgera 主题音乐并将两者都输入到音频混音器中。结果发现Switch 音频输出中的打击乐完全无法辨认与参考音频相比几乎被闷得听不见了。意识到设计的低通滤波器有问题。DAC 能提供的电流非常有限以至于滤波电容的充电速率被 DAC 的内部电阻而不是滤波电阻所限制通过电压和电流计算内部电阻惊讶地发现芯片的输出引脚会朝着预期的平滑电压呈指数曲线变化这表明存在欧姆内部电阻。之前一直以为只要芯片驱动的电流小于最大电流它就能将 DAC 输出强制到标称电压之后会在电阻上保持特定的 ΔV 以提供最大电流。既然可以将芯片建模为一个电阻尝试用两种方法测量内部电阻。电压分压器法滤波电阻之前的电压实际上是芯片理想“电压源”和相对固定的滤波电容电压之间的电压分压器的中点。这个电压分压器由芯片的“内部电阻”和外部滤波电阻组成。通过测量芯片输出电压的摆动幅度相对于理想 DAC 的电压摆动幅度可以将外部滤波电阻与总电阻包括内部电阻进行比较。看到一个标称 3.3V 电源实际电压 3.35V的 PWM 输出有 175 mV 的摆动中点电压为 1.675 V。将电压分压器公式输入 qalc 计算得出内部电阻约为 598.7142857 Ω。RC 滤波器时间常数法在 B550M DS3H 主板音频接口上以 192 kHz 的采样率捕获了有问题的音频输出。以 192 kHz 采样率录制的 HDMI DAC 播放方波的情况显示滤波后的方波从一个极端移动到 0 伏需要 8 个采样因此 LPF 的半衰期约为 41.667 μs。可以用一些复杂的代数运算将半衰期转换为时间常数时间常数约为 60.11 μs。可以将时间常数转换为截止频率约为 2.647 kHz。事后看来玩了几个小时游戏怎么都没注意到 2.6 kHz 的低通滤波器呢确实注意到《喷射战士 3》在 Switch 音箱上的声音比在 DAC 上更清脆但以为是 Switch 音箱音质单薄的问题而不是音频接口有问题。现在知道电容为 100 nF将时间常数转换为内部电阻得出内部电阻约为 570.1229337 Ω。哎呀真是不容易。用两种不同的方法计算了音频 DAC 芯片的内部电阻结果相差在 5% 以内。而且内部电阻远远大于为 RC 滤波器设定的电阻。把发现报告到了问题报告线程中。利用内部电阻进行滤波发现芯片有很大的内部电阻。为滤波器添加额外的电阻会进一步降低它驱动音频负载的能力。所知道的设计低通滤波器的最佳方法是将 R 设为内部电阻然后选择一个能产生所需截止频率的 C 值。这也解释了为什么 PCB 在接地电容之前没有串联电阻PCB 设计师利用内部电阻进行滤波然后制造商为了降低成本而省略了安装滤波电容低通滤波器的理想 C 值是多少呢可以计算如何实现 50 kHz 的截止频率得出约为 5.395082817 nF。看起来 5.1 nF 是个不错的选择。电容值越大滤波效果越好截止频率越低。PCB 上已经有一个未安装元件的滤波电容焊盘用于连接 DAC 输出和地。焊盘尺寸是 0402可以勉强安装一个 0603 的电容但会很拥挤焊接也更困难而 0402 的元件更小更难操作。还没在未改动的电路板上尝试安装过这两种电容不知道哪种更容易操作。已经对 PCB 进行了大量改造安装了滤波电阻。由于手头没有 5 nF 的电容用两个 10 nF 的电容串联来凑合。当电容串联时它们的泄漏电流可能不同会导致中间的电压漂移。在这种情况下漂移不应超过 DAC 的 1.675 V 直流偏移实际中不会造成问题。需要注意的是廉价的 X7R 陶瓷电容具有微音效应和压电效应会将环境振动转化为电压变化产生可听噪声。C0G 电容是非压电的更适合音频电路但体积大大容量的生产成本高。幸运的是需要的 5 nF 电容值较小LCSC 有售价极低的 0402 C0G 陶瓷电容。隔直电容呢还注意到每当把音频电缆插入其他设备或拔出时DAC 都会产生“噗”的一声。这是因为制造商为了降低成本用 0 欧姆跳线代替了隔直电容选择依靠接收音频的设备的隔直电容。觉得添加隔直电容不是件容易的事。假设负载为 10 千欧要在 20 Hz 下较好地通过低音大约需要 1 μF 的电容。这么大的电容值很难找到 C0G 类型的。常见的 X7R MLCC 电容具有压电效应受到撞击时电压会发生变化可能会给音频带来干扰。电解电容是一个选择但不适合安装在为 0402 陶瓷电容设计的焊盘上。此外如果你没有在隔直电容“外部”安装一个高值电阻接地音频源和接收器的隔直电容之间的电压可能会因为电容泄漏而再次漂移。曾读到这可能会导致音频失真半小时后才会显现出来但找不到读到这个内容的网站了。要解决这个问题需要在电容输出和地之间添加额外的电阻这需要对 PCB 进行改造因为设计师没有预留焊盘。总之为了这个最终效果要做很多改造工作而且可能还不如之前不安装隔直电容。交换立体声通道又玩了一会儿《喷射战士 3》开始注意到一些声音位置不合理的情况开始怀疑音频 DAC 交换了音频通道通过把训练敌人放在左边让它开枪然后听到枪声从右边传来证实了这个想法。为了纠正音频位置得在耳机插孔的引脚之间交换模拟音频通道。如果是设计 PCB会交换连接电路板正反面音频信号的过孔。但由于只能在现有的电路板布局上操作决定在音频线平行穿过电路板时将它们交叉。用一个从速卖通买的便宜数码显微镜观察