写在前面

本篇是【Matlab】BASK的调制与解调仿真的下篇,考虑到阅读体验,故另开一篇分享将BFSK的调制与解调仿真。

索引

  • 写在前面
  • 一、BFSK的调制
    • 1.1 异频载波生成
    • 1.2 信号合并
    • 1.3 波形预览
    • 1.4 参数设置(参考)
  • 二、BFSK的解调
    • 2.1 模型搭建
    • 2.2 波形预览
    • 2.3 参数设置(参考)
  • 三、常见问题
  • 写在最后

一、BFSK的调制

一个FSK信号可以看成是两个不同载波的BASK信号的叠加,BFSK信号的频谱可以看成是\(f_1\)和\(f_2\)两个BASK频谱的组合。

频移键控是利用载波的频率来传递数字信号,在BFSK中,载波的频率随着二进制基带信号在\(f_1\)和\(f_2\)两个频率点间变化,频移键控是利用载波的频移变化来传递数字信息的。故其表达式为:

\[e_{BFSK}(t)=
\begin{cases}
A\cos{(\omega_1t+\phi_n)}\\
A\cos{(\omega_2t+\theta_n)}\\
\end{cases}
\]

BFSK的调制方式有两种,即模拟调频法和键控法。本篇使用键控法,通过Simulink进行仿真。键控法的原理图如下图所示:


下面我们使用Matlab/Simulink进行模型的分步实现。

1.1 异频载波生成

根据BFSK信号表达式可知,我们需要准备两个不同频率的载波。为了生成异频载波,我们将BASK调制模型中的Signal Geneator替换成Sine Wave。另外,为了体现01信号的特点,需要使曼彻斯特码的其中一个通道经过非门NOT,再通过乘法器。


上图中,通过Product 0b生成的信号代表二进制0的载波,通过Product 1b生成的信号代表二进制1的载波。Scope的波形图如下图所示:

1.2 信号合并

观察1.1中的波形图,我们很容易的得出一个结论:BFSK调制信号由0编码BFSK调制信号和1编码BFSK调制信号加和而得。因此我们让两个异频载波经过Sum即可得到完整的BFSK调制信号。

为了模型的可视性,我将0编码BFSK调制信号和1编码BFSK调制信号进行封装。

1.3 波形预览

使用Scope模块,我们可以观察到各个阶段中信号的波形。将曼彻斯特码和BFSK调制信号连接到示波器,我们可以观察到下图:

1.4 参数设置(参考)

我们可以调节各模块的参数来控制BFSK调制信号的形状,下面给出各模块的参考参数:

模块名 参数 设置值
Pulse Generator Period (secs) 1
Pulse Width (% of period) 50
Sine Wave 0b Frequency (rad/sec) 12*pi
Sine Wave 1b Frequency (rad/sec) 24*pi

注:未列出的模块参数按默认处理。


二、BFSK的调制

BFSK的解调方式有两种,即相干解调和非相干解调。本篇使用相干解调,通过Simulink进行仿真。相干解调的原理图如下图所示:

graph LR
Input["BFSK信号输入"]
BandpassFilter0b["带通滤波器0b"]
BandpassFilter1b["带通滤波器1b"]
Product1["相乘器"]
Product2["相乘器"]
LowpassFilter1["低通滤波器"]
LowpassFilter2["低通滤波器"]
SamplingDecimator["抽样判决器"]
SamplingPulse["抽样脉冲"]
Cosine0b["Cosine Wave 0b"]
Cosine1b["Cosine Wave 1b"]
Output["BFSK解调信号输出"]

Input --> BandpassFilter0b --> Product1 --> LowpassFilter1 --> SamplingDecimator --> Output
Input --> BandpassFilter1b --> Product2 --> LowpassFilter2 --> SamplingDecimator
SamplingPulse --> SamplingDecimator
Cosine0b --> Product1
Cosine1b --> Product2

下面我们使用Matlab/Simulink进行模型的分步实现。

2.1 模型搭建

在Simulink中,我们可以用Analog Filter Design来代替带通滤波器和低通滤波器,用Sine Wave输出同频解调载波,用GreaterThanOrEqual代替抽样判决器和抽样脉冲。具体模型如下:

2.2 波形预览

使用Scope模块,我们可以观察到各个阶段中信号的波形。将曼彻斯特码、BFSK调制信号和BFSK解调信号连接到示波器,我们可以观察到下图:

2.3 参数设置(参考)

下面给出各模块的参考参数:

模块名 自定义名称 参数 设置值
Analog Filter Design Bandpass Filter 0b Filter type Bandpass
Lower passband edge frequency (rad/s) 12*pi-20
Upper passband edge frequency (rad/s) 12*pi+20
Bandpass Filter 1b Filter type Bandpass
Lower passband edge frequency (rad/s) 24*pi-20
Upper passband edge frequency (rad/s) 24*pi+20
Lowpass Filter 0b Passband edge frequency (rad/s) 10*pi
Lowpass Filter 1b Passband edge frequency (rad/s) 23*pi
Sine Wave Sine Wave Frequency (rad/sec) 12*pi
Sine Wave1 Frequency (rad/sec) 24*pi
GreaterThanOrEqual GreaterThanOrEqual Relational operator <

注:未列出的模块参数按默认处理。


三、常见问题

Q:仿真过程中遇到正弦波畸变(包括幅度和形状),该怎么处理?

A:若在仿真过程中遇到正弦波畸变(包括幅度和形状),可以在Simulink工程空白处右键,选择Model Configuration Parameters,进入页面后,在选项卡Solver -> Solver details中进行如下参数设置:

参数 设置值
Max step size 1e-5
Relative tolerance 1e-5

.


写在最后

