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

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

时间:2024-12-05 21:44:34浏览次数:7  
标签:误码率 QPSK clk 解调 模块 error rst hat

1.算法仿真效果

vivado2019.2仿真结果如下(完整代码运行后无水印):

 

设置SNR=1db

 

 

 

设置SNR=5db

 

 

 

设置SNR=10db

 

 

 

和之前开发的普通QPSK调制解调系统相比,软解调误码率更低。

 

基于FPGA的QPSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR_fpga qpsk-CSDN博客

 

仿真操作步骤可参考程序配套的操作视频。

 

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

       QPSK是一种常用的调制方式,通过将两个比特映射到一个复平面上的相位点,实现了高效的信号传输。软解调是一种基于接收信号的概率估计进行解调的方法,能够提供更好的性能。本文将逐步介绍QPSK软解调的实现过程,包括信号采样、相位估计、判决和解调等方面。软解调是一种通过概率估计实现解调的方法,能够在信道噪声存在的情况下提供更好的性能。QPSK是一种常用的调制方式,通过将两个比特映射到相位点,实现了高效的信号传输。本文旨在详细介绍QPSK软解调的实现过程,包括信号采样、相位估计、判决和解调等步骤。

 

2.1 信号采样

       接收到的QPSK信号经过采样操作,得到离散时间信号序列。采样率需要满足奈奎斯特采样定理,通常为比特速率的两倍。

 

2.2 判决

       在QPSK信号解调中,判决过程用于确定每个信号符号的二进制比特值。判决过程根据接收信号的相位进行划分,将其映射到不同的比特值。

       假设接收到的信号序列为r[n],判决过程的结果为判决符号d_hat。常见的判决公式为:

if theta_hat > -pi/4 && theta_hat <= pi/4

d_hat = [1, 1]

elseif theta_hat > pi/4 && theta_hat <= 3pi/4

d_hat = [0, 1]

elseif theta_hat > 3pi/4 || theta_hat <= -3*pi/4

d_hat = [0, 0]

else

d_hat = [1, 0]

end

 

2.3 解调

         解调过程将判决的比特值转换为原始数据比特。解调过程根据映射表将判决比特值转换为原始数据比特。假设判决比特值为d_hat,解调过程的结果为解调比特d。常见的解调公式为:

if d_hat == [1, 1]

d = [0, 0]

elseif d_hat == [0, 1]

d = [0, 1]

elseif d_hat == [0, 0]

d = [1, 0]

else

d = [1, 1]

end

 

2.4 软解调

        软解调是QPSK软解调的关键步骤,它利用判决符号和相位估计的结果进行概率估计,以提高解调的准确性。假设判决符号为d_hat,软解调过程的结果为软解调符号d。常见的软解调公式为: d = d_hat / P(d_hat|r[n])

 

        其中P(d_hat|r[n])表示在接收到信号r[n]的条件下,判决符号d_hat为d_hat的概率。该概率可以通过估计信号点的概率分布函数或使用最大似然估计等方法得到。软解调过程需要进行概率估计,以提高解调的准确性。这涉及到估计信号点的概率分布函数或使用其他概率估计方法,其中噪声的影响需要被适当地考虑。

 

3.Verilog核心程序

//QPSK调制
TQPSK TQPSKU(
.i_clk  (i_clk),
.i_rst  (i_rst),
.i_Ibits(i_Ibits),
.i_Qbits(i_Qbits),
 
.o_Ifir (o_Ifir),
.o_Qfir (o_Qfir),
.o_cos  (),
.o_sin  (),
.o_modc (),
.o_mods (),
.o_mod  (o_mod_T)
);
 
//加入信道
awgns awgns_u(
    .i_clk(i_clk), 
    .i_rst(i_rst), 
    .i_SNR(i_SNR), //这个地方可以设置信噪比,数值大小从-10~50,
    .i_din(o_mod_T[30:15]+o_mod_T[31:16]), 
    .o_noise(),
    .o_dout(o_Nmod_T)
    );  
 
 
//QPSK解调
wire signed[15:0]o_b1;
wire signed[15:0]o_b2;
RQPSK RQPSKU(
.i_clk  (i_clk),
.i_clkSYM(i_clkSYM),
.i_rst  (i_rst),
.i_med  (o_Nmod_T),
.o_cos  (),
.o_sin  (),
.o_modc (o_modc),
.o_mods (o_mods),
.o_Ifir (o_rIfir),
.o_Qfir (o_rQfir),
.o_b1(o_b1),
.o_b2(o_b2)
);
    
    
 //计算误码率   
 //I,Q两路分别计算,最后统计平均值作为误码率
