FSK调制解调

该文章已生成可运行项目,

1.FSK调制解调原理

1.1FSK时域信号

数字频率调制(FM)是利用载波的频率传输信息的一种调制方式,其中最简单的是二进制频移键控(2FSK)。FM分为非连续相位FSK和连续相位FSK(CPFSK),两者的区别在于码元转换时刻的载波相位是否连续。

2FSK信号波形如下图所示,信号可以看成是频载为f1和f2的两个振幅键控信号的合成,2FSK信号可表示为:
在这里插入图片描述
式中,
在这里插入图片描述
式中,A是载波振幅,Tb为数字码元周期,{bn}为所传送的数字序列。
在这里插入图片描述
相位连续的FSK信号在码元转换时刻的相位是连续的,波形如下图所示。
在这里插入图片描述
此时调频信号可以表示为:
在这里插入图片描述
式中,fc是未调载波的频率,\delta fd是频偏因子。当m(t)为归一化基带信号时,\delta fd为峰值频偏,令
在这里插入图片描述
式中,h为调制指数或频移指数。

1.2相关系数与频谱特性

设FSK信号在一个码元期间内的波形为:
在这里插入图片描述
这两个信号波形的相关系数定义为:
在这里插入图片描述
式中,
在这里插入图片描述
则带入上式有:
在这里插入图片描述
通常
在这里插入图片描述
则相关系数简化为:
在这里插入图片描述
其波形变化图如下所示:
在这里插入图片描述
从图中可以看出,两个信号的相关系数在k*pi的时候为零,也就是说它们具有正交特性。

CPFSK信号的功率谱形状直接由调制指数h确定。当h=0.5时,功率谱曲线为单峰;当h=0.715时,功率谱曲线呈现双峰;当h=1时,功率谱曲线的双峰变成了两条线状谱,且每条线状谱所占的功率都是信号功率的1/4,与离散相位2FSK信号的功率谱曲线相同;当h>1时,双峰的距离逐渐增加。

1.3非相干解调
1.3.1相乘微分型AFC环解调法

AFC环是一个负反馈系统,从电路结构上看,AFC环主要由三种结构形式,比较广泛的是相乘微分型AFC环路。其架构如下图所示:
在这里插入图片描述
如果接收信号与本振信号存在频差,则在一定时间间隔内必然存在相差,将鉴相器输出的相位误差信号微分后,得到反映频差的误差信号,此信号经环路滤波器平滑处理后,控制VCO/NCO的振荡频率向输入信号频率靠近,最终使得频差近似为零。
设输入信号
在这里插入图片描述
VCO输入信号
在这里插入图片描述

在这里插入图片描述
显然有
在这里插入图片描述
当输入信号为单载波信号时,
在这里插入图片描述
故有
在这里插入图片描述
上式反映了输入信号和VCO输出信号的频差。对于FSK信号来讲,上式即为调制信号,对其进行滤波判决,即可完成FSK信号的解调。

1.3.2包络检波解调法

2FSK信号的包络检波法解调方框图如下,可以视为由两路2ASK解调电路组成。这里的两个带通滤波器起分路作用,用以分开两路2ASK信号。上支路对应
在这里插入图片描述
下支路对应
在这里插入图片描述
经包络检测后分别取出他们的包络m1(t)和m2(t)。将两路滤波后的包络信号相减,在经过抽样判决,当判决值大于等于0时,判决为1,否则判决为0;
在这里插入图片描述

1.4相干解调原理
1.4.1最佳FSK相干解调器

最佳解调器结构如下图所示,在接收端产生一直信号s1(t)和s2(t)的波形,分别将其与输入波形y(t)在相乘器中相乘,再进行积分。在t=Tb时刻,将两积分器的结果取样,并在比较器中比较判决。因为解调器是对接收码元逐个进行处理的,故在每个码元的终止时刻,在取样之后要将积分器清零,以便接着处理下一个码元。
在这里插入图片描述
相干载波s1(t)和s2(t)通常需要采用载波锁相环路提取,位同步信号则需要专门的位同步锁相环路提取。

1.4.2易于实现的FSK相干解调器

1.4.1中的结构难以实现,通常采用下图结构实现:
在这里插入图片描述
FSK相干解调与ASK相干解调相似,FSK只是在用带通滤波器将信号分成上下两路后,在判决输出前增加一个减法器即可。

2.FSK的MATLAB仿真

2.1FSK信号产生

参数要求:非连续相位和连续相位的2FSK调制信号;调制度分别为0.5、0.7157、1、3.5;基带信号符号速率Rb=1Mbps;载波频率fc=6MHz;采样频率fs=32Rb;
源码:

ps=1*10^6;  %码速率为1MHz
N=1000;       %数据码元个数
Fs=32*10^6; %采样速率为32MHz
fc=6*10^6;  %载波频率为6MHz
Len=N*Fs/ps;