这几周实在是太忙啦,隔了一天才把这一篇写完,不过还是赶在周四前写好了Orz

希望本篇随笔和姊妹篇能够对大家有所帮助~

【Matlab】BFSK的调制与解调仿真的更多相关文章

  1. DVB-C系统中QAM调制与解调仿真

    本文简单记录一下自己学习<通信原理>的时候调试的一个仿真DVB-C(Cable,数字有线电视)系统中QAM调制和解调的程序.自己一直是研究"信源"方面的东西,所以对&q ...

  2. MATLAB基本使用及SIMULINK建模仿真实验

    MATLAB基本使用及SIMULINK建模仿真实验 这是我总结的操作方法: 1 )  M脚本文件的编写 1.新建M-file: 2.输入指令: 3.保存(注意:保存路径需要与工作路径一致) 2 )在S ...

  3. 5G 调制与解调

    调制,就是将原始信号转换为适合在信道中传输的形式的一种过程,在无线通信中,调制一般均指载波调制,而解调则是调制的逆过程,即将原始信号从已调信号中恢复出来. 进行载波调制,主要为实现以下目标: 1)在无 ...

  4. 【Matlab】BASK的调试与解调仿真

    索引 一.BASK的调制 1.1 曼彻斯特码 1.2 增益控制 1.3 常量求和 1.4 与载波相乘 1.5 波形预览 1.6 参数设置(参考) 二.BASK的解调 2.1 滤波 2.2 信号比较 2 ...

  5. <转载>调制与解调电路详解

    原文链接:http://www.elecfans.com/analog/20120509270848_4.html 调幅和检波电路 广播和无线电通信是利用调制技术把低频声音信号加到高频信号上发射出去的 ...

  6. 基于MATLAB的单级倒立摆仿真

    有关代码及word文档请关注公众号“浮光倾云”,后台回复A010.02即可获取 一.单级倒立摆概述 倒立摆是处于倒置不稳定状态,人为控制使其处于动态平衡的一种摆,是一类典型的快速.多变量.非线性.强耦 ...

  7. MATLAB应用专题part2-电力电子仿真技术

    有匪君子,如切如磋,如琢如磨. --<诗经·卫风·淇奥> 这篇博客知识我记录一下我在仿真学习中积累到的知识和遇到的坑. 第一部分:知识部分 1.为什么电阻与电感串联电路中电流的波形比电压的 ...

  8. MATLAB应用专题part1-电力电子仿真技术

    士不可以不弘毅,任重而道远.仁以为己任,不亦重乎?死而后已,不亦远乎?  --曾参 C语言系列需要过一段时间才能更新了.这些天学习C语言我感觉有点崩溃了,所以我先开另外一个专题-matlab应用专题. ...

  9. MATLAB设计模糊控制器并用simulink仿真

    一.设计模糊控制器1.1 创建项目文件夹在此路径如图 1.2 打开MATLAB打开MATLAB R2012a切换当前目录为上一步路径,如图 1.3 设计模糊控制器打开模糊控制器设计对话框 根据模糊控制 ...

随机推荐

  1. 《Selenium自动化测试实战:基于Python》之 Python与Selenium环境的搭建

    第2章  Python与Selenium环境的搭建 购买链接:  京东:https://item.jd.com/13123910.html  当当:http://product.dangdang.co ...

  2. Typora的MarkDown语法快捷键

    Typora的MarkDown语法快捷键 1.标题 项目 快捷键一 快捷键二 一级标题 #+空格+文本+回车 Ctrl+1 二级标题 ##+空格+文本+回车 ctrl+2 三级-- ###-- ctr ...

  3. golang 性能调优分析工具 pprof(下)

    golang 性能调优分析工具 pprof(上)篇, 这是下篇. 四.net/http/pprof 4.1 代码例子 1 go version go1.13.9 把上面的程序例子稍微改动下,命名为 d ...

  4. java例题_04 分解质因数

    1 /*4 [程序 4 分解质因数] 2 题目:将一个大于 2 正整数分解质因数.例如:输入 3, 3=3, 输入 6, 6=2*3,输入 90, 90=2*3*3*5. 3 程序分析:对 n 进行分 ...

  5. 【linux】驱动-9-设备树插件

    目录 前言 9. Linux设备树插件 9.1 格式 9.2 设备树插件的编译和加载 9.2.1 单独使用dtc工具编译 9.2.2 内核dtc工具编译设备树插件 9.2.3 加载设备树插件 9.2. ...

  6. Ansible-Playbook中的变量使用

    变量名:仅能由字母.数字和下划线组成,且只能以字母开头 变量来源: 1.ansible all -m setup 远程主机的所有变量都可直接调用 #显示所有变量 ansible all -m setu ...

  7. 翻译:《实用的Python编程》07_04_Function_decorators

    目录 | 上一节 (7.3 返回函数) | 下一节 (7.5 装饰方法) 7.4 函数装饰器 本节介绍装饰器(decorator).因为这是一个高级主题,所以我们只做简单介绍. 译注:根据译者个人的猜 ...

  8. EFCore3.1+编写自定义的EF.Functions扩展方法

    前言 本文主要是讲解EF Core3.0+ 如何实现自定义的数据库扩展函数 虽然EF.Functions 提供了很多数据库函数,但是并不全面.比如加密解密.. 这样的话 我们就需要自己扩展这些数据库函 ...

  9. (文字版)Qt信号槽源码剖析(三)

    大家好,我是IT文艺男,来自一线大厂的一线程序员 上节视频给大家讲解了Qt信号槽的Qt宏展开推导:今天接着深入分析,进入Qt信号槽源码剖析系列的第三节视频. Qt信号槽宏推导归纳 #define si ...

  10. 「HTML+CSS」--自定义加载动画【016】

    前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...