写在前面

本篇是【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. Centos7 Firewall 使用笔记

    在 Centos 7 中防火墙由 firewalld 来管理,而不是以前的 iptables. 记录一下常用操作备查 firewall-cmd 操作 firewall-cmd --state 查看防火 ...

  2. [Azure Devops] 使用 Azure Boards 管理工作

    1. 什么是 Azure Boards 通过 Azure Boards 网络服务,团队可以管理其软件项目.它提供了丰富的功能,包括 Scrum 和看板的本地支持.可定制的仪表板和集成报告.这些工具可以 ...

  3. 10、Spring教程之整合MyBatis

    1.步骤 1.导入相关jar包 junit <dependency> <groupId>junit</groupId> <artifactId>juni ...

  4. 数据表设计之主键自增、UUID或联合主键

    最近在做数据库设计的时候(以MySQL为主),遇到不少困惑,因为之前做数据库表设计,基本上主键都是使用自增的形式,最近因为这种做法,被领导指出存在一些不足,于是我想搞明白哪里不足. 一.MySQL为什 ...

  5. 生产中常用的获取IP地址方法的总结

    从ifconfig命令的结果中筛选出除了lo网卡之外的所有IPv4地址 centos7 (1)ifconfig | awk '/inet / && !($2 ~ /^127/){pri ...

  6. Kafka 消息存储机制

    Kafka 消息以 Partition 作为存储单元,那么在 Partition 内消息是以什么样的格式存储的呢,如何处理 Partition 中的消息,又有哪些安全策略来保证消息不会丢失呢,这一篇我 ...

  7. SQLlite实现增删查改

    activity_main.xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android ...

  8. 15. Vue2.4+新增属性.sync

    .sync 在vue2.4以前,父组件向子组件传值用props:子组件不能直接更改父组件传入的值,需要通过$emit触发自定义事件,通知父组件改变后的值. 父组件: <template> ...

  9. JavaCV 视频滤镜(LOGO、滚动字幕、画中画、NxN宫格)

    其实,在JavaCV中除了FFmpegFrameGrabber和FFmpegFrameRecorder之外,还有一个重要的类,那就是FFmpegFrameFilter. FFmpegFrameFilt ...

  10. C语言小知识(基于Linux)——个人笔记,不定时更新

    一.switch case语法,在case中定义变量时,需要在case的有效范围内使用花括号包起来,否则会编译报错: switch (name){ case "zhangSan": ...