首页 > 其他分享 >基于FPGA的4FSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR

基于FPGA的4FSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR

时间:2024-11-22 19:33:01浏览次数:1  
标签:误码率 频率 FPGA 解调 de signed 模块 output 调制

1.算法仿真效果

本课题是博主之前写的文章

 

《m基于FPGA的4FSK调制解调系统verilog实现,包含testbench测试文件》的升级

 

升级内容包含高斯信道模块,误码率统计模块,可以设置不同SNR。

 

vivado2019.2版本开发,仿真结果如下:

 

设置SNR=30

 

 

 

设置SNR=15

 

 

 

设置SNR=10

 

 

 

设置SNR=5

 

 

 

系统RTL结构如下:

 

 

2.算法涉及理论知识概要

       四频移键控(4FSK)是一种常用的数字调制方法,具有较高的频带利用率和抗干扰性能。它利用不同的频率来传输二进制数据,通常应用于无线通信和数据传输等领域。

 

2.1、原理与数学公式

       4FSK调制的基本原理是将输入的二进制数据转换为不同频率的信号,以实现数据的传输。解调则是将接收到的不同频率的信号还原为原始的二进制数据。

 

      在4FSK调制中,输入的二进制数据被分为两组,每组有两个比特。根据这两个比特的值,选择相应的频率输出。具体来说,有四个频率f1、f2、f3、f4与之对应,每个频率都代表一个二进制组合(00、01、10、11),即十进制的0,1,2,3。

 

频率选择:根据输入的比特组合选择相应的频率输出。例如,当输入为“00”时,选择频率f1;当输入为“01”时,选择频率f2;当输入为“10”时,选择频率f3;当输入为“11”时,选择频率f4。

调制信号:将选择的频率进行幅度调制,以便在传输过程中具有更好的抗干扰性能。通常采用开关键控(OOK)或脉冲幅度调制(PAM)等方法进行幅度调制。

解调信号:在接收端,根据不同频率的信号进行解调。首先通过带通滤波器将所需的频率信号提取出来,然后通过解调器将其还原为原始的二进制数据。解调方法通常采用相干解调或非相干解调。

 

2.2、FPGA实现过程

基于FPGA的4FSK调制解调系统实现过程如下:        输入数据流:首先,将输入的二进制数据流分为两组,每组两个比特。可以使用一个时钟信号来同步数据的输入。

       频率选择:根据每组两个比特的值,选择相应的频率输出。可以使用一个4输入的MUX来实现频率选择功能。根据输入的比特组合选择相应的频率输出信号。

       传输信号:将调制后的信号通过发射器发送出去。在这个过程中,可能需要添加一些滤波器和其他信号处理模块来优化传输性能。

      接收信号:在接收端,接收到信号后首先通过滤波器将所需的频率信号提取出来。这个过程可以通过FPGA上的数字滤波器实现。

解调信号:将滤波后的信号送入解调器进行解调。可以使用Verilog中的相关模块来实现解调功能。例如,通过检测脉冲信号的上升沿和下降沿来确定解调的比特值。

       通过将FPGA的高速度和并行性特点与4FSK调制解调技术相结合,可以实现高速、高效的数字通信系统。这种实现方法具有广泛的应用前景,可以应用于无线通信、数据传输、物联网等领域。

 

3.Verilog核心程序

module FSK(
input i_clk,
input i_rst,
input signed[7:0]i_SNR,
input[1:0]i_bits,
output signed[15:0]o_carrier1,
output signed[15:0]o_carrier2,
output signed[15:0]o_carrier3,
output signed[15:0]o_carrier4,
output signed[15:0]o_fsk,
output signed[15:0]o_fsk_Rn,
output  signed[31:0]o_de_fsk1,
output  signed[31:0]o_de_fsk2,
output  signed[31:0]o_de_fsk3,
output  signed[31:0]o_de_fsk4,
output [1:0]o_bits,
output signed[31:0]o_error_num,
output signed[31:0]o_total_num 
);
 
 
//调制
FSK_mod FSK_mod_u(
.i_clk     (i_clk),
.i_rst     (i_rst),
.i_bits    (i_bits),
.o_carrier1(o_carrier1),
.o_carrier2(o_carrier2),
.o_carrier3(o_carrier3),
.o_carrier4(o_carrier4),
.o_fsk     (o_fsk)
);
    
awgns awgns_u(
    .i_clk(i_clk), 
    .i_rst(i_rst), 
    .i_SNR(i_SNR), //这个地方可以设置信噪比,数值大小从-10~50,
    .i_din(o_fsk), 
    .o_noise(),
    .o_dout(o_fsk_Rn)
    );
