用 HackRF + GNU Radio 制作 FM 发射机:从 WAV 到 103 MHz 空中信号
用 HackRF GNU Radio 制作 FM 发射机从 WAV 到 103 MHz 空中信号作者charlie关键词HackRF、GNU Radio 3.10、SoapySDR、analog_wfm_tx、FM 广播调制、采样率链摘要本文记录如何用一块 HackRF One/Pro 配合 GNU Radio把一个普通 WAV 音频文件调制成标准 FM 广播信号并发射到空中默认 103 MHz用普通收音机即可接收。文章给出完整可运行的流图fm_tx.grc并重点讲清三件事(1) FM 调制与卡森带宽准则为什么max_dev75 kHz、quad_rate必须是audio_rate的整数倍(2) GNU Radioanalog_wfm_tx的内部插值×5与预加重tau75 µs(3)SoapySDR 下 HackRF 在 1 MHz 采样率发射会触发 TIMEOUT bug因此必须用 2 MHz 采样率并用rational_resampler的 25/3 把 240 kHz 提到 2 MHz。文末附合规声明本方案仅用于低功率近场教学测试。1. 背景FM 广播频段为 88–108 MHz单声道基带音频带宽约 15 kHz峰值频偏 75 kHz。HackRF 覆盖 1 MHz–6 GHz、半双工、8 位量化既能接收也能发射是做“软件定义 FM 发射机”的低成本平台。目标链路非常短WAV 文件 (48k, 单声道) │ ▼ analog_wfm_tx (FM 调制, 插值 ×5) 240 kHz 复数基带 │ ▼ rational_resampler_ccc (25/3) 2 MHz 复数基带 │ ▼ soapy_hackrf_sink (TX, fc freq×1e6, vga16) 空中 103 MHz FM 信号 │ └─► qtgui_sink_x (本地频谱自检)2. 理论基础2.1 FM 调制与卡森带宽准则在频率调制中载波的瞬时频率正比于消息信号的幅度s(t) A·cos( 2π·fc·t 2π·kf·∫ m(τ)dτ )kf决定频偏灵敏度实际工程用峰值频偏 Δf描述max_dev 75000Hz。根据Carson 带宽准则已调信号 98% 功率落在BW ≈ 2·(Δf f_m,max)FM 广播Δf 75 kHz基带最高f_m,max ≈ 15 kHz故BW ≈ 2×(7515) 180 kHz。这就是quad_rate 240 kHz留有余量且为audio_rate的 5 倍的来源。2.2 预加重 / 去加重tau 75 µs高频噪声在 FM 解调后会被提升因此发射端对高频做预加重、接收端做去加重以换得信噪比改善。时间常数分两派地区tau美国 / 日本 / 韩国等75 µs欧洲 / 中国等50 µsanalog_wfm_tx的tau 75e-6对应 75 µs 预加重美规。若面向欧规设备应改为50e-6。fh -1.0表示关闭发射端的高通滤波器不额外滤直流。2.3 GNU Radio analog_wfm_tx 原理analog_wfm_tx内部做四件事重采样内置插值因子固定为5所以要求quad_rate 5 × audio_rate本例 48k → 240k。它把音频上采样后再调制保证每个音频样本有足够多的复数采样刻画频率变化。预加重按tau对音频做一阶高通式加权。相位累加 FM 调制对每个输出采样累加相位增量Δφ 2π·(kf·m[n])/fs再取cos/sin得到复数基带I jQ。这正是“间接调频”——用积分正交本振实现避免直接调 VCO。限幅/缩放输出幅度归一化到适合 DAC 的范围。2.4 采样率链与 HackRF 限制关键坑HackRF 基带采样率规格为2–20 MS/s。1 MHz 在规格外且SoapySDR 的 HackRF TX 在 1 MHz 会触发 TIMEOUT bug底层hackrf库在过低的采样率下 TX 超时流图卡死/丢数。因此wfm_tx自然产出 240 kHz用rational_resampler_cccinterp25, decim3把它提到240k × 25/3 2,000,000 2 MHz正好落在 HackRF 合法区间下沿HackRFsamp_rate设为 2 MHzcenter_freq freq × 1e6。若强行把samp_rate设 1 MHz流图能“跑起来”但发射会间歇卡死且频谱异常——这是 Soapy/HackRF 的已知问题不是你流图写错。2.5 法律与责任务必阅读在 88–108 MHz发射信号绝大多数国家/地区都需要电台执照未经许可的 FM 广播发射可能违法并干扰合法广播。本文设置amp False关闭 HackRF 板载放大器vga 16适中增益低功率配合短天线、近场测试发射机旁放一台收音机验证。请仅在合法授权、低功率、封闭/近场场景使用本方案并遵守当地无线电法规。作者与本文不对任何违规使用负责。3. 实践流图搭建3.1 音频准备analog_wfm_tx要求单声道且采样率与audio_rate一致。用 ffmpeg 把任意音频转成 48 kHz 单声道 WAVffmpeg-iin.wav-ar48000-ac1fm_input.wav流图中blocks_wavfile_source指向/path/to/fm_input.wavrepeatTrue循环播放方便反复测试。3.2 流图关键参数变量 / 模块值说明freq88–108 MHz 滑杆默认 103发射中心频率samp_rate2,000,000HackRF TX 采样率≥2M避开 1M bugaudio_rate48,000必须与 WAV 一致quad_rate240,000 5 × audio_rateanalog_wfm_tx.max_dev75,000峰值频偏 75 kHzFM 广播标准analog_wfm_tx.tau75e-675 µs 预加重rational_resamplerinterp25, decim3240k → 2Msoapy_hackrf_sink.vga16低功率增益soapy_hackrf_sink.ampFalse关闭板载放大3.3 关键模块源码来自 fm_tx.grcWAV 源循环播放-name:wav_source_0id:blocks_wavfile_sourceparameters:file:/path/to/fm_input.wavnchan:1repeat:TrueFM 调制核心-name:analog_wfm_tx_0id:analog_wfm_txparameters:audio_rate:audio_rate# 48000quad_rate:quad_rate# 240000 ( 5 × audio_rate)max_dev:75000# 峰值频偏 75 kHztau:75e-6# 75 µs 预加重fh:-1.0# 关闭发射高通采样率提升到 2 MHz绕过 1M TX bug-name:rational_resampler_ccc_0id:rational_resampler_xxxparameters:type:cccinterp:25# 240000 × 25 / 3 2,000,000decim:3taps:[]HackRF 发射与本地频谱自检-name:soapy_hackrf_sink_0id:soapy_hackrf_sinkparameters:type:fc32center_freq:freq*1e6# 103 MHzsamp_rate:samp_rate# 2,000,000vga:16amp:False# 低功率合规近场测试bandwidth:0-name:qtgui_sink_x_0id:qtgui_sink_xparameters:type:complexfc:freq*1e6bw:samp_ratefftsize:1024plotfreq:Trueplotwaterfall:True连接关系等价于生成的 fm_tx.py# 信号流WAV → FM调制 → 重采样(→2M) → HackRF TX并旁路一份给频谱仪self.connect((self.wav_source_0,0),(self.analog_wfm_tx_0,0))self.connect((self.analog_wfm_tx_0,0),(self.rational_resampler_ccc_0,0))self.connect((self.rational_resampler_ccc_0,0),(self.soapy_hackrf_sink_0,0))self.connect((self.rational_resampler_ccc_0,0),(self.qtgui_sink_x_0,0))4. 运行与自检启动GRC 或grcc生成脚本grcc-o/tmp fm_tx.grcpython3 /tmp/fm_tx.py# 或直接用 GRC 的 “Run”自检验证两步走本地频谱自检qtgui_sink_x应显示以 103 MHz 为中心、宽约 180–200 kHz 的 FM 谱典型“双驼峰” Carrier 对称边带。若谱很窄或卡死多半是踩了 1M bug——确认samp_rate2M。真实接收把一台 FM 收音机调到 103.0 MHz靠近 HackRF 天线应清晰听到 WAV 里的声音循环播放便于确认。听感发闷/高频不足检查tau与接收机去加重是否匹配美规 75 µs 对 75 µs。小贴士freq用counter_slider可在运行中平滑改频改到 88–108 内任意值收音机同步调台即可验证。5. 总结与踩坑清单核心结论FM 广播调制 相位累加的数字 FMquad_rate必须是audio_rate的5 倍analog_wfm_tx内置插值 ×5。峰值频偏75 kHz 卡森准则 ⇒ 占用带宽约 180 kHz决定了quad_rate240k的选取。HackRF TX 不能用 1 MHz 采样率Soapy TIMEOUT bug必须 ≥2 MHz用rational_resampler25/3 把 240k 升到 2M 是标准解法。预加重tau75 µs对应美规面向欧规设备改50 µs。踩坑清单收音机收到但声音发尖/失真→max_dev与收音机期望不一致或音频本身超出 15 kHz确认max_dev75k。收音机高频发闷→tau不匹配发射 75 µs 配欧规 50 µs 收音机会有差异。流图卡死 / 频谱断续→ 几乎都是samp_rate1M触发 Soapy/HackRF TX TIMEOUT改成 2M。完全收不到→ 先确认ampFalse时增益足够近场天线用 88–108 MHz 鞭状天线收音机与 HackRF 距离过远低功率下十几厘米一米内最佳。音频杂音大→ WAV 不是 48k 单声道用 ffmpeg 重转并保证audio_rate与文件一致。适用与局限适用FM 广播调制教学、近场音频链路演示、SDR 发射链路验证。局限HackRF 8 位 DAC音质远不及专业 FM 激励器半双工不能收发同时发射须合规、低功率、近场立体声MPX/Pilot 19 kHz未实现本文为单声道 FM。合规声明重申在 FM 广播频段发射通常需无线电执照。本方案默认ampFalse、vga16、循环近场测试仅供教学与合法授权场景。使用者须自行确保符合当地法规作者对任何滥用后果不承担责任。参考GNU Radioanalog.wfm_tx文档插值因子、预加重、频偏参数Carson, J. R. — “Notes on the Theory of Modulation” (1922)卡森带宽准则HackRF One 规格采样率 2–20 MS/s、SoapySDR HackRF 模块ITU / 当地无线电管理法规FM 广播发射授权要求

