# 频移键控（FSK）用Python解释

{% tabs %}
{% tab title="关键词" %}
频移键控 | Python | 压控振荡器 | 微分器 | 数学 | 包络检测器 | 过滤 | Numpy | Matplotlib | scipy | 低通淈波器
{% endtab %}

{% tab title="梗概" %}
本文将介绍FSK的一些背景知识，并演示如何在Python中编写模拟器。

### 频移键控背景

频移键控（FSK）的目的是调制数字信号，以便可以无线传输。流行的无线标准蓝牙使用略微修改的FSK形式，称为高斯FSK。本文将重点介绍二进制FSK，它使用两个频率值来表示二进制值1和0.数据被转换为这些频率，传输，然后解调。有许多方法/电路来调制和解调FSK信号。本文将重点介绍一种比较可行的方法。

本文中建模的发射器将基于数据值创建两个不同的频率，使用合成器或压控振荡器（VCO）在电路中实现。

本文中使用的接收器借用了模拟FM的概念。通过将频率变化转换为幅度变化来解调FM。然后，可以使用解调幅度调制（AM）的技术。接收器将使用微分器将频率转换为幅度，然后使用包络检测器+低通滤波器来移除载波频率并保留数据。再使用数据限幅器将模拟值转换为数字信号。

该过程可以通过以下等式在数学上表示。

### VCO

VCO将数字信号转换为两个不同的频率，表示为 fC+ fdev和 fC- fdev。

### 噪声通道

由空中传输信号将引入噪声。通过添加项n（t）来模拟该噪声。如果噪声变得太强，或者信号的幅度变得太弱，则无法解调数据。

### 微分器

#### VCO

下一部分将位流转换为正弦波，其频率取决于该位是1还是0.原始位流必须扩展以匹配模拟的采样频率。VCO的输出如下所示。请注意频率的变化取决于发送的位。

#### 噪声信道

下一部分通过向发送信号添加正态分布值来模拟噪声信道。本例中的代码设置的噪声幅度为0.1，这样可以产生\~14dB的信噪比。请注意时域中的噪声会破坏以下图中的信号。

#### 微分器，包络检测器和低通滤波器

这种差异很简单，只是一个离散的差异函数。包络检测使用希尔伯特变换完成。最后，使用截止频率为2 \*比特率的100抽头FIR滤波器对信号进行低通滤波。这是一个相当极端的过滤器，特别是如果它将用于嵌入式系统。可以通过使截止频率更接近比特率并根据需要使用更少的抽头来优化滤波器。在下面的图中，过滤的数据在未过滤的数据之上绘制，以证明信号转换的深远影响。

限幅器限幅器取整个滤波信号的平均值，并将其用作判定阈值，以确定位是1还是0.该位决定是在位周期的中心完成的。结果保存到数组并与原始数据进行比较以查找位错误。位错误百分比将打印到控制台。

#### 结果

在信噪比非常小之前，不会开始发生误码。作为示例，变量A\_n变为0.45，这产生\~2dB的SNR。在这个级别中，在64位中，只发现一个是错误。以下是一些图表，展示了信号在此SNR值下的噪声。

#### 带噪声的传输信号

#### 收到后的曲线
{% endtab %}
{% endtabs %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}