解调//解调//解调//解调//解调//解调//解调//解调//解调//解调//解调//解调//解调
FSK_demod FSK_demod_u(
.i_clk(i_clk),
.i_rst(i_rst),
.i_fsk(o_fsk_Rn),
.o_de_fsk1(o_de_fsk1),
.o_de_fsk2(o_de_fsk2),
.o_de_fsk3(o_de_fsk3),
.o_de_fsk4(o_de_fsk4),
.o_de_ffsk1(),
.o_de_ffsk2(),
.o_de_ffsk3(),
.o_de_ffsk4(),
.o_bits(o_bits)
);
    
    
//error calculate
Error_Chech Error_Chech_u(
    .i_clk(i_clk), 
    .i_rst(i_rst), 
    .i_trans(i_bits), 
    .i_rec(o_bits), 
    .o_error_num(o_error_num), 
    .o_total_num(o_total_num)
    );
     
 
endmodule

  

标签:误码率,频率,FPGA,解调,de,signed,模块,output,调制
From: https://www.cnblogs.com/51matlab/p/18563551

相关文章

  • YOLOv11融合针对去雾场景的DEA-Net中的细节增强注意力模块及相关改进思路
     YOLOv11v10v8使用教程:  YOLOv11入门到入土使用教程YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《DEA-Net:Singleimagedehazingbasedondetail-enhancedconvolutionandcontent-guidedattention》一、模块介绍    论文链接:https://arxiv.org......
  • day07(单片机高级)继电器模块绘制
    目录继电器模块绘制原理图布局添加板框布线按tab修改线宽度布线换层泪滴铺铜铺铜的作用铺铜的使用规范添加丝印步骤总结继电器模块绘制到淘宝找一个继电器模块继电器模块的使用(超详细)_继电器模块工作原理-CSDN博客文章浏览阅读4.8w次,点赞116次,收藏464......
  • JSON和pickle模块
    JSON和pickle区别在于:JSON不能转换函数类等,但pickle可以进行转换,并且pickle也支持字典、列表等类型JSON格式可以全语言通用方便阅读查看,pickle格式只支持python使用importjsondata={"name":123}#把字典转成JSON格式写入文件f=open("json_text","w")f.writ......
  • SAP S/4HANA Cloud模块功能详解:开启企业数字化转型新篇章
    在数字化转型浪潮的推动下,企业纷纷寻求高效、灵活且可扩展的解决方案,以应对日益复杂的市场环境。SAPS/4HANACloud作为SAP公司推出的云端ERP(企业资源规划)解决方案,凭借其强大的功能和云技术的结合,成为了众多企业数字化转型的首选。本文将深入探讨SAPS/4HANACloud的几大核心模块......
  • FPGA 第12讲 阻塞赋值和非阻塞赋值
    时间:2024.11.19一、学习内容1.阻塞赋值   阻塞赋值的赋值号用“=”表示。   对应的电路结构往往与触发沿没有关系,只与输入电平的变化有关系。阻塞赋值的操作可以认为是只有一个步骤的操作,即计算赋值号右边的语句并更新赋值号左边的语句,此时不允许有来自任何其......
  • 一分钟带你了解FPGA
    FPGA(Field-ProgrammableGateArray)即现场可编程门阵列,是一种在PAL(可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。1、内部结构特点   FPGA主要由可编程逻辑单元(CLB,ConfigurableLogicBlock)、输入输出单元(IOB,Input/OutputBlock)和可编程互......
  • SpringBoot3+Vue3+AntDesign单体多模块项目实践 | 小蚂蚁云
     项目介绍基于SpringBoot3、SpringSecurity、MybatisPlus、Vue3、TypeScript、Vite、AntDesign、MySQL等技术栈实现的单体前后端分离后台管理系统;后端基于Java语言采用SpringBoot3、SpringSecurity、MybatisPlus、MySQL等主流技术栈,前端基于Vue3、TypeScript、Vite等技术栈实......
  • 1(6)FPGA常用电平标准介绍、LVDS供电注意事项
    常用电平标准介绍在上节课例程中输出一个差分信号在原语中找到OBUFDS(控制差分信号输出的原语)硬核,在硬件电路上将器件做好的打开综合设计,可以看到只有一个o_led_p,因为他自动识别到是一个差分信号;为其分配LVDS2.5的电平电平标准总览LVDS供电事项......
  • 电源模块的使用方法 IN和OUT说明 SMP15-35W系列
    电源模块的使用方法IN和OUT说明SMP15-35W系列电源是整个电路可靠工作的核心部分。由于电源电路电流及发热量大,容易出现故障。今天为大家介绍电源的使用方法,BOSHDIA电源模块将电源电路全部集成到一个很小的PCB上,从而实现输出稳定电压及大电流的模块。电源模块可直接贴装在印刷......
  • QT 3D模块性能优化
    QT3D模块性能优化使用AI技术辅助生成QT界面美化视频课程QT性能优化视频课程QT原理与源码分析视频课程QTQMLC++扩展开发视频课程免费QT视频课程您可以看免费1000+个QT技术视频免费QT视频课程QT统计图和QT数据可视化视频免费看免费QT视频课程QT性能优化视频免费......