简介:HackRF One 软件无线电平台用户手册面向刚接触 SDR 的爱好者、嵌入式开发者与无线电实验人员,帮助其从硬件组成、Windows/Linux 开发环境搭建到 GNURadio 使用与发射接收实例建立完整认识。资源包仅含 1 个 PDF 文件,大小约 2.49MB,篇幅紧凑,便于在电脑或移动设备上查阅。内容覆盖 VS2012 运行库、USB 驱动、SDRSharp、libhackrf 编译,以及 Ubuntu 等 Linux 系统下的 GNURadio/gqrx 环境配置,并给出 FM 音频发射与广播接收等开发实例。手册还包含 GNURadio 基本操作、常用模块介绍和工程示例,可作为实验课、课程设计或自学排错的参考。目前已有 1515 人学习下载,适合希望快速搭建 HackRF One 开发链路并动手验证的中初级读者。
1. 从一块只有灯在闪的板子说起:这份手册解决的是“第一次上电之后”的问题
很多人拿到 HackRF One 的第一晚是这样的:插上 USB,电源灯、USB 灯全亮,打开某个软件,频谱上要么一条平线,要么一片噪声,调频广播也不知道躲在哪。板子没坏,是链路上某一环没通。这份《HackRF One 软件无线电平台用户手册》干的就是这件事——它不讲通信原理,而是把“驱动怎么装、软件怎么配、库怎么编、流图怎么连”按 Windows 和 Linux 两条线拆成能照做的步骤,中间还夹着硬件框图和一套现成的虚拟机。适合手上已经有板子、想先把 FM 广播收出来、再往 GNURadio 流图和二次开发走的人,也适合还在犹豫要不要买、想先看清 8bit 采样和 20MHz 带宽到底能干哪些活的人。
2. 射频链路拆解:8bit 采样、20MHz 带宽和 10MHz–6GHz 的真实边界
2.1 从天线的 ANT 口到 USB 口,信号要过六道关
接收方向上,射频信号从 ANT 口进来,先过一级单刀三掷开关,由它决定这一路是走旁路还是走前置放大器。板上那颗放大器是 0.1–6GHz、标称 14dB 的宽带器件,好处是频段宽,坏处是它不是为某一个频段调过的,强信号环境下它的非线性会先暴露出来。放大或直通之后进第二级开关,信号在这里被一分为二:一路直接送到中频输出,另一路进镜像抑制滤波器。这个滤波器不是一颗现成芯片,而是用两个单刀双掷开关、一个低通和一个高通拼出来的结构,靠开关切换在高通和低通之间选通,目的是把混频之后落在中频上的镜像频率压下去。这一步做得好不好,直接决定你看到的频谱干不干净。
滤波之后进混频器,本振范围是 80MHz 到 4200MHz,负责把射频搬到一个固定的中频上;中频再进 2.3GHz–2.7GHz 的宽带收发器做正交下变频、基带滤波和增益调整;然后 8bit ADC 以最高 22MHz 的速率采样,实际跑在 20Msps;采样数据经 CPLD 的并行接口送到主控 MCU,这颗 Cortex-M4 跑在 204MHz,负责把数据打包,最后走 USB 2.0 进电脑。整条链路里,MCU 不参与射频处理,它只做搬运和配置,所以电脑端的软件才是真正决定你能解出什么的地方。
这里有个反直觉的点:10MHz–6GHz 不是一个接收机一口气覆盖 six 个 G,而是靠混频器和收发器拼出来的三段。混频器把高频往下搬,收发器负责最后一级正交解调,中间靠开关和滤波器选通。所以不同频段的灵敏度、镜像抑制、幅度平坦度都不一样。手册里标的 0.75dB/20MHz 带内平坦度,测试条件是 3.005GHz–3.025GHz 这 20MHz 窄带,别把它当成全段的指标去用;同样,14dBm 的发射功率是板端标称,接上天线和线缆之后,实际辐射出去的要再打个折。
发射方向是反着走的:中频信号从主控侧进来,先分两路,一路直通、一路进混频器搬到射频频段,混频后经镜像抑制滤波、开关网络,最后进末级放大器,从天线出去。整条发射链路只有一级 PA,这也是为什么它的输出功率上不去、而且不同频段的输出差异明显。理解了这条链路,后面调增益、看镜像、判断“收到的是真信号还是自己板子漏出来的”,心里就有谱了。
2.2 参数表里每个数字,都对应一个绕不开的限制
手册给的技术参数不多,但每一个都能反过来约束你的用法:
| 参数 | 手册标称 | 实际含义与使用边界 |
|---|---|---|
| RF 范围 | 10MHz–6GHz | 三段混频拼接,两端灵敏度明显下降,10MHz 附近要外接合适天线 |
| 信号带宽 | 20MHz | 瞬时带宽,不是可调滤波器带宽,解调窄带信号时要自己加低通 |
| 采样精度 | 8bit | 理论 SNR 约 48dB,实际可用动态范围更小,强台旁边的小信号容易被淹没 |
| 采样速率 | 20Msps | IQ 各 8bit,20Msps 对应 40MB/s,已经贴着 USB2.0 的持续吞吐上限 |
| 发射功率 | 14dBm | 板端标称,不含线损和天线增益,别拿它当链路预算的起点 |
| 带内平坦度 | 0.75dB/20MHz @3.005–3.025GHz | 窄带测试值,宽带扫频要重新看幅度 |
| 增益偏差 | 2dB | 动态范围内不同增益档之间的偏差,做功率测量时要校准 |
| USB 接口 | USB 2.0 | 持续吞吐大约 30–40MB/s,决定 20Msps 时容易丢样点 |
8bit 这个数字最容易被低估。它意味着每个样点只有 256 个量化台阶,理想情况下信噪比上限约 48dB,而实际板子上还有本振泄漏、电源噪声、混频器非线性,能用的动态范围通常更窄。表现就是:一个强调频台旁边几十 kHz 处的弱信号,你把增益拉满也未必能分辨出来,因为强台已经把 ADC 的低几位占满了。这不是软件能修的,是量化位数决定的。
20Msps 和 USB2.0 是一对矛盾。20Msps 的 8bit IQ 数据是每秒 40MB,USB2.0 理论 480Mbps,实际持续吞吐在 30–40MB/s 之间,刚好卡在边缘。所以真正跑 20Msps 的时候,电脑端稍微慢一点、线材差一点、USB 口共享了带宽,就会开始丢样点。GNURadio 日志里刷 “U” 或者 SDRSharp 里声音断续,八成是这个原因,而不是软件写错了。
2.3 增益不是越大越好:LNA、VGA、AMP 的分工与起步配置
板子上有三处可以动增益:前置放大器(AMP,0 或 14dB 两档)、低噪放(LNA,0–40dB,一般按 8dB 一档)、可变增益放大器(VGA,0–62dB,一般按 2dB 一档)。这三者的位置不同,作用也不同。AMP 在最前端,开了之后整条链路的噪声系数会改善,但强信号下也最容易把后级顶饱和;LNA 在射频前端,主要决定灵敏度;VGA 在中频,主要决定送进 ADC 的电平。总增益不是简单相加,因为每一级都有自己的压缩点,前一级饱和了,后一级加多少都没用。
我一般的调法是:先把 AMP 关掉、LNA 设到中间档(24–32dB)、VGA 从低位往上加,直到频谱上的底噪明显抬起来,再往回退 2–4dB。判断有没有过载有个土办法:把 LNA 降一档 8dB,看底噪是不是跟着明显下降;如果降了,说明之前是过载状态,你看到的“信号”里有一部分是互调产物。另一个办法是接一根假负载或者不接天线,看频谱上还有没有明显的峰,有的话就是本振泄漏或者 USB 噪声串进来的。
几个典型场景的起步配置,可以照着试,再按实际环境微调:
| 场景 | AMP | LNA | VGA | 说明 |
|---|---|---|---|---|
| FM 广播 87–108MHz | 0 | 24–32 | 16–24 | 城市里信号强,开 AMP 容易过载 |
| 航空波段 118–137MHz | 0 | 32 | 20 | 信号是窄带 AM,带宽要设小 |
| 433MHz 遥控与传感器 | 14 | 32 | 24 | 信号弱且占空比低,先开 AMP |
| 频谱摸底扫描 | 0 | 16 | 16 | 低增益扫,避免互调造出假峰 |
增益调完之后不要马上存成“标准配置”。同一个频段,白天和晚上、室内和室外、天线朝向不同,需要的增益都不一样。真正靠谱的做法是每次换场景都重走一遍“降 LNA 看底噪”的流程,几十秒的事,比事后对着假信号分析半天划算。
3. Windows 侧三条路:Zadig 装驱动、SDRSharp 收 FM、VS2010 编 libhackrf
3.1 驱动:Zadig 里选错设备,后面所有软件都会报错
Windows 上第一件事不是装 SDR 软件,是把驱动绑对。手册里的顺序是:先装 VS2012 Redistributable 的 x86 版本,因为后面要用的库和工具链有一批是 32 位的;然后把板子插上电脑,运行随盘的 Zadig。Zadig 打开之后默认只显示复合设备,必须点 Options 菜单,勾上 “List All Devices”,下拉列表里才会出现 HackRF One。选中它之后,确认右侧显示的 VID/PID 是 1d50:6089,目标驱动选 WinUSB(有的版本显示成 WCID),点 Install 或 Replace Driver,等进度条走完。
装完之后去设备管理器看,HackRF One 应该出现在“通用串行总线设备”下面,名字就是 HackRF One,前面没有黄色感叹号。如果它还在“未知设备”或者“其他设备”里,说明驱动没绑上;如果它出现了两次、其中一个带 Interface 后缀,说明之前的驱动残留没清干净,要右键卸载、勾上“删除驱动程序软件”,拔掉重插再走一遍。这一步偷懒,后面 SDRSharp 会报 “No device found”,或者一开软件就崩,你会以为是软件问题,其实是驱动绑到了错误的接口上。
注意:Zadig 里的 Replace Driver 会覆盖当前绑定的驱动,如果板子之前被别的工具绑过,直接覆盖比重装系统省事,但覆盖前确认一下没有别的设备共用同一个驱动。
3.2 SDRSharp 收 FM:参数按“先 Start 再拖滑块”的顺序调
SDRSharp 是绿色软件,解压就能跑,但它依赖 .NET Framework,系统太老的话要先补上。解压路径不要带中文和空格,否则有些插件加载会出问题。启动之后,Source 下拉里选 HackRF,点旁边的 Configure,会弹出一个配置窗口——这里有个新手最容易卡住的点:配置窗口里的 LNA 和 VGA 滑块默认是灰的,必须先点主界面上的 Start,滑块才会变成可拖动状态。手册专门用一句话点了这个,我见过不止一个人在这里以为是软件坏了。
参数按下面的顺序调:
| 参数 | 推荐值 | 为什么这么设 |
|---|---|---|
| Source | HackRF | 决定采样接口和增益字段 |
| Sample Rate | 2.4–10 MSPS | 太高 USB 顶不住,太低 WFM 解不出来 |
| Radio 模式 | WFM | 宽带调频 |
| 滤波器带宽 | 250000 | WFM 含立体声导频大约占 200kHz |
| 滤波器类型 | Blackman-Harris 4 | 旁瓣低,邻台抑制好 |
| 频率步进 | 50kHz | 让频率落在整步进上,解调不偏 |
| Snap to grid | 勾选 | 防止手拖频率拖出半个 kHz 的偏差 |
| LNA Gain | 24–32 | 城市强信号环境 |
| VGA Gain | 16–24 | 补足送进声卡的电平 |
设完之后点 Run,扬声器里应该能听到广播。如果只有噪声没有声音,先确认中心频率是不是对准了一个已知强台,再把带宽从 250k 往上加一点试试;如果声音断续、像卡带,把采样率降到 2.4MSPS;如果底噪很高、人声被淹没,把 LNA 降一档。SDRSharp 不止能收 WFM,把 Radio 模式换成 AM、LSB、USB,配上对应的带宽,航空波段和短波也能听,但那些模式的滤波器参数要重新调,不能照搬 WFM 的 250k。
3.3 用 VS2010 把 libhackrf 编成静态库:三个目录和两个 lib
要在 Windows 上写自己的程序调板子,就得先有 libhackrf。手册给的路线是用 VS2010 编静态库,依赖两样东西:pthread-win32 和 libusbx。pthread 的压缩包里有预编译好的二进制,解压到固定路径之后,把dll\x64\pthreadVC2.dll拷到C:\Windows\System32;libusbx 同样解压到固定路径,后面工程里要引用它的 include 和 lib。
工程配置有三处关键:新建 Win32 项目,配置类型选“静态库(.lib)”;VC++ 目录的包含目录里加上 pthread 和 libusbx 的 include 路径;库目录里加上对应的 lib 路径。然后把 hackrf.c 和 hackrf.h 加进工程,编译,得到 libhackrf.lib。为了方便复用,我把 hackrf.h 和编出来的 lib 分别放到一个 include 目录和一个 lib 目录里,后面建测试工程直接引用这两个目录,不用每次都翻原始路径。
测试工程新建 Win32 控制台,把下面的代码贴进去:
#include "hackrf.h" #include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) { hackrf_device* device = NULL; int result = HACKRF_SUCCESS; uint8_t board_id = BOARD_ID_INVALID; char version[256]; read_partid_serialno_t sn; /* 1. 初始化库:只加载库、枚举设备,不拿句柄 */ result = hackrf_init(); if (result != HACKRF_SUCCESS) { fprintf(stderr, "hackrf_init failed: %s (%d)\n", hackrf_error_name((hackrf_error)result), result); return EXIT_FAILURE; } /* 2. 打开第一块板子;多板场景换成 hackrf_open_by_serial */ result = hackrf_open(&device); if (result != HACKRF_SUCCESS) { fprintf(stderr, "hackrf_open failed: %s (%d)\n", hackrf_error_name((hackrf_error)result), result); hackrf_exit(); return EXIT_FAILURE; } /* 3. 板号、固件版本、序列号,是判断板子是否正常的三个基线 */ hackrf_board_id_read(device, &board_id); printf("board id: %d (%s)\n", board_id, hackrf_board_id_name((hackrf_board_id)board_id)); hackrf_version_string_read(device, version, sizeof(version) - 1); printf("firmware: %s\n", version); hackrf_board_partid_serialno_read(device, &sn); printf("serial: %08x %08x %08x %08x\n", sn.serial_no[0], sn.serial_no[1], sn.serial_no[2], sn.serial_no[3]); /* 4. 先关设备再退库,顺序反了会留句柄 */ hackrf_close(device); hackrf_exit(); return EXIT_SUCCESS; }这段代码的逻辑很直:hackrf_init和hackrf_open是两个阶段,前者只加载库和枚举,后者才真正拿到设备句柄,所以两个错误分支都要单独处理;错误码用hackrf_error_name转成字符串打出来,比只盯着数字快得多。参数上,board_id用BOARD_ID_INVALID初始化,读到 2 一般就是 HackRF One;version缓冲区留 256 字节,读的时候传sizeof(version) - 1,防止越界;序列号是四个 32 位整数,打印成十六进制方便和hackrf_info的输出对照。调用顺序必须是 init → open → 读 → close → exit,close 一定要在 exit 之前。
链接器那边,展开“链接器 → 输入 → 附加依赖项”,加上libhackrf.lib、libusb-1.0.lib、pthreadVC2.lib三项。如果编译报 LNK2019 找不到符号,先看工程是 Win32 还是 x64,库的位数必须和工程一致;如果编译过了但运行时报找不到 pthreadVC2.dll,把那个 dll 拷到 exe 同目录的 Debug 文件夹下就行。手册里还提了一句“找不到库文件时可以直接把 lib 文件加进工程”,这是应急做法,能跑通,但工程换台机器就容易散,还是把目录配好更稳。
4. Linux 侧:一条 apt 装 GNURadio,gqrx 验证,虚拟机是省事但要付代价
4.1 apt 安装与三条验证命令
Linux 下的工具链比 Windows 简单,手册给的是一条 apt 路线:
# 添加 gqrx 的软件源,GNURadio 和 gr-osmosdr 走官方源 sudo add-apt-repository ppa:gqrx/releases sudo apt-get update sudo apt-get upgrade # 一次装齐:图形界面、流图工具、osmosdr 硬件抽象层、hackrf 命令行 sudo apt-get install gqrx gnuradio gr-osmosdr hackrf # 收尾,处理依赖关系变化 sudo apt-get dist-upgrade每一行的作用不一样:add-apt-repository只是把源地址写进 sources.list,不装任何东西;update刷新索引;upgrade升级已有包;真正装东西的是install那行;最后的dist-upgrade是处理依赖变化,手册里专门提到,如果 install 时报 “Held packages”,多半是之前装过一半、包被 hold 住了,跑一遍dist-upgrade或者sudo apt-mark unhold <包名>再装。这套命令在旧版 Ubuntu 上是顺的,放到新版本上可能遇到源地址失效,那就改用系统自带的源装 gnuradio 和 gr-osmosdr,hackrf 用源码编,思路一样。
装完必须验证,三条命令对应三个层次:
| 命令 | 期望结果 | 不通过时先看什么 |
|---|---|---|
hackrf_info | 打印 Board ID、Firmware、Serial、Part ID | lsusb里有没有 1d50:6089,USB 线是不是只能充电 |
gnuradio-companion | 弹出流图画布 | 终端里的 Python 报错,多半是依赖没装全 |
gqrx | 弹出 gqrx 主界面 | 声卡和显示环境,远程登录时没有 X 会起不来 |
hackrf_info是最关键的一条,它同时验证了 USB 驱动、权限和固件三件事。输出里 Board ID 是 2、Firmware 版本号能读出来、Serial 是一串十六进制,这三项齐了,说明板子和系统已经通了。如果报 “No HackRF boards found”,先别怀疑板子,九成是权限或者 USB 直通的问题,下一章会细说。
4.2 虚拟机镜像:省十几小时,代价是版本锁定和 USB 直通
手册很实在地承认了一件事:自己从零装 GNURadio 和 gqrx,顺利也要几个小时,不顺利可能折腾一两天,所以它随盘给了一个装好全套工具的虚拟机镜像。用法是解压、用虚拟机软件打开.vmx文件、开机、输密码、把 USB 设备直通给虚拟机。对只是想先看到频谱的人来说,这条路最省事,开箱就能跑hackrf_info和gnuradio-companion。
但省事的代价要说清楚。第一是版本锁定,镜像里的系统内核和 GNURadio 版本是固定的,你想装新版的某个模块,可能会撞上依赖冲突,到时候要么忍着用旧版,要么重装系统。第二是 USB 直通,虚拟机默认不接管 USB 设备,要在虚拟机菜单里手动把 HackRF One 连进去,而且插在 USB3.0 口上偶尔会不认,换到 USB2.0 口反而稳。第三是时间同步,虚拟机的时钟漂移会让录下来的 IQ 文件时间戳错乱,做长时间录制之前先对一次时。我的建议是:拿镜像做第一次验证,确认板子和工具链没问题;真要做项目,还是在自己的物理机上装一套,镜像留着当备份环境。
4.3 GNURadio 流图:模块、连线、参数三件事
GNURadio Companion 的界面分四块:顶部菜单和工具栏、中间画布、底部日志窗口、右侧模块列表。添加模块用 Ctrl+F 打开搜索,输关键词,双击结果就落到画布上;连线是依次点两个模块,自动连;删连线是单击选中按 Del;改参数是双击模块,弹属性窗口。日志窗口别忽略,运行时的 underrun、overrun、报错都打在下面,调参数之前先看一眼有没有刷 “U”。
一个能出声的 FM 接收最小流图,模块和参数大致是这样:
| 模块 | 关键参数 | 作用 |
|---|---|---|
| Options | ID 设为 fm_rx,Generate Options 选 QT GUI | 工程属性和运行方式 |
| osmocom Source | Device Arguments 填 hackrf=0;Sample Rate 填 2e6;中心频率填本地强台;RF/IF/BB 增益分别设 | 采样入口,增益字段名各版本有差异 |
| Low Pass Filter | Cutoff 100e3,Transition 20e3,Sample Rate 2e6 | 压邻台,防混叠 |
| Rational Resampler | Interpolation 1,Decimation 5 | 2M 降到 400k,减轻解调负担 |
| WFM Receive | Quadrature Rate 400e3,Audio Decimation 5 | 宽带调频解调 |
| Audio Sink | Sample Rate 48e3 | 送声卡出声 |
参数里有几个地方值得多说一句。osmocom Source 的增益字段在不同版本里叫法不一样,有的叫 RF/IF/BB,有的直接标 AMP/LNA/VGA,对应关系是 RF 对应 AMP 的 0 或 14、IF 对应 LNA、BB 对应 VGA,但版本之间偶有调换,别照抄数字,跑起来看底噪再定。低通的 cutoff 设 100kHz 是因为 WFM 的有效能量集中在中心 ±100kHz 内,transition 留 20kHz 给滤波器滚降。Rational Resampler 的 1/5 是把 2Msps 降到 400ksps,WFM Receive 在这个速率下解调刚好,再高就是浪费算力。Audio Sink 的 48kHz 是声卡的标准速率,设成别的值会多一层重采样。
提示:流图第一次跑,先只看日志窗口有没有 “U”。有 U 就把采样率从 2e6 往下降到 1.2e6 或 1e6,或者把 FFT 显示模块关掉,等不刷 U 了再去调解调参数,否则你调的每一个参数都建立在丢样点的数据上。
发射方向的流图是把 Source 换成 osmocom Sink,中间加窄带调频调制和增益控制,参数逻辑反过来:先把发射增益设到最低,接假负载确认波形,再逐步加功率。发射这一侧最容易出的问题是频谱再生和杂散,没有频谱仪的话,至少用一个接收机在旁边监听,确认没有明显的邻道泄漏再往外发。
5. 避坑与排查:第一天最容易翻车的五个现场
5.1 现象:Zadig 装完,SDRSharp 的 Source 里还是没有 HackRF
原因通常有两个:一是驱动绑到了错误的接口上,二是装的根本不是 WinUSB。Zadig 默认只列复合设备,不勾 “List All Devices” 的话,你选中的可能是一个带 Interface 后缀的子接口,驱动装上了,但主接口没绑上,软件自然找不到设备。另一个常见情况是之前用别的工具绑过 libusb-win32,Zadig 再装的时候没有覆盖干净,两个驱动打架。
解决顺序是:设备管理器里找到 HackRF 相关设备,右键卸载,勾上“删除驱动程序软件”,拔掉板子;重新插上,打开 Zadig,先勾 Options 里的 List All Devices,下拉里选名字最干净的那个 HackRF One,确认 VID/PID 是 1d50:6089,驱动选 WinUSB,点 Replace Driver;装完在设备管理器里确认它落在“通用串行总线设备”下且没有感叹号。还不行就换一个 USB 口,避开 hub 和前面板。
5.2 现象:SDRSharp 频谱上有信号,但扬声器没声音
先分清是“没解调出来”还是“解调了但没送出去”。前者表现为频谱上有明显的包络但声音是纯噪声,后者表现为日志里音频电平在动但听不见。最常见的原因是 WFM 带宽设小了,比如只给了 100k,立体声导频被削掉,解出来是破碎的单声道;其次是 Audio 选项卡里的输出设备选成了不存在的设备,或者被系统静音;还有一种容易忽略的情况是只点了 Start 没点 Run,Start 只是启动采样,Run 才启动解调链。
处理办法:带宽先拉到 250k,滤波器换成 Blackman-Harris 4;Audio 里逐个试输出设备;确认 Run 按钮是按下状态;采样率从 10MSPS 降到 2.4MSPS 看声音是否变连续,如果变连续了,说明之前是 USB 丢包导致的断续。这三步走完还没声音,接一副耳机到电脑上放个本地音乐,排除声卡本身的问题。
5.3 现象:VS 编译测试工程报 LNK2019 unresolved external symbol
这个错误的意思是链接器找不到符号的实现,原因基本逃不出三类:附加依赖项里没写库名、库的位数和工程不匹配、头文件和 lib 不是同一次编译出来的。第一类最好查,展开工程属性看链接器输入里有没有libhackrf.lib、libusb-1.0.lib、pthreadVC2.lib三项。第二类看工程配置管理器的平台是 Win32 还是 x64,Win32 工程必须配 x86 的库,混了就是一堆 unresolved。第三类最隐蔽,hackrf.h 从别处拷来的、lib 是自己编的,两边版本对不上,函数签名不一致,也会报同样的错。
解决:把三项依赖补齐;确认平台和库位数一致;hackrf.h 和 libhackrf.lib 从同一次编译的输出里一起拷出来用。编译过了但运行时报找不到 pthreadVC2.dll,把 dll 放到 exe 同目录,或者把 pthread 的 bin 目录加进 PATH。
5.4 现象:Linux 里 hackrf_info 报 No HackRF boards found
在物理机上装 Linux 遇到这个,先看权限:普通用户默认没有 USB 设备节点的读写权限,需要装 hackrf 包自带的 udev 规则,装完重新插拔一次。判断方法是lsusb能不能看到 1d50:6089,能看到但hackrf_info报找不到,基本就是权限问题;看不到,就是线或者口的问题,换一根确定能传数据的线,避开只能充电的线。
在虚拟机里遇到这个,九成是 USB 没直通。虚拟机默认把 USB 设备留给宿主机,要在虚拟机窗口的菜单里找到 USB 设备列表,把 HackRF One 勾上“连接到虚拟机”,这时候宿主机上它会消失,虚拟机里lsusb才能看到。另外 USB3.0 控制器在部分虚拟机版本上对这块板子兼容性不好,换到 USB2.0 口或者把虚拟机的 USB 控制器改成 2.0 再试。
5.5 现象:收到的信号有很强的镜像和假峰,调增益也压不下去
先分清假峰是自己产生的还是环境里真有的。把天线拔掉、接一个 50 欧假负载,如果假峰还在,那是板子内部的本振泄漏或者 USB 噪声串扰,跟外部
本文还有配套的精品资源,点击获取