榨干旧声卡:如何用双平衡混频器手制作一台简易射频频谱仪
在音频圈和电子DIY圈子里,很多玩家手里都攒着几块淘汰的旧声卡。这些声卡虽然录歌可能有点过时,但它们的ADC(模数转换器)性能依然能打,尤其是那些支持24-bit/96kHz甚至192kHz采样的声卡,底噪极低,动态范围惊人。
如果我们把声卡当成一个超高精度的数字化后端,再在前端加上一个便宜的双平衡混频器(Double-Balanced Mixer)和一个可调的本地振荡器(LO),就能把高频的无线电信号“翻译”成声卡能听懂的音频信号。这样,一台低成本的、能看短波甚至更高频段的简易射频频谱分析仪(其实也是个简易的SDR接收机前端)就诞生了。
今天就聊聊怎么用几十块钱的成本,用手头的声卡和混频器把这个方案落地。
核心原理:把射频“翻译”成音频
声卡只能处理 20Hz 到 20kHz(或者最高 96kHz)的音频信号。如果我们想观察几兆赫兹(MHz)甚至更高的射频信号,直接输入声卡肯定是不行的,声卡的输入端会直接把它滤掉,或者产生严重的混叠。
这时候就需要混频器出场了。
混频器有三个端口:
- RF(射频输入):我们要测量的未知高频信号。
- LO(本振输入):我们自己提供的一个已知频率的高频信号。
- IF(中频输出):输出信号,它的频率是 $f_{IF} = |f_{RF} - f_{LO}|$。
如果我们想观察 $7.0MHz$ 附近的无线电频谱,我们可以让本地振荡器(LO)输出一个 $7.0MHz$ 的正弦波。
当 $7.01MHz$ 的射频信号进入混频器时,混频器输出的差频就是 $7.01MHz - 7.00MHz = 10kHz$。
这个 $10kHz$ 的信号正好落在声卡轻松处理的音频频段内!只要我们在电脑上用软件对声卡输入的音频进行快速傅里叶变换(FFT),就能在屏幕上看到高精度的频谱图。
准备你的“破烂”清单
这个项目最大的乐趣就在于便宜和压榨旧设备的剩余价值:
- 双平衡混频器:推荐经典的 ADE-1 或者 SBL-1。淘宝上带PCB板的模块只要十几块钱。双平衡混频器的好处是端口隔离度好,本振信号不容易泄露到声卡里。
- 信号源(LO本振):我们需要一个能产生稳定高频信号的模块。最便宜、最好玩的是 Si5351A 模块(只要几块钱),配合一块 Arduino Nano 就可以通过 I2C 接口自由控制输出 8kHz 到 160MHz 的任意频率。
- 声卡:任何带 Line-In(线性输入)的 USB 声卡。注意,尽量不要用麦克风输入(Mic-In),因为麦克风输入通常有很大的增益且是单声道,容易过载。最好是支持 96kHz 采样的专业声卡,这样你一次能看到的频谱宽度就是 96kHz。
- 阻抗匹配与保护电路:几颗电容和电阻(后面会说,用来保命/保声卡)。
硬件连接:千万别烧了声卡!
声卡的输入端非常脆弱,绝对不能引入直流电,也不能输入太高的电压。而混频器的 IF 输出端有时会带有直流分量,或者在我们调试本振时会产生较大的信号泄露。
请务必按照下面的拓扑进行连接:
[天线/射频信号源] ---> (RF 端口) [ ADE-1 混频器 ] (IF 端口) ---> [隔直与衰减电路] ---> [声卡 Line-In]
^
|
[ Arduino + Si5351 ] -----------> (LO 端口)
关键的“保命”保护电路:
在混频器的 IF 端口 与 声卡 Line-In 之间,必须串联一个隔直电容。
- 准备一个 10μF 的电解电容(注意极性,正极朝向混频器)并联一个 104 (0.1μF) 的独石电容,用来滤除可能存在的直流分量。
- 如果你测量的是比较强的射频信号,建议在电容后面加一个由两颗 1N4148 二极管反向并联组成的限幅器,将输入声卡的最高电压限制在 0.7V 左右,防止声卡 ADC 烧毁。
软件配置:让频谱动起来
硬件接好后,把声卡插上电脑,我们就可以用软件来观察频谱了。这里推荐几款免费且强大的音频分析/SDR软件:
方案 A:使用音频 FFT 软件(适合纯频谱观察)
- 软件推荐:Spectrum Lab 或 Arta。
- 设置方法:
- 打开软件,输入设备选择你的外置声卡。
- 采样率设置为声卡支持的最大值(如 96000Hz)。
- 将 FFT 窗函数设为 Hann 或 Blackman-Harris,FFT Size 设为 16384 或更高,这样可以获得极高的频率分辨率。
- 此时,你在电脑上看到的 $0 \sim 48kHz$ 频谱,实际上对应的就是 $f_{LO} \sim (f_{LO} + 48kHz)$ 的射频频谱。
方案 B:使用 SDR 软件(可以听、可以解调)
如果你想顺便听一下短波电台,可以使用 HDSDR。
- 在 HDSDR 的 Soundcard 设置中,将 RX Input(接收输入)指向你的声卡。
- 将本振模式(LO Mode)设为固定,手动输入你用 Arduino 给 Si5351 设置的那个频率。
- 此时,你就可以像操作几千块的 SDR 接收机一样,在电脑上拖动鼠标,解调、聆听短波单边带(SSB)或者 AM 广播了。
避坑指南与进阶玩法
- 镜像频率(Image Frequency)干扰:
因为我们使用的是单声道(实信号)输入,无法区分信号是来自 $f_{LO} + f_{IF}$ 还是 $f_{LO} - f_{IF}$。比如本振是 7.0MHz,无论是 7.01MHz 还是 6.99MHz 的信号,在声卡里看起来都是 10kHz。- 解决办法:如果追求完美,可以用两个混频器搭建一个 正交接收机(I/Q 混频),将输出的 I、Q 两路信号分别接声卡的左、右声道。这样在 HDSDR 软件里开启“I/Q mode”,镜像干扰就会被完美抵消,可观测的频谱宽度也会直接翻倍(比如 96kHz 变成 192kHz 宽)。
- 本振泄露:
Si5351 输出的是方波,含有丰富的奇次谐波。如果发现频谱上莫名其妙多了很多虚假信号(鸟鸣声),可以在 LO 输入端加一个简单的低通滤波器(LPF),或者降低 Si5351 的驱动电流(在代码里把 Drive Strength 设为 2mA)。 - 共地噪声:
电脑、Arduino、声卡如果都用同一个 USB HUB 供电,会引入巨大的地环路噪声。建议使用笔记本电脑电池供电,或者给 Arduino 采用独立的电池/线性电源供电,以获得最干净的底噪。
用这种方法做出来的频谱仪,虽然频率范围取决于你本振的范围(Si5351可以轻松做到 150MHz),但其**动态范围和分辨率带宽(RBW)**在音频声卡强大的 24-bit ADC 加持下,可以轻易干掉很多千元级的低端射频仪。这就是 DIY 的魅力所在——用看似风马牛不相及的废旧设备,拼凑出让人惊叹的硬核工具。