
1. 项目概述用树莓派搭建FM广播发射器的核心思路最近在开源硬件和无线电爱好者圈子里一个挺有意思的项目被反复提及用树莓派Raspberry Pi来搭建一个FM广播发射器。这个想法听起来有点“极客”但背后的逻辑其实非常清晰。树莓派本质上是一台微型电脑它拥有强大的计算能力和灵活的GPIO接口而FM广播发射的核心就是将音频信号调制到特定的高频载波上并发射出去。传统的FM发射器要么是集成芯片方案要么是分立元件搭建的电路调试起来比较麻烦。而用树莓派我们可以用软件定义无线电SDR的思路通过编程直接控制其GPIO引脚产生高频信号再配合一个简单的低通滤波器和天线就能实现一个数字可控、频率可调的FM发射器。这个项目能做什么最直接的就是让你拥有一个小范围的FM广播电台。你可以用它来播放音乐、播客甚至搭建一个家庭内部的背景音乐系统用任何一台带FM收音功能的设备手机、车载收音机、老式收音机都能接收。它解决的痛点在于“可控性”和“学习价值”。相比于买一个现成的FM发射模块自己从零搭建能让你深入理解FM调制、信号滤波、阻抗匹配等无线电基础知识。适合谁来玩首先是电子爱好者、树莓派玩家和无线电初学者想动手实践通信原理其次是一些创客想为项目增加无线音频传输功能当然用它来做一个不插电的“音乐分享器”在朋友聚会上用也挺酷的。整个项目的核心就是利用树莓派GPIO引脚在软件控制下产生方波通过PWM脉冲宽度调制或直接数字频率合成的方式模拟出频率调制的效果。但这里有个关键点树莓派GPIO直接输出的信号是数字方波谐波分量非常丰富如果直接接上天线会干扰非常宽的频段这是不合规也不道德的。因此一个设计良好的低通滤波器是项目的灵魂它负责滤除不需要的高次谐波只留下我们想要的纯净FM信号。接下来我会拆解整个从原理到实现的全过程包括我踩过的坑和最终稳定运行的方案。2. 核心原理与硬件选型解析2.1 FM调制原理与软件实现方案要理解怎么用树莓派发FM广播得先搞明白FM频率调制是怎么回事。简单来说我们要发射的音频信号比如一段音乐是低频信号无法直接传得很远。FM调制就是让一个高频正弦波称为载波比如100MHz的频率随着我们的音频信号的幅度变化而成比例地变化。音频信号强载波频率就稍微高点音频信号弱载波频率就稍微低点。接收端的收音机检测到这种频率变化再还原成声音。在树莓派上我们无法直接产生一个频率连续可变的正弦波。但有一个取巧的办法利用GPIO引脚输出方波并通过改变方波脉冲的频率来模拟频率调制。树莓派的GPIO引脚可以通过编程以极高的速度切换高低电平。如果我们写一个程序让引脚输出频率在中心频率如100.0 MHz附近微小波动的方波从频谱上看其主要能量就集中在那个频率附近实现了FM调制的效果。最常用的软件是rpitx这是一个强大的开源项目它正是利用了这个原理甚至能实现更复杂的调制方式。注意这里说的“方波”是工作原理上的简化描述。实际上rpitx使用了树莓派的PWM和时钟发生器的高级功能直接对底层硬件时钟进行调制精度和稳定性远非简单GPIO翻转可比。但对于理解原理我们可以先从“可控的方波发生器”这个模型入手。2.2 关键硬件组件与选型考量硬件清单非常简单核心就是树莓派本身再加上几个无源元件。但每个元件的选型都直接影响最终效果。树莓派型号推荐使用树莓派3B、3B、4B或更新型号。原因在于它们的CPU主频更高GPIO时钟系统更稳定能够更精确地产生高频信号。树莓派Zero也可以但性能稍弱在处理复杂音频或高采样率时可能会有压力。我实测树莓派4B效果最稳定。天线这是影响发射距离最关键的因素。你不能直接用一根导线需要简单的阻抗匹配。对于FM波段88-108 MHz一个1/4波长的天线是最简单的选择。在空气中1/4波长大约为75厘米计算公式波长λ 光速c / 频率f。取中心频率98MHzλ≈3.06米1/4λ≈0.765米。你可以用一根长约75厘米的导线或多股软线。更好的选择是使用专用的FM发射天线或者自己制作一个折合振子天线效果会好很多。低通滤波器LPF这是整个项目中最重要、最不能省略的部分GPIO引脚输出的信号含有大量奇次谐波。例如你发射100MHz的信号同时会产生300MHz、500MHz等谐波。这些谐波会干扰其他频段的正常通信比如航空波段、应急通信等后果可能很严重。一个简单的π型或T型低通滤波器设计截止频率在120MHz左右可以极大地抑制这些谐波。通常用1-2个电感和2-3个电容就能搭成。电阻与电容用于阻抗匹配和隔直在滤波器与天线之间通常需要一个小的电阻如47-100欧姆来模拟传输线阻抗并保护树莓派输出级。还需要一个隔直电容如10-100pF防止GPIO的直流偏置影响天线。具体值需要根据滤波器设计微调。音频输入树莓派可以通过3.5mm音频接口或USB声卡输入音频也可以直接播放系统内的音频文件。推荐使用USB声卡因为树莓派板载音频接口的底噪通常较大。2.3 软件基石rpitx 深度解析rpitx是这个项目的灵魂软件。它不是一个简单的脚本而是一个直接操作树莓派底层时钟发生器PLL和GPU的复杂程序。它绕过了Linux系统的音频驱动和时钟限制直接控制产生射频信号。这意味着它几乎能占用所有的CPU和GPU资源来保证信号生成的时序精度。它的工作流程大致是将输入的音频信号或IQ数据进行数字化处理然后通过DMA直接内存访问方式将处理后的数据流式传输到GPU由GPU生成特定的脉冲序列最终通过GPIO引脚特别是GPIO4引脚这是其默认的射频输出引脚输出。这种架构使得它能够实现SSB、AM、FM等多种调制方式并且频率非常稳定。安装rpitx通常需要从GitHub克隆源码编译。这里有一个关键点编译前务必确保系统已更新并安装好必要的依赖库如make,gcc等。不同的树莓派型号可能需要不同的内核头文件。我遇到过在树莓派4B上编译失败的问题最后发现是需要指定正确的内核版本。如果编译遇到问题去项目的Issue页面查找通常都能找到解决方案。3. 硬件电路搭建与滤波器的设计3.1 低通滤波器的设计与计算前面强调了滤波器的重要性现在来具体设计一个。我们目标是发射FM波段88-108MHz的信号为了留有余地并有效抑制二次谐波216MHz我们将滤波器的截止频率-3dB点设定在120MHz左右。这里设计一个简单的7阶椭圆低通滤波器性能更好但计算复杂。为了入门我们先做一个更简单的5阶巴特沃斯低通滤波器。巴特沃斯滤波器的特点是通带内频率响应最平坦。我们需要知道目标阻抗这里假设为50欧姆射频电路中常见阻抗。计算过程需要用到滤波器设计工具或公式。对于新手我强烈推荐使用在线滤波器设计计算器比如RF-Tools网站上的LC滤波器计算器。你输入截止频率120MHz、阻抗50欧姆、滤波器类型低通和阶数5它会自动计算出每个电感和电容的值。假设我们算出一组值仅供参考实际需根据元件精度调整L1 68 nHC1 22 pFL2 120 nHC2 12 pFL3 68 nH这些电感和电容需要选用高频特性好的元件。电感最好用高频磁环绕制的线绕电感或芯片电感电容用NPO/C0G材质的瓷片电容或云母电容它们的值随温度频率变化小。普通的电解电容或涤纶电容在这里完全不能用。3.2 电路连接与焊接实操电路原理图很简单树莓派GPIO4引脚 → 隔直电容如100pF→ 低通滤波器输入 → 低通滤波器输出 → 天线。在滤波器输出端和地之间可以并联一个约47欧姆的电阻到地作为假负载帮助稳定阻抗。焊接时务必注意布局紧凑所有元件尤其是滤波器的电感和电容的引脚要尽量短。长引线会引入额外的电感改变滤波器特性可能让它完全失效。使用洞洞板或PCB建议使用射频专用的洞洞板带接地网格甚至自己画一块简单的PCB。将地线大面积连接形成良好的接地平面这对高频电路至关重要。电源退耦虽然滤波器是无源的但如果你在附近为其他电路供电记得在电源入口加一个0.1uF和10uF的电容并联退耦滤除电源噪声。天线接口可以使用一个SMA母头焊接在板子上然后通过SMA转接线连接天线。这样既专业又方便更换天线。我第一次做的时候用长引线把元件插在普通洞洞板上结果发射出来的信号频谱仪上看全是毛刺谐波抑制比很差传输距离不到一米。后来把所有元件贴板焊接引线剪到最短效果立竿见影。3.3 天线制作与优化天线是能量的最终辐射器。对于FM波段垂直放置的1/4波长单极天线是最简单的。取一根长约75厘米的铜线一端接到电路输出端另一端垂直悬空。树莓派的地平面可以通过GPIO的地引脚引出充当天线的“地网”。这种天线是垂直极化的你的收音机天线最好也垂直放置以获得最佳接收效果。要进一步提升效果可以制作半波偶极子天线两根各约75厘米的导线呈一条直线中间绝缘中心点接信号线两端向外延伸。这种天线需要平衡馈电制作稍复杂但增益更高方向性更明显。实操心得天线的摆放位置极大影响效果。尽量放在开阔、高处的位置远离金属物体和墙壁。室内使用的话靠近窗户会好很多。我曾把树莓派和天线放在铁制机柜里信号几乎出不去。移到窗边后整个房间都能清晰接收。4. 软件配置与发射脚本编写4.1 rpitx 的安装与基础测试首先通过SSH登录到你的树莓派。确保系统是最新的sudo apt update sudo apt upgrade -y安装编译依赖sudo apt install make gcc g libsndfile1-dev libgd-dev -y克隆rpitx仓库并编译git clone https://github.com/F5OEO/rpitx cd rpitx make编译完成后可以先做一个最简单的测试发射一个未调制的载波。注意进行此测试前必须确保你的滤波器电路和天线已正确连接否则会辐射杂散信号。sudo ./rpitx -m RF -i 100000000 -f 100000这个命令会在100.0 MHz频率上发射一个载波。-i后面的参数是频率单位Hz-f参数我设置了一个很小的值实际上在RF模式下它可能被忽略但必须提供。用附近的收音机调到100.0 MHz应该能听到一个清晰的静噪点无节目时的“嘶嘶”声被压制。这说明发射机基本在工作。重要警告发射纯载波要非常谨慎时间要短几秒钟测试即可因为它会持续占用该频点可能干扰他人。务必在合法、无人使用的频点比如非常偏的频率进行测试并尽快转入调制发射测试。4.2 播放音频文件进行FM发射最常用的功能是播放一个音频文件。假设你有一个test.wav文件必须是单声道或立体声的WAV格式采样率推荐44100Hz或48000Hz。使用以下命令进行FM发射sudo ./rpitx -m RF -i 100000000 -f 44100 -a 0.3 test.wav参数解释-m RF指定RF发射模式。-i 100000000设置载波中心频率为100.0 MHz。-f 44100指定音频的采样率必须与音频文件实际采样率一致。-a 0.3设置调制增益可以理解为“音量”或频偏大小。值越大发射信号占用的带宽越宽音质可能更好但容易干扰相邻频率。FM广播的标准最大频偏是±75kHz。这个参数需要根据音频动态调整0.3是一个比较安全的起始值。 test.wav将音频文件重定向到rpitx的标准输入。运行后用收音机调到100.0 MHz就应该能听到音乐了。你可以通过调整-a参数来优化音质和带宽。4.3 实时音频输入与流媒体播放更酷的是实时发射麦克风输入或系统播放的音频。这需要用到Linux的管道和音频工具。首先安装sox这个强大的音频处理工具sudo apt install sox -y方案一发射麦克风输入你需要一个USB声卡接上麦克风。首先用arecord -l查看声卡设备号。假设USB声卡是card 1。arecord -D plughw:1,0 -r 44100 -c 1 -f S16_LE | sudo ./rpitx -m RF -i 100000000 -f 44100 -a 0.3这条命令实时录制麦克风单声道44100Hz采样率16位有符号整型并通过管道送给rpitx发射。方案二发射系统音频如网页音乐这需要将系统声音重定向。一个相对复杂但可行的方法是使用pulseaudio的虚拟声卡和parec。首先创建一个虚拟输出设备pacmd load-module module-null-sink sink_namevirtual_speaker然后在系统声音设置里将输出设备选为这个“虚拟扬声器”。接着用parec录制这个虚拟设备的声音并管道传输parec -d virtual_speaker.monitor --formats16le --rate44100 --channels1 | sudo ./rpitx -m RF -i 100000000 -f 44100 -a 0.3这样你在树莓派上播放的任何声音都会被FM发射出去。这个方案调试起来可能遇到音频延迟、格式不对等问题需要耐心调整parec的参数。5. 性能调优、合规性与常见问题排查5.1 发射参数调优指南调优的目标是在音质、带宽和发射稳定性之间取得平衡。主要调整两个参数频率和调制增益-a。频率选择务必选择一个在本地完全空闲的FM频率。可以用收音机手动扫描找一个只有“嘶嘶”白噪声的点。避开本地的强力广播电台至少间隔0.5MHz以上否则你的弱信号会被完全淹没。调制增益-a这是最重要的音质控制参数。值太小如0.1频偏小声音听起来闷高音不足动态范围被压缩而且容易受到噪声干扰。值太大如0.8频偏过大占用带宽过宽会导致声音失真特别是高音部分刺耳并且严重干扰相邻频率。在收音机上听可能会听到“噗噗”的过载声。调优方法播放一段动态丰富、带人声和高音的音乐例如交响乐或流行乐。从0.2开始慢慢增加。用一台音质较好的收音机在近距离收听。当感觉声音清晰、饱满高音清脆但不刺耳人声明亮时就是一个不错的点。通常在0.25到0.45之间。记得同时观察频谱如果有设备的话确保信号带宽大致在150-200kHz以内。音频预处理直接发射原始音频可能不是最佳选择。可以用sox在管道中进行预处理比如压缩动态范围让声音更平均、提升高音补偿FM解调的高频损失、限制峰值防止过载。arecord ... | sox -t wav - -t wav - compand 0.3,1 6:-70,-60,-20 -5 -90 0.2 | sudo ./rpitx ...这个sox命令链进行了压缩和增益调整能让发射出来的声音听起来更专业、更响亮。5.2 法律合规与安全操作须知这是必须严肃对待的部分。功率限制在绝大多数国家和地区未经许可发射无线电信号是违法的。我们这个项目在连接了正确的低通滤波器和简易天线后在室内的有效辐射功率通常只有微瓦级别传输范围在几十米内属于“微功率短距离设备”的范畴。绝对不要尝试外接功率放大器PA。一旦功率增大干扰范围变广必然触犯法律。频率范围严格将发射频率限制在FM广播波段通常是88-108MHz内并确保是本地空闲频率。不要发射到航空、应急、军用等任何其他频段。谐波抑制再次强调低通滤波器不是可选是必选。没有它你就是在制造一个频谱污染源。搭建完成后有条件的话最好能用频谱仪看一下输出频谱确保二次、三次谐波比主频信号低40dB以上。使用目的仅用于个人学习、实验和在私人空间内如自己家里的娱乐。不得用于播送任何非法内容不得意图让公共区域接收。我的教训早期测试时没接滤波器只是用一根线直接连GPIO。后来用一个便宜的RTL-SDR软件无线电接收器扫描频谱发现在我的目标频率300MHz和500MHz处都有很强的信号吓出一身冷汗。立刻断电焊好滤波器后才敢继续。5.3 常见问题与故障排查实录即使按照步骤来也很可能遇到各种问题。下面是我和社区里常见的问题汇总问题现象可能原因排查与解决思路收音机完全收不到信号只有噪音1. 频率设置错误。2. 天线未连接或断路。3. 树莓派GPIO4未正确输出。4. 滤波器电路断路或短路。1. 用收音机仔细扫描88-108MHz全波段。2. 检查天线连接用万用表通断档检查。3. 运行载波测试命令用LED或示波器如果有测GPIO4是否有高频信号注意安全。4. 仔细检查滤波器每个焊点测量电感和电容值是否正常。能收到信号但声音极小、模糊1. 调制增益-a值太小。2. 天线效率太低或摆放位置太差。3. 音频输入电平太低。4. 滤波器损耗过大或设计错误。1. 逐步增加-a值如从0.3调到0.4。2. 将天线移到开阔处拉直尝试不同长度~75cm。3. 检查音频源音量在命令前用sox增加增益sox ... -v 2.0 ...。4. 重新计算并检查滤波器元件值确保电感电容是高频型号。声音失真、有“噗噗”声或高音刺耳1. 调制增益-a值太大过载。2. 音频源本身电平过高削顶失真。3. 电源不稳定树莓派供电不足。1. 降低-a值。2. 在音频管道中加入限幅器... | sox -t wav - -t wav - gain -n -3 ...。3. 使用足额5V/3A的电源适配器为树莓派供电避免使用移动电源可能纹波大。发射一段时间后树莓派死机或重启1. CPU/GPU过热。2. 电源功率不足。3.rpitx软件与系统冲突。1. 为树莓派加装散热片或风扇。树莓派4B尤其容易发热。2. 更换更优质的电源。3. 尝试降低音频采样率如从44100降到22050减轻系统负载。或者寻找更新版本的rpitx。有规律的“嗡嗡”声或噪声1. 电源噪声干扰。2. 树莓派本身的数字噪声耦合。1. 在树莓派电源输入端并联一个大电容如470uF电解电容和一个小电容0.1uF瓷片电容滤波。2. 尝试将发射电路用金属罩屏蔽起来并确保屏蔽罩接地良好。使用电池为树莓派供电测试判断是否来自市电干扰。一个高级调试技巧如果你有一个RTL-SDR软件无线电接收器那就太好了。你可以用它来直接观察自己发射信号的频谱和波形。将SDR接收天线靠近发射天线注意不要太近以免过载用SDR软件如SDR#、GQRX调到发射频率可以看到清晰的FM信号瀑布图。通过观察频谱你可以直观地看到信号强度、带宽是否合适、是否有畸变或杂散发射这是调优的最有力工具。最后玩这个项目的乐趣在于从软件到硬件、从数字到模拟的全链路实践。每一次调试成功收音机里传来清晰的声音时那种成就感是无可替代的。它不仅仅是一个发射器更是一个理解通信原理的窗口。务必遵守规则安全实验享受创造的乐趣。