标签: KRAKENSDR

  • KrakenSDR 网页界面控制

    一、概述

    KrakenSDR 图形用户界面 (GUI) 可以通过任何接入同一网络的设备,在网页浏览器中访问:
    http://IP_ADDR:8080
    如果您使用的是我们提供的预配置镜像,并且所在网络支持主机名解析,也可以通过以下地址访问:
    http://krakensdr:8080

    该 GUI 可用于启动和停止 KrakenSDR 的数据采集,并控制与测向相关的各类参数,包括:频率、增益以及 VFO(可变频振荡器)通道设置

    二、配置页面

    2.1、射频接收机配置

    中心频率(Centre Frequency)

    处于有效带宽中心的频率。更改此频率并点击 Update(更新) 按钮后,将触发噪声源并启动相干校准过程。

    接收机增益(Receiver Gain)

    这是五个调谐器的通用增益设置。请在频谱图界面中检查 信噪比 (SNR),并调整增益以获得较高的信噪比,同时避免频谱过载。

    注意(NOTE):
    对中心频率或接收机增益所做的任何更改,只有在点击 “Update Receiver Parameters”(更新接收机参数) 按钮后才会生效。点击该按钮会启动一次校准流程,该流程可能需要几秒钟才能完成。

    2.2、到达方向配置(DoA Configuration)

    这些设置需要根据您所使用的天线阵列架构和个人需求进行配置。

    阵列配置(Array Configuration)

    选择您所使用的天线阵列类型,可以是线性阵列 ULA (Uniform Linear Array),或者是环形阵列 UCA (Uniform Circular Array)

    天线半径 / 阵元间距(Antenna Radius / Interelement Spacing)

    设置环形阵列的半径,或线性阵列的阵元间距(单位:米)。

    波长倍数(Wavelength Multiplier)

    (不可编辑)显示基于频率和阵列尺寸计算得到的间距倍数。该值应始终保持在 0.5 以下,并且理想情况下应 大于 0.2。该值越接近 0.5,角度分辨率越高。

    启用 DoA 估计(Enable DoA Estimation)

    启用测向算法的计算。

    DoA 算法(DoA Algorithm)

    在多种测向算法之间进行选择。在绝大多数情况下,推荐使用 MUSIC 算法

    去相关(Decorrelation)

    “相关信号”通常指 多径信号。多径反射会与真实信号相关联,可以通过特殊算法来减弱其影响。此下拉菜单中可选的算法能够帮助消除不需要的相关信号。

    这些去相关算法是针对 ULA 阵列设计的。但如果使用的是 UCA 阵列,并且启用了去相关算法,则系统会基于 UCA 阵列几何结构计算一个实验性的 虚拟 ULA 阵列。通过这种方式,去相关算法也能用于 UCA 阵列。不过需要注意:

    • 这种虚拟化可能会引入误差;
    • 仅在 大半径阵列 且波长倍数接近该频率最大值 0.5 时有效。

    您可以尝试不同的去相关方法。目前这些算法仍然是新的实验性功能,我们还没有足够的信息来判断在什么场景下、哪种算法的效果最佳。

    ULA 输出方向(ULA Output Direction)

    在使用 ULA 阵列时,无法判断目标位于阵列的前方还是后方。
    但如果您有先验信息,能够确认目标一定在阵列前方或后方,那么可以通过此处的设置屏蔽掉其中一个方向。

    阵列偏移(Array Offset)

    如果天线阵列的朝向与载体(例如车辆)的运动轴不一致,可以在此处设置偏移量。
    这在 线性阵列 上特别有用:因为对于线性阵列,0 度方向是与阵列正交的。如果阵列安装在车辆的前后方向上,则需要旋转 90 度,使其与车辆的运动轴对齐。

    预期射频源数量(Expected number of RF sources)

    如果您明确知道在同一频率上存在多个信号,可以在此处设置信号源的数量。
    但是,如果设置的数量高于实际信号源数量,可能会导致结果不准确。

    2.3、显示选项(Display options)

    这些选项会影响 到达方向 (DoA) 图表 的显示。

    DoA 图表类型(DoA Graph Type)

    可在 线性图、极坐标图或罗盘式图 之间切换,用于显示 DoA 方位角。

    • 线性图和极坐标图 采用单位圆约定:90 度在 0 度的逆时针方向。
    • 罗盘式图 采用罗盘/地图约定:90 度在 0 度的顺时针方向。

    未来版本中可能会统一改为 罗盘/地图约定,以避免混淆。

    罗盘偏移(Compass Offset)

    当使用罗盘式图时,可以设置一个罗盘偏移量,用来补偿天线阵列的指向方向。

    2.4、VFO配置(VFO Configuration)

    配置与 VFO(可变频振荡器)处理 相关的属性。
    VFO 允许您在 2.4 MHz 有效带宽 内同时运行多个通道进行测向。

    频谱计算(Spectrum Calculation)

    可选择 单通道(Single Ch)所有通道(All Ch, 仅测试用)

    • 单通道模式:仅显示来自 CH-1 的射频信号;如果启用了 静噪(squelch) 功能,则必须使用该模式。
    • 所有通道模式:仅用于测试和故障排查,会显示所有通道的频谱图,但时间分辨率显著降低,因此容易漏掉短暂的间歇信号。

    VFO 模式(VFO Mode)

    可选择 标准模式(Standard)VFO-0 自动最大(VFO-0 Auto Max)

    • 标准模式:VFO 由用户手动控制,例如手动设置 VFO 的频率。
    • VFO-0 自动最大模式:仅启用 VFO-0,它会自动调谐到频谱中最强的信号。

    活动 VFO 数量(Active VFOs)

    最多可同时启用 16 个 VFO。如有需要可支持超过 16 个,请联系我们。

    关于计算能力的注意事项:
    在树莓派 4(Raspberry Pi 4)上,如果添加超过 3–4 个始终处于活跃状态的 VFO,处理速度可能会变慢,从而导致带有间歇信号的通道被遗漏。

    • 如果您不需要捕捉短暂的间歇信号,那么这种性能下降影响不大。
    • 如果所有通道都是间歇性的并且正确启用了静噪(squelch),则处理能力足够,因为被静噪的通道不会占用计算资源。

    VFO 输出(Output VFO)

    可以选择输出 所有 VFO(ALL)单个 VFO

    • ALL 模式 会将所有活跃 VFO 的数据输出为 DoA 数据格式。目前 ALL 仅适用于 Kraken App 和未来的 Kraken Pro App
    • 如果您使用的是其他 DoA 数据输出格式,则只能选择一个 VFO 通道进行输出。

    DSP 端抽 decimation(DSP Side Decimation)

    如果您只关心窄带信号,可以通过抽 decimation 将 2.4 MHz 的带宽缩小到更小的范围。
    例如,抽 decimation 因子为 2 时,带宽减半为 1.2 MHz,依此类推。

    优化短脉冲(Optimize Short Bursts)

    如果您需要检测弱小的、非常窄带的 CW 信号突发(脉冲周期小于约 50 ms),启用此选项能提升检测效果,但会消耗更多计算资源。

    2.5、站点信息(Station Information)

    本部分用于配置与站点相关的设置,以及站点数据的输出方式。

    站点 ID(Station ID)

    此 KrakenSDR 站点的名称。用于在网络中区分多个不同的站点。

    DoA 数据格式(DOA Data Format)

    设置输出数据的格式。
    例如:

    • KrakenSDR Android App 使用的输出格式与 DF Aggregator 不同。
    • Kraken App、Kerberos App 和 DF Aggregator 会将数据输出到网页:http://IP_ADDR:8081/DOA_value.html
    • Kraken Pro(本地和远程) 通过 nodeJS websocket 连接输出 JSON 数据。
    • RDF Mapper 会直接上传数据到 RDF Mapper PHP API 页面。

    Kraken Pro 密钥(Kraken Pro Key)

    如果您使用的是(尚未完成的)Kraken Pro Remote 系统,请在此处输入您的唯一密钥。

    RDF Mapper 服务器地址(RDF Mapper Server URL)

    如果您要上传数据到 RDF Mapper,请在此处输入 RDF Mapper 服务器地址。注意:地址末尾必须包含 /save.php

    位置来源(Location Source)

    如果您的 Raspberry Pi 4 上连接了一个 兼容 gpsd 的 USB GPS 设备,则可以将位置信息输出到所选的 DoA 数据格式中(前提是该格式支持 GPS 数据)。
    如果您使用的是 Kraken App,则无需单独的 GPS 设备,因为 Kraken App 可以直接使用智能手机的 GPS。

    经纬度 / 航向(Latitude / Longitude / Heading)

    如果您将位置来源设置为 静态(Static),则可以在此手动输入站点的 纬度、经度天线阵列朝向

    2.6、本地数据记录(Local Data Recording)

    如果您没有网络连接,或没有连接到本地 Android 设备,您可以将 DoA 数据 直接记录到 SD 卡,以便日后分析。例如,这在无人机应用场景中会非常有用。

    日志文件会被写入到目录:
    ~/krakensdr_doa/krakensdr_doa

    文件名(Filename)
    为您的 CSV 日志文件选择一个唯一的文件名。

    数据格式(Data Format)
    选择用于记录的数据格式。目前仅支持 Kraken App
    这意味着您可以在 KrakenSDR Android App 中打开本地记录的 CSV 文件,用于绘图和三角定位分析。

    写入间隔(Write Interval)
    设置数据写入日志文件的频率。

    • 默认值为 1 秒,适合在少量通道下进行数小时的记录。
    • 如果需要长时间记录,或使用了多个 VFO,建议增加写入间隔,以避免日志文件过大。

    在仅启用 一个 VFO 且写入间隔为 1 秒 时,日志文件的增长速度大约为 100 kB 每分钟

    启用本地数据记录(Enable Local Data Recording)
    开启或关闭本地日志功能。

    文件大小(File Size, MB)
    监控日志文件大小,确保文件不会过于庞大。

    下载文件(Download File)
    从 Web GUI 下载日志文件。
    ⚠️ 注意:该按钮在 KrakenSDR Android App 的内置浏览器 中存在 bug,无法使用。
    请在 Android 设备上使用标准的 Chrome 浏览器 来下载文件。

    2.7、VFO设置(VFO Settings)

    对于每一个处于活动状态的 VFO 通道,都会有一个对应的 VFO 控制框
    每个控制框用于单独设置该 VFO 的 频率(Frequency)、带宽(Bandwidth)和静噪(Squelch) 参数。

    频率(Frequency)
    该 VFO 通道的频率,必须位于 2.4 MHz 带宽范围内
    您可以在 状态框(Status box) 中查看 VFO 范围 [MHz] 信息,其中会显示可用的最大和最小频率。

    带宽(Bandwidth)
    设置该 VFO 通道所监测信号的预期带宽。
    带宽以 Hz 为单位。

    静噪(Squelch)
    将其设置为高于噪声底(noise floor)的值,以启用 静噪功能

    • 启用后,只有在存在有效信号时才会输出 DOA 值。
    • 这将防止在只有噪声、没有信号时输出随机的 DOA 值。
    • 同时也能在没有信号时节省计算资源。

    ⚠️ 最大静噪值为 0 dB

    三、实时频谱图(Spectrum Page)

    频谱页面(Spectrum Page)
    频谱页面用于显示 实时频谱图瀑布图

    它还会显示所有已设置 VFO 的 中心频率、带宽和静噪阈值
    当某个 VFO 达到静噪阈值时,会显示为 绿色;未达到时则显示为 红色

    点击调谐(Click to tune)
    在频谱界面中,您可以通过用鼠标点击 VFO 的中心来选择一个 VFO。
    被选中的 VFO 会显示为 边框加粗,表示当前处于选中状态。
    (注意:可能需要点击多次才能成功选中,这是当前后端的一个已知 bug。)

    选中后,您可以在频谱或瀑布图上的任意位置点击,以将该 VFO 移动到新的频率上。

    四、到达方向估计(DOA Estimate Page)

    该页面显示 到达方向 (DOA) 估计 的图表。
    具体显示哪种图表,由 配置页面(Configuration Page) 中的 显示选项(Display Options) 配置框决定。

    请注意:

    • 线性图(Linear)极坐标图(Polar) 使用 单位圆约定,即 90 度在 0 度的逆时针方向
    • 罗盘图(Compass) 使用 罗盘/地图约定,即 90 度在 0 度的顺时针方向

    DOA 页面 主要用于快速检查图表是否显示正确,但在需要时也可以用于手动测向。
    正常情况下,推荐的用法是通过 Android App 在地图上显示方位角图。

    五、附加数据采集设置(Additional DAQ Settings)

    软件分为两个部分:数据采集代码(DAQ)到达方向数字信号处理代码(DOA DSP)
    DAQ 设置可以通过 GUI 进行修改,但除非您非常清楚自己在做什么,否则建议不要更改这些设置

    以下是一些 DAQ 设置的说明,您可以通过点击 基础 DAQ 配置(Basic DAQ Configuration)高级自定义 DAQ 配置(Advanced Custom DAQ Configuration) 来进行调整。

    5.1、射频接收机配置:基础数据采集设置(RF Receiver Configuration: Basic DAQ Settings)

    DAQ 设置 也可以通过 网页界面 来控制。
    然而,我们建议只有高级用户才去修改 DAQ 设置,哪怕是基础 DAQ 设置。

    对基础或高级 DAQ 设置所做的更改,可以通过点击 “Reconfigure & Restart DAQ Chain”(重新配置并重启 DAQ 链) 按钮来应用。
    ⚠️ 此重启过程可能需要几分钟才能完成。

    预配置 DAQ 文件(Preconfigured DAQ Files)
    从预设选项中选择一个 DAQ 文件配置。主要用于在 Kraken旧版 Kerberos 设置 之间切换。

    数据块长度(Data Block Length)
    每个处理数据块的积分时间。

    • 较大的数据块可提供更高的处理增益(对弱信号有更高的信噪比),但会降低更新速率。
    • 默认值 436.9ms 是最佳选择,因为它对应于 2 的幂次 CPI 大小

    重新校准间隔(Recalibration Interval)
    系统在进行相干校准检查并在必要时重新校准前所等待的分钟数。
    在正常情况下,校准不应丢失,但定期检查仍然是一个好习惯。

    5.2、射频接收机配置:高级自定义 DAQ 配置(RF Receiver Configuration: Advanced Custom DAQ Configuration)

    这些是与 DAQ 代码 相关的高级设置。
    ⚠️ 在正常情况下,除非有充分理由,否则不建议调整这些设置。

    接收通道(RX Channel)
    设置用于测向的接收通道数量。
    适用于自定义系统,或希望在阵列中使用更少天线进行实验的场景。
    如果您使用的是四通道的 KerberosSDR,建议使用 kerberos_default 预配置文件,而不是直接修改此项。

    偏置供电控制(Bias Tee Control)
    启用或禁用每个通道的 4.5V 偏置供电。仅当需要为外部设备(如 LNA)供电时才使用。
    输入格式为逗号分隔的字符串:

    • 1,0,0,0,0 → 仅 CH-0 启用偏置供电。
    • 1,1,1,1,1 → 所有通道均启用。

    DAQ 缓冲区大小(DAQ Buffer Size)
    决定 rtl_daq 软件 在传递数据到下一个处理阶段前收集的缓冲区大小。
    几乎所有情况下默认值 262144 最优。设置过大或过小都会导致 rtl_daq 线程负担过重或过轻。

    采样率(Sample Rate)
    设置 RTL-SDR 的硬件采样率。最大支持 2.4 MSPS

    启用噪声源控制(Enable Noise Source Control)
    允许系统控制噪声源以进行相干校准。若完全不使用相干功能,可以关闭。

    CPI 大小(CPI Size, Coherent Processing Interval)
    重缓冲模块会收集 DAQ 缓冲区的数据块,并重整为 CPI 大小。

    • 较大的 CPI → 更长的采集时间(更大的数据块),但有更高的处理增益。

    抽 decimation 比率(Decimation Ratio)
    控制 DAQ 端的抽 decimation。如果您通过网络发送原始相干数据,可以使用 decimation 来减少数据量。

    FIR 滤波抽 decimation 阶数(FIR Tap Size)
    抽 decimation 采用 FIR 滤波器。此值必须大于抽 decimation 比率。

    FIR 窗函数(FIR Window)
    设置 FIR 滤波器的窗函数类型。

    启用滤波器复位(Enable Filter Reset)
    在每个新 CPI 上复位 FIR 滤波器的记忆。

    相关块大小(Correlation Size)
    用于校准帧的块大小。较小 → 更快校准,但过小可能导致校准失败。

    标准通道索引(Standard Channel Index)
    指定作为参考通道的索引,所有相位测量都将基于该通道。

    需要锁定干预(Require Track Lock Intervention, 针对 Kerberos)
    尚未完全实现。设想是在旧 Kerberos 单元上,软件在重新校准时应暂停,以便用户可以断开天线。

    校准跟踪模式(Calibration Track Mode)

    • No Tracking(无跟踪):旧 Kerberos 设备必须使用此模式,因为每次重新校准都需要人工断开天线。
    • Periodic Tracking(周期性跟踪):适用于 KrakenSDR,或加装了切换器的 KerberosSDR。软件会定期检查相干校准,以防丢失(极少发生)。
      校准检查会短暂启用并切换到噪声源,因此检查期间的几秒钟内信号数据会丢失。

    校准帧间隔(Calibration Frame Interval)
    经过多少帧后进行一次重新校准检查。

    校准帧突发大小(Calibration Frame Burst Size)
    在检查校准时,需要检查多少帧。

    幅度容差(Amplitude Tolerance)
    校准过程中允许的幅度差异范围。

    相位容差(Phase Tolerance)
    校准过程中允许的相位差异范围。

    最大同步失败次数(Maximum Sync Fails)
    需要多少次相干校准同步失败后,才会触发重新校准。

    IQ 调整来源(IQ Adjustment Source)
    提供校准整个系统的选项,通过补偿天线同轴电缆的相位差来实现。

    • explicit-time-delay(显式时延):如果您用 VNA 测量了时延,可以在此输入相对 CH0 的时延差(单位:纳秒)。
    • touchtone(触点文件):您可以从 VNA 导出 S21 或 S12 .s1p 文件,分别对应系统的 5 根同轴电缆,并放入 _calibration 文件夹中。命名为 cable_ch0.s1p, cable_ch1.s1p 等。⚠️ 文件必须覆盖实际使用的频率范围。注意:仅当相位补偿不产生环绕时才有效(即电缆长度差远小于工作频率的波长)。

    IQ 幅度调整(IQ Adjust Amplitude)
    如果需要手动调整 IQ 幅度,可以在此设置。通常只用于测试。

    IQ 时延调整(IQ Adjust Time Delay)
    如果 IQ 调整来源选择了 explicit-time-delay,请在此输入相对 CH0 的时延差(单位:纳秒)。

    • 例如,对于 KrakenSDR(5 通道),应输入 4 个值。
    • 对于 KerberosSDR(4 通道),应输入 3 个值。

    如果 VNA 仅提供 TDR 电缆长度 测量值,也可通过同轴电缆的速度因子(vf)转换为时间: time_delta_x = ( cable_length_delta / (c * vf) ) * 10^9

    其中:

    • c = 光速(299792458 m/s)
    • vf = 电缆速度因子

    示例:
    假设有三根同轴电缆,速度因子 vf = 0.66,长度略有差异,则可通过公式计算出对应的时延差(单位 ns),并在此处进行补偿。

    Cable 0: 2.00130m
    Cable 1: 1.99933m
    Cable 2: 1.99910m
    cable_length_delta_1 = 2.00130m - 1.99933m = 0.00197m
    cable__length_delta_1 = 2.00130m - 1.99910m = 0.00220m
    time_delta_1 = (0.00197m / (c * 0.66)) * 10^9 = 0.009956383ns
    time_delta_2 = (0.00220m / (c * 0.66)) * 10^9 = 0.011118803ns

    电缆 2、3、4 重复上述操作,并将计算得到的 time_delta_1、time_delta_2、time_delta_3、time_delta_4 的数值输入到 IQ 时延调整(IQ Adjust Time Delay) 输入框中。
    ⚠️ 注意:不要在数值后添加任何时间单位(如 ns)。

  • KrakenSDR GNU Radio 模块

    简述

    GNU Radio 是一款流行的免费开源工具包,提供各种数字信号处理模块。您可以使用它来构建解调器、解码器,以及各种利用相干数据的应用,例如干涉测量和波束形成。

    KrakenSDR 源模块的工作原理

    gr-krakensdr 模块与 KrakenSDR 的数据采集软件 Heimdall 协同工作。Heimdall 是 KrakenSDR 的核心软件,负责确保所有通道的采样数据在时间和相位上保持一致性(相干性)

    在启动时,Heimdall 会自动完成采样和相位一致性的校准,并在运行过程中定期检查以确认相干性是否保持稳定。GNU Radio 中的该模块通过 TCP 套接字连接 从 Heimdall 接收相干 IQ 数据,用于后续的信号处理。

    Heimdall 服务器既可以运行在与 GNU Radio 程序相同的主机上,也可以运行在网络连接的设备上,例如 树莓派 4(Raspberry Pi 4)

    但如果使用网络传输,您需要确保网络带宽足以支持 5 通道的数据吞吐量

    模块安装

    KrakenSDR 的源代码块可在
    https://github.com/krakenrf/gr-krakensdr获取。

    模块预览

    这是一个用于 KrakenSDRGNU Radio 模块。它通过 TCP 套接字连接与 KrakenSDR 的数据采集服务器软件 Heimdall 通信。

    Heimdall 负责通过噪声源进行所有采样同步与相位一致性的校准,而该模块则接收 经过校准的相干 IQ 数据,并将其提供给 GNU Radio 进行后续的 数字信号处理(DSP)

    GNU Radio OOT Block 安装说明

    sudo apt-get install gnuradio-dev cmake libspdlog-dev clang-format
    
    git clone https://github.com/krakenrf/gr-krakensdr
    
    cd gr-krakensdr
    mkdir build
    cd build
    cmake ..
    make
    sudo make install

    使用说明

    首先安装Heimdall https://github.com/krakenrf/heimdall_daq_fw.

    如果你使用的是预配置的测向镜像,首先需要禁用测向软件的自动启动,否则可能会干扰 Heimdall 的连接。进入 /boot 目录,将 start_kraken.sh 重命名,例如改为 start_kraken.sh_stop,以停止测向应用的自动启动。

    接下来,将本仓库中的 heimdall_only_start.shheimdall_only_stop.sh 文件复制到你的 krakensdr 根目录中。

    然后,在 heimdall_daq_fw 文件夹中,编辑 Firmware/daq_chain_config.ini 文件,将 out_data_iface_type 的值修改为 eth

    [data_interface]
    out_data_iface_type = eth

    然后,在 krakensdr 根目录下运行:

    ./heimdall_only_start.sh

    现在你可以启动包含 KrakenSDR 源模块的 GRC 文件,程序将会通过套接字连接到本地 IP 地址 127.0.0.1 上运行的 heimdall 程序。

    另外,你也可以在一台联网设备上运行 heimdall 程序,但需要确保使用高速千兆网络,并尽可能是直连方式,以保证网络吞吐量足以处理五个通道的数据。

    GNU Radio KrakenSDR 示例流程图

    我们还提供了三个示例 GRC 流程图,以及一个互相关器(cross correlator)和一个 DOA MUSIC 块,以帮助用户熟悉源模块的使用。

    示例 1 – 简单的多通道 FFT

    第一个示例文件提供了每个输出通道的 简单 FFT 频谱显示。名为“kraken_fft_display.grc”。

    示例 2 – 使用 DOA MUSIC 块进行无线电测向

    第二个示例使用 DOA MUSIC 块,配合天线阵列,实现无线电测向并输出信号的方位角信息。名为“kraken_music_doa.grc”。

    示例 3 – 交叉相关采样与相位一致性检查

    最后一个示例可用于验证 Heimdall 输出是否真正保持相干,方法是对 通道 1 到 4 与参考通道 0 之间进行交叉相关处理。

    要使用该相关流程图,您需要在 Heimdall 源代码中修改一行代码,以强制噪声源始终保持开启状态。

    要测试该模块,您需要对 Heimdall 核心代码进行轻微修改,以使噪声源保持常开:

    1、使用文本编辑器打开文件:

    Firmware/_daq_core/rtl_daq.c

    2、在文件结尾附近,找到以下函数调用:

    rtlsdr_set_bias_tee_gpio(..., 0);

    将最后的 0 改为 1,使噪声源始终开启:

    rtlsdr_set_bias_tee_gpio(..., 1);

    3、然后在目录 Firmware/_daq_core 中运行:

    make

    4、完成测试后,请务必将这处修改还原为 0,并再次运行 make,以恢复默认行为。