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

教程列表

基础教程:

综合教程:

视频和博客


: 如果觉得不错,帮忙点个支持哈~

[SDR] GNU Radio 系列教程(十五)—— GNU Radio GFSK 模块的更多相关文章

  1. webpack4 系列教程(十五):开发模式与webpack-dev-server

    作者按:因为教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十五):开发模式与 webpack-dev-server>原文地址.更欢迎来我的 ...

  2. Unity3D脚本中文系列教程(十五)

    http://dong2008hong.blog.163.com/blog/static/4696882720140322449780/ Unity3D脚本中文系列教程(十四) ◆ LightRend ...

  3. Spring Boot2 系列教程 (十五) | 服务端参数校验之一

    估计很多朋友都认为参数校验是客户端的职责,不关服务端的事.其实这是错误的,学过 Web 安全的都知道,客户端的验证只是第一道关卡.它的参数验证并不是安全的,一旦被有心人抓到可乘之机,他就可以有各种方法 ...

  4. Spring Boot2 系列教程(十五)定义系统启动任务的两种方式

    在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web基础中的三大组件( ...

  5. [SDR] GNU Radio 系列教程(十四) —— GNU Radio 低阶到高阶用法的分水岭 ZMQ 的使用详解

    目录 1.前言 2.ZMQ 块的类型 3.ZMQ 块的使用 4.DEMO 4.1 同一台电脑上的两个流程图 4.2 不同电脑上的两个流程图 4.3 作为 REQ/REP 服务器的 Python 程序 ...

  6. Unity3D脚本中文系列教程(十六)

    Unity3D脚本中文系列教程(十五) ◆ function OnPostprocessAudio (clip:AudioClip):void 描述:◆  function OnPostprocess ...

  7. [SDR] GNU Radio 系列教程(二) —— 绘制第一个信号分析流程图

    目录 1.前言 2.启动 GNU Radio 3.新增块 4.运行 本文视频 参考链接 1.前言 本文将介绍如何在 GNU Radio 中创建和运行第一个流程图. 2.启动 GNU Radio GNU ...

  8. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. CRL快速开发框架系列教程十(导出对象结构)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  10. 无废话ExtJs 入门教程十五[员工信息表Demo:AddUser]

    无废话ExtJs 入门教程十五[员工信息表Demo:AddUser] extjs技术交流,欢迎加群(201926085) 前面我们共介绍过10种表单组件,这些组件是我们在开发过程中最经常用到的,所以一 ...

随机推荐

  1. (Good topic)卡牌分组(3.27leetcode每日打卡)

    给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:  每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 X &g ...

  2. mysq数据库查询之分组查询

    一.什么是分组查询分组查询:将查询结果按照指定字段进行分组二.分组查询的基本语法select 查询字段 from 表名 [where 条件] group by 分组字段名 [having 条件表达式] ...

  3. 深入了解Rabbit加密技术:原理、实现与应用

    一.引言 在信息时代,数据安全愈发受到重视,加密技术作为保障信息安全的核心手段,得到了广泛的研究与应用.Rabbit加密技术作为一种新型加密方法,具有较高的安全性和便捷性.本文将对Rabbit加密技术 ...

  4. 在.net中通过自定义LoggerProvider将日志保存到数据库方法(以mysql为例)

    在.NET中,Microsoft.Extensions.Logging是一个灵活的日志库,它允许你将日志信息记录到各种不同的目标,包括数据库.在这个示例中,我将详细介绍如何使用Microsoft.Ex ...

  5. Hive SQL之表与建表

    数据类型:  建表 create database itheima; --1.创建一张表 -- 表名 --字段 名称 类型 顺序 --字段之间的分隔符 create table itheima.t_a ...

  6. Hive架构组件

    架构图 Hive组件

  7. Vue重用组件

    1.是什么? 这里主要是简单入门使用一下,复杂高阶的用法笔者暂时还没了解到 Vue重用组件是指可以被多个Vue实例重复使用的组件.这些组件可以包含自定义的状态和事件处理程序,并且可以在整个应用程序中共 ...

  8. FOJ有奖月赛-2015年11月 Problem A

    Problem A 据说题目很水 Accept: 113    Submit: 445Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem ...

  9. Javascript Ajax总结——FormData类型

    XMLHttpRequest1级只是把已有的XHR对象的实现细节描述出来.XMLHttpRequest2级进一步发展了XHR.FormData类型FormData类型,为序列化表单以及创建以表单格式相 ...

  10. MyBatis高频面试题

    1.MyBatis中使用#和$书写占位符有什么区别? 2.Hibernate 与 Mybatis区别(MyBatis与Hibernate有什么不同). 3.持久层设计要考虑的问题有哪些? 4.你用过的 ...