相关新闻

C语言函数递归详解:从核心要素到实战案例

C语言函数递归详解:从核心要素到实战案例

1. 什么是递归 递归是编程中的一种技术&#xff0c;指的是一个函数在其定义内部调用自身。递归一定是依赖于函数的。 史上最简单的递归程序&#xff1a; #include <stdio.h> int main() {printf("hehe\n");main(); //main函数自己调用自己return 0; }这个程序是…

2026/8/16 3:56:09 阅读更多 →
LangGraph实战:构建有状态AI智能体工作流,解决复杂流程编排痛点

LangGraph实战:构建有状态AI智能体工作流,解决复杂流程编排痛点

1. 先搞清楚 LangGraph 到底解决了什么 Agent 开发痛点如果你正在用 LangChain 或者类似的框架做 AI 应用&#xff0c;尤其是涉及多步骤、有状态、需要协作的智能体&#xff08;Agent&#xff09;&#xff0c;大概率会遇到几个头疼的问题&#xff1a;任务流程一复杂&#xff0c…

2026/8/16 3:55:09 阅读更多 →
Grok Bot本地部署与API集成指南:从环境准备到功能验证

Grok Bot本地部署与API集成指南:从环境准备到功能验证

这次我们来看一个刚在 Hacker News 上登顶热榜的开源项目——Grok Bot。它来自 x.ai&#xff0c;一个由知名企业家埃隆马斯克创立的 AI 研究公司。简单来说&#xff0c;Grok Bot 是一个可以本地部署、支持 API 调用、具备强大对话和推理能力的 AI 助手。它的核心吸引力在于&…

