【硬件测试】基于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

相关推荐
浩子智控2 天前
电子设备DevOps
fpga开发
cycf3 天前
CRC校验
fpga开发
landyjzlai3 天前
AMBA总线(15)关于AXI-stream(sg模式)
arm开发·fpga开发·amba
白狐_7983 天前
Quartus Prime 新手完全使用指南
fpga开发
Aaron15883 天前
三种主流接收机架构(超外差、零中频、射频直采)对比及发展趋势浅析
c语言·人工智能·算法·fpga开发·架构·硬件架构·信号处理
博览鸿蒙3 天前
一颗数字系统是如何在 FPGA 上“跑起来”的?
fpga开发
雨洛lhw3 天前
FPGA JTAG接口设计全解析
fpga开发·jtag
minglie14 天前
iverilog 配合 Makefile 搭建 Verilog 仿真工程
fpga开发
芒果树技术4 天前
MangoTree案例分享:基于AtomRIO FPGA平台,客户实现自适应主动减振
测试工具·fpga开发·模块测试
雨洛lhw4 天前
按键电路设计的细节
fpga开发