【Matlab】BFSK的调制与解调仿真
写在前面
本篇是【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\)两个频率点间变化,频移键控是利用载波的频移变化来传递数字信息的。故其表达式为:
\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进行仿真。相干解调的原理图如下图所示:
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
希望本篇随笔和姊妹篇能够对大家有所帮助~