2026/8/16 3:55:09 阅读更多 →

最新新闻

售楼宝是什么?

售楼宝是什么?

售楼宝&#xff0c;全称“数字化售楼体验中心”&#xff0c;又称“互动售楼宝”或“HOUSEBOX售楼系统”。根据百度百科定义&#xff0c;售楼宝是北京流光溢彩公司研发的一套以触摸查询终端为载体的房地产销售与推广的数字化系统&#xff0c;集影视广告、动画、多媒体、电子楼书…

2026/8/16 4:53:22 阅读更多 →
2026 零售行业分析报告服务商排行榜|全域消费洞察、品牌出海调研工具盘点魔镜洞察领衔

2026 零售行业分析报告服务商排行榜|全域消费洞察、品牌出海调研工具盘点魔镜洞察领衔

摘要存量竞争时代&#xff0c;零售品牌做新品研发、渠道布局、出海规划、竞品对标&#xff0c;离不开专业零售行业数据服务商输出标准化市场分析报告。2026 年国内消费数据赛道分化明显&#xff0c;一类主打全域消费者需求洞察&#xff0c;一类侧重单平台电商交易大盘统计&…

2026/8/16 4:53:22 阅读更多 →
网络通信协议与编程实践全解析

网络通信协议与编程实践全解析