//error calculate
wire [31:0]w_error_num1;
wire [31:0]w_error_num2;
Error_Chech Error_Chech_u1(
    .i_clk(i_clk), 
    .i_rst(i_rst), 
    .i_trans({~i_Ibits,1'b1}), 
    .i_rec({~o_b1[15],1'b1}), 
    .o_error_num(w_error_num1), 
    .o_total_num()
    );
    
//error calculate
Error_Chech Error_Chech_u2(
    .i_clk(i_clk), 
    .i_rst(i_rst), 
    .i_trans({~i_Qbits,1'b1}), 
    .i_rec({o_b2[15],1'b1}), 
    .o_error_num(w_error_num2), 
    .o_total_num(o_total_num)
    ); 
    
assign o_error_num={w_error_num1[31],w_error_num1[31:1]} + {w_error_num2[31],w_error_num2[31:1]} ;
    
endmodule
0sj_019m

  

标签:误码率,QPSK,clk,解调,模块,error,rst,hat
From: https://www.cnblogs.com/51matlab/p/18589469

相关文章

  • 编译windows版本的nginx1.26.2版本,并且增加rtmp模块
    参考文章:1、https://blog.csdn.net/weixin_42262872/article/details/134404778?ops_request_misc=&request_id=&biz_id=102&utm_term=windows%20%E7%BC%96%E8%AF%91%20nginx%20%E5%B9%B6%E6%B7%BB%E5%8A%A0rtmp%E6%A8%A1%E5%9D%97&utm_medium=distribute.pc_sear......
  • Docker:Docker搭建Jenkins并共用宿主机Docker部署服务(五)跨服务器远程部署后端微服务多
    前言继续完成跨服务器远程部署微服务多模块,Jenkins的搭建与插件安装可以观看上一篇文章:https://www.cnblogs.com/nhdlb/p/18561435配置SSH远程服务器连接这里需要安装SSH连接的插件,可以观看上一篇文章进行安装。开始配置SSH连接保存!!新建视图方便将整个项目的前端和后......
  • XD6500S— LoRa SIP模块芯片 集成了射频前端和LoRa射
    XD6500S是一系列LoRaSIP模块,集成了射频前端和LoRa射频收发器SX1262系列,支持LoRa和FSK调制。收发器SX1262系列,支持LoRa和FSK调制。LoRa技术是一种扩频协议,针对LPWAN应用的低数据速率、超远距离和超低功耗通信进行了优化。通信进行了优化。XD6500S的主动接收电流消耗为4.2mA,电池寿......
  • 汽车电子----开关(霍尔模块)
    汽车电子中开关类项目需要霍尔芯片来采集角度,霍尔芯片可以用在方向盘的组合开关上,采集左右拨杆的角度,也可以用来采集方向盘的角度。霍尔芯片型号有多种,至于芯片选型就看自己公司的需求了。霍尔芯片的工作原理如下,可以做一个宏观的了解:霍尔芯片是一种利用霍尔效应工作的磁敏......
  • Springboot封装通用AI模块实现平台智能化(封装和使用AI详细教程)
    目录国内支持SDK调用的优秀开源AI平台导入依赖获取APIkey(注意保密)测试Demo封装通用AI模块application.yml配置APIkey定义AI配置类封装通用的AI请求模块使用AI赋能项目设计Prompt的常用技巧技巧一 定义SystemPrompt技巧二 让AI 进行角色扮演技巧三 提......
  • (即插即用模块-Convolution部分) 四、(2023) RefConv 重参数化重聚焦卷积
    文章目录1、Re-parameterizedRefocusingConvolution2、代码实现paper:RefConv:Re-parameterizedRefocusingConvolutionforPowerfulConvNetsCode:https://github.com/Aiolus-X/RefConv1、Re-parameterizedRefocusingConvolution论文首先分析了传统卷积......
  • BurpSuite之proxy模块及一些BP测试技巧
    学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章。笔记只是方便学习,以下内容只涉及学习内容,切莫逾越法律红线。安全见闻,包含了各种网络安全,网络技术,旨在明白自己的渺小,知识的广博,要时时刻刻保持平等的心,很多分类组合有互相包含也属于正常情况,遇到问题就能够举一反三。视......
  • Python Tkinter 模块
    Python支持多种图形界面的第三方库,包括TkQtwxWidgets…Python提供的Tkinter模块,就是TkGUI工具包的接口。TkinterTk是图形库,支持多种操作系统,使用Tcl语言开发;Tk会调用操作系统提供的本地GUI接口,完成最终的GUI。所以代码实现的只需要调用Tkin......
  • 请说说commonJS模块与ES模块的差异有哪些?
    CommonJS模块和ES模块是JavaScript中两种不同的模块系统,它们在语法、执行时机、动态导入等方面存在显著差异。1.语法:CommonJS:使用require()同步加载模块,使用module.exports或exports导出模块成员。//模块Aconstadd=(a,b)=>a+b;module.exports={......
  • itertools 模块学习
    1.创建无限循环迭代对象:count,cycle,repeatfromitertoolsimportcountforiincount(1,2):ifi>10:breakprint(i)#以1开始,2为步长,无限range结果:13579fromitertoolsimportcyclecolors=cycle(['red','green','blue�......