蓝牙IQ数据解析流程(概述)

1. 信号捕获(USRP Source)
  • 功能:通过USRP硬件捕获蓝牙射频信号,输出复数基带IQ数据。

  • 关键参数

    • 采样率(Samp Rate):4 MHz(需覆盖蓝牙信号带宽,BLE通常为2 MHz,经典蓝牙为1 MHz)

    • 中心频率(Center Freq):0 Hz(基带信号)

    • 增益(Gain):0 dB(需根据实际信号强度调整,避免饱和或信噪比不足)

2. 低通滤波(Low Pass Filter)
  • 功能:滤除高频噪声和带外干扰,保留蓝牙信号带宽。

  • 关键参数

    • 截止频率(Cutoff Freq):2 MHz(需根据蓝牙实际带宽调整,BLE建议设为1 MHz)

    • 过渡带宽(Transition Width):1 MHz(建议缩小至0.5 MHz以提升阻带衰减)

    • 窗口类型(Window):Hamming(平衡主瓣宽度和旁瓣衰减)

    • Beta值:6.76(若使用Kaiser窗时生效,此处因选择Hamming无效)

  • 输出:滤波后的IQ数据,减少后续解调的噪声影响。

3. GFSK解调(GFSK Demod)
  • 功能:将GFSK调制的频率变化转换为二进制比特流。(即IQ转bit)

  • 关键参数

    • 每符号采样数(Samples/Symbol):4(需与蓝牙符号速率匹配,BLE为1 Mbps,采样率4 MHz对应4 Samples/Symbol)

    • 灵敏度(Sensitivity): 0.3927(需满足公式:K=1/(2π⋅Δfmax/fs),例如Δf=250 kHz时 K=1/(2π⋅0.25/4)≈0.3927)

    • 环路带宽(Gain Mu):0.175(控制时钟同步收敛速度)

    • 符号周期偏差(Omega Relative Limit):0.005(允许±0.5%的符号周期波动)

  • 输入信号:基带复数信号(如从USRP或文件读取)。

  • FM解调:(analog.quadrature_demod_cf

    • 通过正交解调提取瞬时频率偏移。

    • 输出为浮点信号,幅度正负对应比特1/0。

  • 符号同步:(digital.symbol_sync_ff

    • 使用Mueller & Muller算法检测符号边界误差。

    • 动态调整插值位置,输出每个符号的最佳采样点。

  • 符号判决:(digital.binary_slicer_fb

    • 对同步后的信号进行阈值判决,生成比特流。

  • 输出:解调后的二进制比特流,包含蓝牙广播包或数据包。

4. 数据保存(File Sink)
  • 功能:将解调后的比特流和调试日志保存至文件。

  • 关键路径

    • 原始数据outputbluetooth.bin(保存二进制比特流,供后续协议解析)

    • 日志文件knopble_output0.log(记录解调过程中的调试信息,如误码率、同步状态)

流程各部分详解

一、低通滤波(Low Pass Filter)(firdes::low_passfirdes::low_pass_2

   1. 模块作用

        生成低通FIR滤波器的抽头系数(taps),用于滤除信号中的高频成分,保留截止频率以下的信号。应用在GFSK解调前,用于限制信号带宽,抑制带外噪声,确保解调器能准确提取频率信息。实际应用中需根据信号特性合理配置截止频率、过渡带宽和窗类型,确保解调性能与计算效率的平衡。

    2.核心设计步骤

  1. 参数校验:确保采样率、截止频率和过渡带宽合理。

  2. 计算滤波器阶数:基于过渡带宽和衰减需求。

  3. 生成理想低通响应:时域sinc函数。

  4. 加窗处理:抑制吉布斯效应,改善阻带衰减。

  5. 增益归一化:确保通带增益符合预期。


    3.关键函数解析

    1. low_pass_2函数
vector<float> firdes::low_pass_2(
    double gain,
    double sampling_freq,     // 采样频率(Hz)
    double cutoff_freq,       // 截止频率(过渡带起点,Hz)
    double transition_width,  // 过渡带宽(Hz)
    double attenuation_dB,    // 阻带衰减(dB)
    fft::window::win_type window_type, // 窗口类型(如KAISER)
    double param)             // 窗口参数(如Kaiser的beta)
  • 滤波器阶数计算

    int ntaps = compute_ntaps_windes(sampling_freq, transition_width, attenuation_dB);
    • 公式:ntaps ≈ (attenuation_dB * sampling_freq) / (22 * transition_width),确保奇数阶。

  • 理想低通响应

    taps[n + M] = sin(n * fwT0) / (n * GR_M_PI) * w[n + M];
    • fwT0 = 2π * cutoff_freq / sampling_freq,将截止频率转换为数字频率。

    • w[]为窗口函数系数(如Kaiser窗),抑制旁瓣。

  • 归一化处理

    • 计算直流增益fmax(所有系数的和),调整系数使通带增益为gain

2. low_pass函数

low_pass_2类似,但滤波器阶数计算基于窗口类型而非固定衰减:

int ntaps = compute_ntaps(sampling_freq, transition_width, window_type, param);
  • compute_ntaps根据窗口的最大衰减特性(如Hamming窗的-53dB)计算所需阶数。


4.数学原理

1. 理想低通滤波器的时域响应

理想低通滤波器的脉冲响应为:

其中fc为截止频率,fs为采样率。代码中的sinc生成与此一致。

2. 窗口函数的影响
  • Kaiser窗:通过参数beta控制主瓣宽度与旁瓣衰减,适用于高衰减需求。

  • Hamming窗:固定旁瓣衰减(-53dB),计算更简单。

3. 归一化校正
  • 计算未加窗滤波器的直流增益fmax,调整系数使增益归一化:

确保通带增益准确。

5.与其他模块的协同

  1. 前置模块:下变频器(将射频信号转为基带)。

  2. 后置模块:正交解调器(quadrature_demod_cf)提取瞬时频率。

  3. 符号同步symbol_sync_ff恢复符号时钟,需低通滤波后的干净信号。

二、GFSK解调(GFSK Demod)

参数

sensitivity=1.0 / sensitivity:调整解调增益,需与调制端匹配(调制灵敏度为 Δf/bit)。


    2. 符号同步模块 (digital.symbol_sync_ff)

功能:恢复符号时钟并对信号重采样,实现符号同步。
核心算法

关键参数


    3. 符号判决模块 (digital.binary_slicer_fb)

功能:将同步后的模拟信号(浮点数)转换为比特流。
原理

3.与其他模块的协同

  • 1.模块功能

    gfsk_demod 是GNU Radio中实现GFSK解调的层次化模块,输入为基带复数信号(gr_complex),输出为解调后的比特流(char)。其核心功能模块如下:

  • 2.模块详解

    1. FM解调模块 (analog.quadrature_demod_cf)

    功能:将GFSK调制的频率变化转换为基带信号的幅度变化。
    原理

  • GFSK信号频率偏移对应比特1/0,通过正交解调提取瞬时频率。

  • 公式:sensitivity = (pi / 2) / samples_per_symbol

  • TED (Timing Error Detector):使用 Mueller & Muller 算法 检测定时误差。

  • 环路滤波器:通过阻尼系数(damping)和环路带宽(loop_bw)控制时钟恢复动态特性。

  • 插值器:使用 IR_MMSE_8TAP 插值滤波器优化采样点。

  • omega:初始符号周期估计(单位:采样点数),通常为 samples_per_symbol * (1 + freq_error)

  • gain_mu:定时误差的更新步长,控制收敛速度。

  • max_dev:允许的符号周期最大偏差(由 omega_relative_limit 计算)。

  • 简单阈值判决:若输入值 > 0,判为1;否则判为0。

  • 输出为每个符号对应的比特(1字节存储1比特,LSB有效)。

  • 白噪化解扰:解调后的比特流需通过 whitening 函数还原原始数据。

  • CRC校验:最终数据需进行CRC校验(需实现 crc24_check 函数)。


流程图总结

[USRP Source] → [Low Pass Filter] → [GFSK Demod] → [File Sink (Bits)] 
                                      ↓
                                 [File Sink (Logs)]
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