%仿真调制指数为0.5时的FSK信号
m=0.5;        %调制指数
freqsep=m*ps; %FSK信号中,两个频率之间的间隔
nsamp=Fs/ps;  %每个码元的采样点数
x = randint(N,1,2); % 产生随机数据做为数据码元
ContData = fskmod(x,2,freqsep,nsamp,Fs,'cont');       % 产生连续相位FSK调制信号的正交基带数据
DisContData = fskmod(x,2,freqsep,nsamp,Fs,'discont'); % 产生非连续相位FSK调制信号的正交基带数据
%将基带FSK信号正交上变频至6MHz中频
t=0:1/Fs:(Len-1)/Fs;
f0=cos(2*pi*fc.*t)+sin(2*pi*fc.*t)*sqrt(-1);
Contfsk=real(ContData.*f0');
DisContfsk=real(DisContData.*f0');
%计算FSK信号的幅频特性
m_ContFsk=20*log10(abs(fft(Contfsk,2048)));
m_DisFsk=20*log10(abs(fft(DisContfsk,2048)));;
m05_ContFsk=m_ContFsk-max(m_ContFsk);
m05_DisFsk=m_DisFsk-max(m_DisFsk);

%仿真调制指数为0.715时的FSK信号
m=0.715;        %调制指数
freqsep=m*ps; %FSK信号中,两个频率之间的间隔
nsamp=Fs/ps;  %每个码元的采样点数
x = randint(N,1,2); % 产生随机数据做为数据码元
ContData = fskmod(x,2,freqsep,nsamp,Fs,'cont');       % 产生连续相位FSK调制信号的正交基带数据
DisContData = fskmod(x,2,freqsep,nsamp,Fs,'discont'); % 产生非连续相位FSK调制信号的正交基带数据
%将基带FSK信号正交上变频至6MHz中频
t=0:1/Fs:(Len-1)/Fs;
f0=cos(2*pi*fc.*t)+sin(2*pi*fc.*t)*sqrt(-1);
Contfsk=real(ContData.*f0');
DisContfsk=real(DisContData.*f0');
%计算FSK信号的幅频特性
m_ContFsk=20*log10(abs(fft(Contfsk,2048)));
m_DisFsk=20*log10(abs(fft(DisContfsk,2048)));;
m07_ContFsk=m_ContFsk-max(m_ContFsk);
m07_DisFsk=m_DisFsk-max(m_DisFsk);

%仿真调制指数为0.715时的FSK信号
m=1;        %调制指数
freqsep=m*ps; %FSK信号中,两个频率之间的间隔
nsamp=Fs/ps;  %每个码元的采样点数
x = randint(N,1,2); % 产生随机数据做为数据码元
ContData = fskmod(x,2,freqsep,nsamp,Fs,'cont');       % 产生连续相位FSK调制信号的正交基带数据
DisContData = fskmod(x,2,freqsep,nsamp,Fs,'discont'); % 产生非连续相位FSK调制信号的正交基带数据
%将基带FSK信号正交上变频至6MHz中频
t=0:1/Fs:(Len-1)/Fs;
f0=cos(2*pi*fc.*t)+sin(2*pi*fc.*t)*sqrt(-1);
Contfsk=real(ContData.*f0');
DisContfsk=real(DisContData.*f0');
%计算FSK信号的幅频特性
m_ContFsk=20*log10(abs(fft(Contfsk,2048)));
m_DisFsk=20*log10(abs(fft(DisContfsk,2048)));;
m1_ContFsk=m_ContFsk-max(m_ContFsk);
m1_DisFsk=m_DisFsk-max(m_DisFsk);


%仿真调制指数为3.5时的FSK信号
m=3.5;        %调制指数
freqsep=m*ps; %FSK信号中,两个频率之间的间隔
nsamp=Fs/ps;  %每个码元的采样点数
x = randint(N,1,2); % 产生随机数据做为数据码元
ContData = fskmod(x,2,freqsep,nsamp,Fs,'cont');       % 产生连续相位FSK调制信号的正交基带数据
DisContData = fskmod(x,2,freqsep,nsamp,Fs,'discont'
本文章已经生成可运行项目
FSK(频移键控)是一种数字调制技术,通过改变载波频率来表示数字信号。其核心原理是将二进制数据(0和1)映射到两个不同的频率上,分别称为“频率1”(f1)和“频率2”(f2)。调制过程中,根据输入数据的变化,选择相应的频率作为输出信号。解调则通过检测信号的频率变化,将其还原为原始的二进制数据。 ### FSK调制原理 在2FSK调制中,二进制数据通过两个不同的频率来表示: - 当输入数据为“1”时,输出频率为f1的载波信号。 - 当输入数据为“0”时,输出频率为f2的载波信号。 实现2FSK信号调制的一种常见方法是使用两个2ASK(幅移键控)信号的叠加。具体步骤如下: 1. 输入的基带码元d(t)与频率为f1的高频正弦波相乘,生成第一个2ASK信号。 2. 输入的基带码元的反码与频率为f2的高频正弦波相乘,生成第二个2ASK信号。 3. 将这两个2ASK信号相加,得到最终的2FSK信号。 调制过程可以通过以下公式表示: $$ s(t) = d(t) \cdot \cos(2\pi f_1 t) + \overline{d(t)} \cdot \cos(2\pi f_2 t) $$ 其中,$ d(t) $ 是输入的基带码元,$ \overline{d(t)} $ 是其反码,$ f_1 $ 和 $ f_2 $ 分别是两个载波频率。 ### FSK解调原理 FSK解调的目标是从接收到的信号中恢复出原始的二进制数据。常见的解调方法包括非相干解调和相干解调。 #### 非相干解调 非相干解调不需要恢复载波信号,直接通过检测信号的频率变化来实现解调。常见的非相干解调方法包括包络检波和过零检测。 - **包络检波**:将接收到的信号通过带通滤波器分离出两个频率成分,分别进行包络检波,然后比较两个包络的幅度以判断当前频率是f1还是f2。 - **过零检测**:通过计算信号的过零点间隔来估计信号的频率,从而判断当前频率是f1还是f2。 #### 相干解调 相干解调需要恢复载波信号,并利用其相位信息进行解调。常见的相干解调方法包括锁相环(PLL)和自动频率控制(AFC)环。 - **锁相环(PLL)**:通过锁相环跟踪接收信号的频率,生成一个与输入信号同步的本地振荡信号(VCO),然后将接收信号与VCO信号混频,得到一个低频信号,该信号反映了输入信号和VCO输出信号的频差。对FSK信号而言,这个频差即为调制信号,对其进行滤波和判决即可完成解调。 - **自动频率控制(AFC)环**:AFC环根据信号的瞬时频率来解调数据。当FSK调制度较小时,区分调制数据的难度增加,解调性能会受到影响。 ### 实现方法 FSK调制解调可以通过硬件电路或软件实现。以下是一些常见的实现方法: #### 硬件实现 - **模拟电路实现**:使用模拟电路(如乘法器、滤波器、振荡器等)实现FSK调制解调。例如,使用两个振荡器分别生成f1和f2,根据输入数据选择其中一个频率作为输出。 - **数字电路实现**:使用FPGA(现场可编程门阵列)或ASIC(专用集成电路)实现FSK调制解调。例如,通过数字频率合成器(DDS)生成精确的频率,并使用数字滤波器进行解调。 #### 软件实现 - **软件无线电(SDR)**:在软件无线电系统中,FSK调制解调可以通过软件算法实现。例如,使用MATLAB或Python编写代码生成FSK信号,并通过FFT(快速傅里叶变换)进行解调。 - **嵌入式系统**:在嵌入式系统中,可以使用微控制器或DSP(数字信号处理器)实现FSK调制解调。例如,使用微控制器的PWM(脉宽调制)功能生成FSK信号,并通过软件进行解调。 ### 示例代码 以下是一个简单的Python代码示例,展示如何生成2FSK信号并进行解调: ```python import numpy as np import matplotlib.pyplot as plt from scipy.signal import fftconvolve # 参数设置 fs = 10000 # 采样率 T = 1.0 / fs # 采样间隔 t = np.arange(0, 1, T) # 时间向量 f1 = 1000 # 频率1 f2 = 2000 # 频率2 bits = [1, 0, 1, 1, 0] # 输入的二进制数据 # 生成2FSK信号 fsk_signal = np.zeros_like(t) bit_duration = len(t) // len(bits) for i, bit in enumerate(bits): start = i * bit_duration end = (i + 1) * bit_duration if bit == 1: fsk_signal[start:end] = np.cos(2 * np.pi * f1 * t[start:end]) else: fsk_signal[start:end] = np.cos(2 * np.pi * f2 * t[start:end]) # 绘制2FSK信号 plt.figure(figsize=(12, 4)) plt.plot(t, fsk_signal) plt.title("2FSK Signal") plt.xlabel("Time (s)") plt.ylabel("Amplitude") plt.grid(True) plt.show() # 解调2FSK信号 # 使用FFT进行解调 fft_result = np.fft.fft(fsk_signal) freq = np.fft.fftfreq(len(fsk_signal), T) # 找到主要频率成分 threshold = np.max(np.abs(fft_result)) * 0.1 dominant_freqs = freq[np.abs(fft_result) > threshold] print("Dominant frequencies:", dominant_freqs) # 判断每个时间段的频率 demodulated_bits = [] for i, bit in enumerate(bits): start = i * bit_duration end = (i + 1) * bit_duration segment = fsk_signal[start:end] fft_segment = np.fft.fft(segment) freq_segment = np.fft.fftfreq(len(segment), T) magnitude = np.abs(fft_segment) dominant_freq = freq_segment[np.argmax(magnitude)] if abs(dominant_freq - f1) < abs(dominant_freq - f2): demodulated_bits.append(1) else: demodulated_bits.append(0) print("Demodulated bits:", demodulated_bits) ``` ### 总结 FSK调制解调技术通过改变载波频率来表示数字信号,具有较高的抗噪声能力和简单的实现方式。调制过程中,二进制数据被映射到两个不同的频率上;解调过程中,通过检测信号的频率变化,将其还原为原始的二进制数据。FSK调制解调可以通过硬件电路或软件实现,适用于多种通信应用场景。 ---
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值