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. 【python】【报错:pip中第三库下载成功,但是pycharm却没有显示】一步解决

    解决方案: 直接在这个目录下安装第三方库

  2. 使用halo快速搭建应用文档中心

    背景 之前我写了一篇,用gitbook搭建文档中心,gitbook是一款搭建博客的技术,是静态博客技术,不带后台管理系统.不带数据库,要发文章的话,是通过提供markdown文件,渲染成html,通过 ...

  3. Vs code创建项目教程

    1.首先,vscode本身没有新建项目的选项,所以要先创建一个空的文件夹. 2.然后打开vscode,再在vscode里面打开文件夹,这样才可以创建项目. 3.选择一个空文件夹. 4.Ctrl+shi ...

  4. 7 种查询策略教你用好 Graph RAG 探索知识图谱

    近来 NebulaGraph 社区在 LLM + Graph 和 Graph RAG 领域进行了深入的探索和分享.在 LlamaIndex 和 LangChain 中,NebulaGraph 引入了一 ...

  5. HTML中的常用的特殊字符以及所有特殊字符

    ## HTML常用特殊字符以下是HTML中常用的特殊符号及其编码: | 特殊符号 | 编码 | 描述 || --- | --- | --- || `<` | `&lt;` | 小于号 | ...

  6. Selenium浏览器属性、提取数据

    浏览器属性 在使用selenium过程中,实例化driver对象后,driver对象有一些常用的属性和方法 driver.page_source 当前标签页浏览器渲染之后的网页源代码. driver. ...

  7. python 实现一个简单的计算器

    python 实现一个简单的计算器 本文主要整合下tkinter ,实现下简单的计算器. 代码如下: #!/usr/bin/python3 # -*- coding: UTF-8 -*- " ...

  8. Ef Core花里胡哨系列(7) 使用Ef Core也能维护表架构?

    Ef Core花里胡哨系列(7) 使用Ef Core也能维护表架构? 我们这里指的并不是查询,而是利用Ef的迁移原理,生成可用的其它表架构操作的Sql. 例如你想在Ef Core里建表,并且可能程序里 ...

  9. apex的安装过程及问题解决(ModuleNotFoundError:No module named 'packaging')

    最近在复现代码时遇到了如下问题,在此记录一下问题的解决过程: 步骤一 git clone https://github.com/NVIDIA/apex.git 步骤二 cd apex 步骤三 pip ...

  10. VSCode C++开发环境配置:CMake 调试配置 launch.json

    相关内容 VSCode C++开发环境配置: LLVM clang clangd 安装 cmake sudo apt install cmake 安装 VSCode 插件 CMake CMakeToo ...