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. C#不用正则校验密码(附赠正则表达式)

    群聊 群友A问:有没有方法可以判断字符串里面带不带标点符号啊? 群友B问:需求是什么? 群友A说:想要密码校验,网上大部分都是正则. 群友A说:密码规则是包含大小写和数字.特殊符号,还有Length& ...

  2. 1. Linux 软件介绍

    重点: rpm -i -e -qi -ql -qf -qa --scripts. yum install remove info list repolist provides. 配置系统源. 搭建私有 ...

  3. JSON多层嵌套复杂结构数据扁平化处理转为行列数据

    背景 公司的中台产品,需要对外部API接口返回的JSON数据进行采集入湖,有时候外部API接口返回的JSON数据层级嵌套比较深,举个栗子: 上述的JSON数据中,最外层为请求返回对象,data里面包含 ...

  4. 开发必备工具、插件【ME】

    工欲善其事,必先利其器,记录自己开发中常用的工具.插件:  慢慢更新... 一.必备 1.Visual Studio.IntelliJ IDEA .Sublime Text 3 2.TeamViewe ...

  5. Apache POI 操作Excel简单入门使用

    Apache POI简介 开发中经常会涉及到excel的处理,如导出Excel,导入Excel到数据库中,操作Excel目前有两个框架,一个是apache 的poi, 另一个是 Java Excel ...

  6. HDU 1108

    Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  7. vmware虚拟机 linux 本地yum源,网卡配置ens33,防火墙selinux

    1.挂载镜像文件,CentOS-7-x86_64-DVD-1804.iso,并且要处于连接状态 #光盘挂载至/mntmount /dev/sr0 /mnt #备份yum源文件cd /etc/yum.r ...

  8. WPF中 ContextMenu 寻找父物体的一种方案

    据了解 ContextMenu 在WPF中实际是以类似于WIndow的呈现方式,所以 ContextMenu 在当前页面的 Visualtree 中是找不到的. 当在Listbox中需要传递当前选中项 ...

  9. java注释、变量、数据类型和运算符

    注释 单行注释:// 多行注释:/*开头,*/结尾 JavaDoc注释:/**开头,*/结尾 快捷键:ctrl + ? 变量 第一步:声明变量.即根据数据类型在内存分配空间. 第二步:赋值.即将数据的 ...

  10. HTML之元素相对页面(视口)左上角的绝对坐标

    目录 一. 绝对位置 二. 相对位置 一. 绝对位置 网页元素的绝对位置,指该元素的左上角相对于整张网页左上角的坐标.无论网页滚动条如何滚动,它都是不会变化的. // 获取元素的绝对位置坐标(相对于页 ...