【硬件测试】基于FPGA的QPSK调制+软解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

目录

1.算法仿真效果

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

3.Verilog核心程序

4.开发板使用说明和如何移植不同的开发板

5.完整算法代码文件获得


1.算法仿真效果

本文是之前写的文章:

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

的硬件测试版本。

在系统在仿真版本基础上增加了ila在线数据采集模块,vio在线SNR设置模块,数据源模块。硬件ila测试结果如下:(完整代码运行后无水印):

VIO设置SNR=6db

VIO设置SNR=12db

硬件测试操作步骤可参考程序配套的操作视频。

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

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

软解调是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核心程序

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/12/12 22:31:53
// Design Name: 
// Module Name: tops_hdw
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module tops_hdw(

input i_clk,
input i_rst,
output reg [3:0] led
);
    

wire o_msgI;
wire o_msgQ;
//产生模拟测试数据
signal signal_u(
.i_clk (i_clk),
.i_rst (~i_rst),
.o_bits1(o_msgI),
.o_bits2(o_msgQ)
);

//设置SNR
wire signed[7:0]o_SNR;
vio_0 your_instance_name (
  .clk(i_clk),                // input wire clk
  .probe_out0(o_SNR)  // output wire [7 : 0] probe_out0
);

 
 
wire signed[15:0]o_Ifir_T;
wire signed[15:0]o_Qfir_T;
wire signed[15:0]o_mod_T;
wire signed[15:0]o_Nmod_T;
wire signed[31:0]o_modc_R;
wire signed[31:0]o_mods_R;
wire signed[31:0]o_Ifir_R;
wire signed[31:0]o_Qfir_R;
wire signed[31:0]o_error_num;
wire signed[31:0]o_total_num; 
wire signed[1:0]o_Ibits;
wire signed[1:0]o_Qbits;

QPSK_tops QPSK_tops_u(
.i_clk       (i_clk),
.i_rst       (~i_rst),
.i_Ibits     (o_msgI),
.i_Qbits     (o_msgQ),
.i_SNR       (o_SNR),
.o_Ifir      (o_Ifir_T),
.o_Qfir      (o_Qfir_T),
.o_mod_T     (o_mod_T),
.o_Nmod_T    (o_Nmod_T),
.o_modc      (o_modc_R),
.o_mods      (o_mods_R),
.o_rIfir     (o_Ifir_R),
.o_rQfir     (o_Qfir_R),
.o_error_num (o_error_num),
.o_total_num (o_total_num),
.o_Ibits     (o_Ibits),
.o_Qbits     (o_Qbits)
);
 
 
    
//ila篇内测试分析模块
ila_0 ila_u (
	.clk(i_clk), // input wire clk
	.probe0({ 
	        o_msgI,o_msgQ,o_SNR,//10
	        o_Ifir_T[15:6],o_Qfir_T[15:6],o_mod_T[15:6],o_Nmod_T[15:6],//40
	        o_modc_R[27:12],o_mods_R[27:12],o_Ifir_R[27:12],o_Qfir_R[27:12],//64
	        o_error_num,o_total_num,//64
            o_Ibits,o_Qbits//4
	         })
	);
endmodule
0sj_041m

4.开发板使用说明和如何移植不同的开发板

注意:硬件片内测试是指发射接收均在一个板子内完成,因此不需要定时同步模块。

在本课题中,使用的开发板是:

如果你的开发板和我的不一样,可以参考代码包中的程序移植方法进行移植:

5.完整算法代码文件获得

V

相关推荐
FakeOccupational11 小时前
fpga系列 HDL:跨时钟域同步 双触发器同步器
fpga开发
一条九漏鱼14 小时前
分频器code
fpga开发
G2突破手25914 小时前
以太网详解(五)GMII、RGMII、SGMII接口时序约束(Quartus 平台)
嵌入式硬件·fpga开发·verilog
南棱笑笑生16 小时前
20250117在Ubuntu20.04.6下安装易灵思的FPGA的刷机工具efinity-2024.2.294
fpga开发
Terasic友晶科技18 小时前
第23篇 基于ARM A9处理器用汇编语言实现中断<五>
fpga开发·汇编语言·de1-soc开发板·定时器中断周期
碎碎思19 小时前
单芯片控制多个高性能伺服电机
fpga开发
一条九漏鱼1 天前
简单组合逻辑
fpga开发
hexiaoyan8271 天前
国产化板卡设计原理图:2295-基于 JFM7K325T的半高PCIe x4双路万兆光纤收发卡
fpga开发·jfm7k325t·jfm7vx690t板卡·高速数据采集系统·光纤隔离网闸
如何学会学习?2 天前
1 使用EMIO
fpga开发·zynq·emio·zcu106·ug1244
FakeOccupational2 天前
fpga系列 HDL:Quartus II SignalTap的Create Signal Tap List File功能
fpga开发