[SDR] GNU Radio 系列教程(十五)—— GNU Radio GFSK 模块
1 GFSK 背景知识
调制分类如下:[2]
GFSK 是 FSK 的扩展,其中调制信号的频率不会在二进制数据的每个符号周期开始时立即改变。 因此,bit 0-> 1 或反之变得更加平滑。换句话说,与传统的 FSK 相比,调制信号的幅度和相位变化将相对较小。原则上,FSK 是使用独立的本地振荡器分别用于同相和正交分量来实现的,并且振荡器将在每个符号周期开始时切换以生成用于调制的载波频率。一般而言,所有独立振荡器在符号周期开始时不会处于相同的幅度和相位,因此这会导致传输信号的每个比特变化的频率突然变化。因此,调制后的 FSK 信号将非常宽,并且具有不可忽略的旁瓣。下图说明了这一点。
信号被正确解码的前提是:在每个符号周期之后具有精确和准确的幅度和相位值。如果接收端收到这样的信号,将会造成信道失真、干扰、热再生等,从而降低 FSK 的性能。
在 GFSK 调制方案中,需要在基带波形信号前引入高斯滤波器。典型的高斯滤波器是脉冲响应为高斯函数的滤波器(如下图为高斯脉冲响应)
时阈上的高斯函数在频阈上仍是高斯函数,因此该滤波器的频率响应非常窄。当输入信号通过此类滤波器时,与不涉及滤波的 FSK 方案相比,所得到的滤波信号的频谱宽度会减小。因此,FSK 中频率的任何突然变化都会被滤除,这使得每个符号周期开始时的转换比 FSK 相对平滑(下图是 GFSK 信号的响应)
该滤波器的优点是降低边带功率,减少对相邻信道的干扰,但代价是增加码间干扰 (ISI)。因此,仔细设计具有最佳截止频率的高斯滤波器对于确保最小化 ISI 相关影响非常重要。此外,还可以使用其他稳健的信号处理和信道均衡技术来克服 ISI 的影响。
调制信号之前的这个滤波阶段也称为脉冲整形,因为数据脉冲被滤除以产生具有急剧上升和下降时间的干净输出信号,这有助于准确确定接收信号的载波频率。GFSK 技术非常有用,广泛用于无线系统和技术,例如改进 Layer 2 protocol,、蓝牙、IEEE 802.15.4 和 Z-wave。
2 GNU Radio GFSK 模块参数详解
GFSK Mod 的输入是字节流 byte stream,输出是基带复杂调制信号。
参数 | 意义 | 解释 |
---|---|---|
Samples/Symbol | Samples per baud >= 2 (integer) Default value = 2 |
这有个链接介绍的比较清楚 |
Sensitivity | Given to the Frequency Mod Default value = 1.0 |
Frequency Mod |
BT | Gaussian filter bandwidth * symbol time (float) Default value = 0.35 |
这有个 matlab 关于高斯滤波器的 BT 参数对滤波效果的影响文章 |
Verbose | Prints the value of bits per symbol and BT Default value = Off |
|
Log | Prints the following modulation data to .dat files: * Chunks to Symbol data is written to "nrz.dat" * Output of Gaussian filter is written to "gaussian_filter.dat" * Output of frequency modulator is written to "fmmod.dat" Default value = Off |
|
Unpack (depreciated in GNU Radio 3.8) | Unpack input byte stream? |
GFSK Demod 的输入是基带复杂调制信号,输出是 a stream of bits unpacked, 1 bit per byte (the LSB)
参数 | 意义 | 解释 |
---|---|---|
Samples/Symbol | Samples per baud >= 2 (integer) |
|
Sensitivity | Given to the Quadrature Demod |
|
Gain Mu | Controls rate of mu adjustment |
|
Mu | Fractional delay [0.0, 1.0] |
|
Omega Relative Limit | Sets max variation in omega (float, typically 0.000200 (200 ppm)) |
|
Freq Error | Bit rate error as a fraction |
|
Verbose | Print information about modulator? |
|
Log | Print modualtion data to files? (bool) |
3 GNU Radio GFSK 模块简示例
我们对 9 位长的比特流 000111011
进行 GFSK 调制,然后对其进行 GFSK 解调:
运行后效果如下:
解释:我这里采样率故意设置为 10KHz,这样在时序图中每个采样占用 0.1 MS 方便观察。从图中可以看到信号 2 和信号 3 是一致的,说明我们经过 GFSK 调制解调后数据和原来保持一致。(这里有个 delay 滑动条,用来平移原始信号,方便错开观察的,其数值的意义是延迟 n 个样本)
4 本文视频教程
参考链接
[1].什么是 GFSK 调制?
[2].Frequency-shift keying
[3].GFSK vs FSK
[4].Digital GFSK Carrier Synchronization-IEEE
[5].Samples Per Symbol
[6].FIR Gaussian Pulse-Shaping Filter Design - Matlab
[7].数字和模拟滤波器 — 示例
[8].Frequency Mod
[9].GFSK Demod
教程列表
基础教程:
- [1]. GNU Radio 系列教程(一) —— 什么是 GNU Radio
- [2]. GNU Radio 系列教程(二) —— 绘制第一个信号分析流程图
- [3]. GNU Radio 系列教程(三) —— 变量的使用
- [4]. GNU Radio 系列教程(四) —— 比特的打包与解包
- [5]. GNU Radio 系列教程(五) —— 流和向量
- [6]. GNU Radio 系列教程(六) —— 基于层创建自己的块
- [7]. GNU Radio 系列教程(七)—— 创建第一个块
- [8]. GNU Radio 系列教程(八)—— 创建能处理向量的 Python 块
- [9]. GNU Radio 系列教程(九)—— Python 块的消息传递
- [10]. GNU Radio 系列教程(十)—— Python 块的 Tags
- [11]. GNU Radio 系列教程(十一)—— 低通滤波器
- [12]. GNU Radio 系列教程(十二)—— 窄带 FM 收发系统(基于ZMQ模拟射频发送)
- [13]. GNU Radio 系列教程(十三)—— 用两个 HackRF 实现 FM 收发
- [14]. GNU Radio 系列教程(十四)—— GNU Radio 低阶到高阶用法的分水岭 ZMQ 的使用详解
- [15]. GNU Radio 系列教程(十五)—— GNU Radio GFSK 模块
综合教程:
- [1]. SDR 教程实战(一) —— 利用 GNU Radio + HackRF 做 FM 收音机
- [2]. SDR 教程实战(二) —— 利用 GNU Radio + HackRF 做蓝牙定频测试工具(超低成本)
- [3]. SDR 教程实战(三) —— 利用 GNU Radio + HackRF + WireShark 做蓝牙抓包器(超低成本)
- [4]. SDR 教程实战(四) —— 利用 GNU Radio + HackRF 手把手深入了解蓝牙协议栈(从电磁波 -> 01数据流 -> 蓝牙数据包)
- [5]. SDR 教程实战(五) —— 利用 GNU Radio + LimeSDR+ WireShark 做蓝牙抓包器(上上个视频使用 HackRF)
视频和博客
: 如果觉得不错,帮忙点个支持哈~