目录
FSK(Frequency Shift Keying)和PCM(Pulse Code Modulation)是两种常见的数字信号调制和编码方法。FSK是一种基于频率的数字调制方法,它利用不同的频率表示不同的二进制信息。FSK的原理是将二进制信息转换为对应的频率,然后将这些频率转换成的波形发送出去。接收端接收到波形后,再将其转换回二进制信息。
1. 8FSK调制原理
8FSK(8 - level Frequency - Shift Keying)是一种数字调制方式,它通过改变载波的频率来传输数字信息。在 8FSK 中,数字信息被映射到 8 个不同的频率上。
2.8FSK 解调原理
2.1 相干解调
相干解调需要使用与载波同频同相的参考信号。通过将接收到的FSK信号与两个参考信号(频率为f1和f2)分别相乘,然后经过低通滤波器滤除高频成分,可以得到两个基带信号。通过比较这两个基带信号的幅度或相位差异,可以判断接收到的数字信息是“1”还是“0”。相干解调具有较高的性能,但要求严格的同步和相位匹配。相干检测的具体解调电路是同步检波器。相干解调需要本地产生与发送端同频同相的载波信号。
2.2 非相干解调
非相干解调不需要与载波同频同相的参考信号,因此实现起来更为简单。常见的非相干解调方法有鉴频器法、过零检测法和差分检测法等。这些方法都是基于检测FSK信号频率变化来实现解调的。例如,鉴频器法通过检测FSK信号的瞬时频率变化并将其转换为幅度变化来恢复基带信号;过零检测法通过检测FSK信号过零点的数量或间隔来判断数字信息;差分检测法则利用相邻码元之间的频率变化来恢复基带信号。非相干解调的性能略低于相干解调,但在许多实际应用中仍然被广泛使用。
3.MATLAB程序
37--------------------------------------------------------
% FSK
sa0 = sin(2*pi*f1*t); % 生成载波信号(对应比特1)
sa1 = sin(2*pi*f2*t); % 生成零信号(对应比特0)
sa2 = sin(2*pi*f3*t); % 生成载波信号(对应比特1)
sa3 = sin(2*pi*f4*t); % 生成零信号(对应比特0)
sa4 = sin(2*pi*f5*t); % 生成载波信号(对应比特1)
sa5 = sin(2*pi*f6*t); % 生成零信号(对应比特0)
sa6 = sin(2*pi*f7*t); % 生成载波信号(对应比特1)
sa7 = sin(2*pi*f8*t); % 生成零信号(对应比特0)
figure % 创建图形窗口
subplot(5,4,1) % 创建3行1列的子图,并定位到第一个
plot(Ydemod1,'b','linewidth',1) % 绘制ASK调制信号
title('8FSK解调'); % 设置标题
grid on % 打开网格
subplot(5,4,2) % 定位到第二个子图
plot(Ydemod2,'b','linewidth',1) % 绘制载波信号
title('8FSK解调'); % 设置标题
grid on % 打开网格
subplot(5,4,3) % 创建3行1列的子图,并定位到第一个
plot(Ydemod3,'b','linewidth',1) % 绘制ASK调制信号
title('8FSK解调'); % 设置标题
grid on % 打开网格
subplot(5,4,4) % 定位到第二个子图
plot(Ydemod4,'b','linewidth',1) % 绘制载波信号
title('8FSK解调'); % 设置标题
grid on % 打开网格
subplot(5,4,5) % 创建3行1列的子图,并定位到第一个
plot(Ydemod5,'b','linewidth',1) % 绘制ASK调制信号
title('8FSK解调'); % 设置标题
grid on % 打开网格
subplot(5,4,6) % 定位到第二个子图
plot(Ydemod6,'b','linewidth',1) % 绘制载波信号
title('8FSK解调'); % 设置标题
grid on % 打开网格
subplot(5,4,7) % 创建3行1列的子图,并定位到第一个
plot(Ydemod7,'b','linewidth',1) % 绘制ASK调制信号
title('8FSK解调'); % 设置标题
grid on % 打开网格
subplot(5,4,8) % 定位到第二个子图
plot(Ydemod8,'b','linewidth',1) % 绘制载波信号
title('8FSK解调'); % 设置标题
grid on % 打开网格
subplot(5,4,9) % 创建3行1列的子图,并定位到第一个
plot(yfilter1,'b','linewidth',1) % 绘制ASK调制信号
title('滤波'); % 设置标题
grid on % 打开网格
subplot(5,4,10) % 定位到第二个子图
plot(yfilter2,'b','linewidth',1) % 绘制载波信号
title('滤波'); % 设置标题
grid on % 打开网格
subplot(5,4,11) % 创建3行1列的子图,并定位到第一个
plot(yfilter3,'b','linewidth',1) % 绘制ASK调制信号
title('滤波'); % 设置标题
grid on % 打开网格
subplot(5,4,12) % 定位到第二个子图
plot(yfilter4,'b','linewidth',1) % 绘制载波信号
title('滤波'); % 设置标题
grid on % 打开网格
subplot(5,4,13) % 创建3行1列的子图,并定位到第一个
plot(yfilter5,'b','linewidth',1) % 绘制ASK调制信号
title('滤波'); % 设置标题
grid on % 打开网格
subplot(5,4,14) % 定位到第二个子图
plot(yfilter6,'b','linewidth',1) % 绘制载波信号
title('滤波'); % 设置标题
grid on % 打开网格
subplot(5,4,15) % 创建3行1列的子图,并定位到第一个
plot(yfilter7,'b','linewidth',1) % 绘制ASK调制信号
title('滤波'); % 设置标题
grid on % 打开网格
subplot(5,4,16) % 定位到第二个子图
plot(yfilter8,'b','linewidth',1) % 绘制载波信号
title('滤波'); % 设置标题
grid on % 打开网格
subplot(5,4,[17,18,19,20]) % 定位到第二个子图
stairs(yod,'b-o','linewidth',1) % 绘制载波信号
title('判决输出'); % 设置标题
grid on % 打开网格
xlim([1,Num+1])
4.仿真结果
5.完整程序下载
完整可运行代码,博主已上传至CSDN,使用版本为matlab2022a:
(本程序包含程序简要讲解和操作步骤视频)