1. 网络通信基础概念解析网络通信是现代计算机系统之间进行数据交换的基础技术手段。简单来说&#xff0c;就是不同设备通过有线或无线方式连接起来&#xff0c;按照约定的规则传递信息。这就像人与人之间的对话需要共同语言一样&#xff0c;计算机之间通信也需要遵循特定的协议…

2026/8/16 4:53:22 阅读更多 →
飞猫口碑深扒:好评率、复购率、信号实测,一文看懂这个品牌值不值得买

飞猫口碑深扒:好评率、复购率、信号实测,一文看懂这个品牌值不值得买

飞猫口碑深扒&#xff1a;好评率、复购率、信号实测&#xff0c;一文看懂这个品牌值不值得买图&#xff1a;飞猫品牌在抖音平台的热度表现&#xff08;数据来源&#xff1a;抖音公开数据&#xff09;开篇&#xff1a;先给结论判断一个随身WiFi品牌可不可靠&#xff0c;不能只看…

2026/8/16 4:53:22 阅读更多 →
Windows安装错误1603全面排查指南:从权限到日志分析

Windows安装错误1603全面排查指南:从权限到日志分析

1. 问题初探&#xff1a;错误1603究竟是什么&#xff1f;如果你在安装某个软件&#xff0c;特别是像PowerMill、Java、Autodesk系列产品或者一些大型工业软件时&#xff0c;突然弹出一个“安装无法完成。错误 1603”的提示框&#xff0c;那种感觉就像马上要跑到终点线&#xff…

2026/8/16 4:53:22 阅读更多 →
TwinCAT3界面详解:从核心布局到高效调试的工控IDE指南

TwinCAT3界面详解:从核心布局到高效调试的工控IDE指南

1. 从零开始的TwinCAT3界面初探如果你刚拿到一份新工作&#xff0c;或者接手了一个自动化项目&#xff0c;打开电脑发现桌面上多了一个叫TwinCAT3的蓝色图标&#xff0c;点进去后面对着一堆陌生的窗口和菜单&#xff0c;感觉无从下手——这大概就是很多工控工程师&#xff0c;尤…

2026/8/16 4:52:22 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者&#xff0c;最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent&#xff0c;从本地部署到云端API&#xff0c;我们正处在一个技术栈快速重构的节点。然而&#xff0c;面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者&#xff0c;最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent&#xff0c;从本地部署到云端API&#xff0c;我们正处在一个技术栈快速重构的节点。然而&#xff0c;面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →