如何用GNU Radio Companion实现指定GFSK信号并测试bladeRF接收灵敏度
针对GFSK SDR通信链路(B200Mini/bladeRF)的流图搭建与参数调试方案
一、核心参数匹配问题排查
你的核心问题大概率是采样率、波特率、调制参数的匹配度不足,默认1M采样率能工作是因为GNU Radio同步模块的容错性高,但参数精准匹配时容错空间被压缩,同步逻辑失效。
- 采样率选择逻辑:GFSK解调需要足够的采样点/符号,建议取波特率的4~10倍(9600波特的话,优先选
38400、76800或96000,不要用1M这种过高采样率——既增加同步难度,又浪费资源)。 - 调制参数严格对齐:你的GFSK参数(频偏2400Hz、波特率9600)对应调制指数h=0.5,是标准窄带GFSK参数,没问题,但必须确保收发两端参数完全一致:
- 发射端
GFSK Mod:Samples per symbol设为「采样率/9600」(比如38400采样率就是4),Frequency deviation固定2400Hz - 接收端
GFSK Demod:上述两个参数必须和发射端完全相同,Gain先设为自动,后续再调灵敏度
- 发射端
二、灵敏度计算的误区修正
你之前用的公式Sensitivity = (2 * math.pi * deviation) / sample_rate是错误的——这个算的是GFSK基带调制的归一化频偏,和接收灵敏度完全无关。接收灵敏度的正确计算逻辑是:
灵敏度(dBm) = -174dBm/Hz + 10log10(信号带宽) + 噪声系数(dB) + 信噪比门限(dB)
针对你的参数:信号带宽≈9600+2*2400=14400Hz,GFSK信噪比门限取68dB,SDR噪声系数约1015dB,估算灵敏度在-100~-95dBm左右。
实际调试不要硬设灵敏度,按以下步骤来:
- 先确保收发两端载波频率严格一致(435MHz,注意校准SDR的LO误差,比如B200Mini需要做频偏校准)
- 接收端先用
Automatic Gain Control (AGC)模块(选Fast AGC)让系统自动调增益,能稳定解调后再手动优化增益到灵敏度阈值。
三、收发流图关键模块配置
发射流图(B200Mini)
- 信号源:用
Message Strobe或File Source生成9600波特的基带数据(比如ASCII文本) - 可选编码:添加
NRZI Encode(HAM频段常用编码方式) - GFSK调制:
GFSK Mod参数:Samples per symbol= 采样率/9600(例:38400采样率设为4)Frequency deviation= 2400HzBT乘积(高斯滤波带宽)设为0.5(窄带GFSK标准值)
- 上变频:
UHD: USRP Sink模块,Center Frequency设435MHz,Sampling Rate和调制模块一致,Gain先设30~40dB(根据传输距离调整) - 必加模块:
Throttle,采样率和USRP Sink一致,避免系统资源过载。
接收流图(bladeRF)
- 下变频:
bladeRF Source模块,Center Frequency435MHz,Sampling Rate和发射端完全相同,Gain先设自动(或直接用AGC) - 同步模块:添加
Clock Recovery MM,Omega设为「采样率/9600」(例:38400采样率设为4),Gain omega设0.001,Gain mu设0.01,Mu设0.5 - GFSK解调:
GFSK Demod参数和发射端完全一致 - 解码:添加
NRZI Decode(如果发射端用了NRZI),再用QT GUI Text Sink或File Sink输出数据 - 调试辅助:加
QT GUI Frequency Sink确认435MHz处有信号;加QT GUI Constellation Sink观察星座图,同步正常时会收敛成两个清晰的点。
四、快速排查步骤
- 频谱验证:用另一台SDR或频谱仪看发射端,确认435MHz处有信号,带宽在14400Hz左右
- 同步修复:如果星座图发散,检查
Clock Recovery MM的Omega值是否严格等于采样率/波特率,微调Gain omega和Gain mu(太小收敛慢,太大易震荡) - 增益调整:接收端没信号时,先调高增益直到频谱能看到信号,再切AGC自动优化
- 采样率一致性:收发两端采样率必须完全相同,哪怕差1Hz都会导致同步失败
内容的提问来源于stack exchange,提问作者EdEon CubeSat
相关产品推荐
相关产品推荐

