首页 > 其他分享 >m基于FPGA的8PSK调制解调系统verilog实现,包含testbench测试文件

m基于FPGA的8PSK调制解调系统verilog实现,包含testbench测试文件

时间:2023-12-07 14:34:08浏览次数:34  
标签:wire FPGA signed dat b0 verilog testbench 160 8PSK

1.算法仿真效果

vivado仿真结果如下:

 

 

 

借助matlab看8PSK的星座图:

 

 

 

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

        随着通信技术的不断发展,相位调制技术因其高频谱效率和抗干扰能力而广泛应用于无线通信系统中。其中,8PSK(8相位相移键控)作为一种高阶调制方式,具有更高的频谱效率和更强的抗干扰能力,因此备受关注。然而,8PSK调制解调的实现复杂度较高,需要高效的数字信号处理技术。现场可编程门阵列(FPGA)作为一种可编程逻辑器件,具有高度的灵活性和并行处理能力,非常适合实现复杂的数字信号处理算法。

 

2.1 8PSK调制原理

       8PSK调制是一种相位调制方式,其基本原理是通过改变载波的相位来传递信息。在8PSK中,一个符号周期内的相位变化有8种可能的状态,分别对应3个比特的信息。因此,8PSK调制可以看作是一种将3个比特映射到一个符号的映射方式。具体地,假设输入的比特序列为b2b1b0,则对应的8PSK符号可以表示为:

 

        S(t)=Acos(2πfct+θk) (1)

 

        其中,A是载波的振幅,fc是载波的频率,θk是第k个符号的相位,k=0,1,...,7。θk的取值由输入的比特序列b2b1b0决定,具体的映射关系如表1所示。

 

表1:8PSK映射关系

 

 

 

其星座图如下所示:

 

 

 

2.2 基于FPGA的8PSK调制解调器设计和实现

         FPGA是一种可编程逻辑器件,其内部包含大量的可编程逻辑单元和存储单元,可以根据用户的需要进行灵活配置。FPGA具有以下优点:

 

(1)高度的灵活性:FPGA可以根据用户的需要重新配置逻辑电路,实现不同的功能。这种灵活性使得FPGA可以适应各种复杂的通信系统和算法需求。

(2)并行处理能力:FPGA内部的逻辑单元可以并行工作,同时处理多个数据。这种并行处理能力使得FPGA可以高效地实现复杂的数字信号处理算法。

(3)高性能和低功耗:FPGA的逻辑单元和存储单元都采用了高性能的工艺和设计,可以实现高速的数据处理和存储。同时,FPGA还具有低功耗的特点,适合用于移动通信等需要长时间工作的场景。

 

       在基于FPGA的8PSK调制解调系统中,数字信号处理算法是关键部分之一。具体地,调制器需要将输入的比特序列映射为对应的8PSK符号序列;解调器则需要从接收到的符号序列中恢复出原始的比特序列。为了实现这些功能,我们采用了以下算法:

 

(1)调制算法:根据输入的比特序列和表1中的映射关系,计算出对应的8PSK符号序列。这个过程可以通过查找表或者计算的方式实现。为了降低复杂度和提高效率,我们采用了查找表的方式实现调制算法。具体地,我们将表1中的映射关系存储在一个查找表中,然后根据输入的比特序列查找对应的8PSK符号序列。这种方式可以在保证正确性的同时降低算法的复杂度。

(2)解调算法:从接收到的符号序列中恢复出原始的比特序列是一个比较复杂的过程,我们将接收到的符号序列与一个已知的8PSK符号序列进行比较。

 

3.Verilog核心程序

 

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/05/03 06:21:37
// Design Name: 
// Module Name: TEST
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
 
 
module TEST();
 
reg i_clk;
reg i_clksample;
reg i_rst;
reg i_dat;
 
wire[2:0]o_ISET;
wire o_clk_3div;
 
wire signed[15:0]o_I8psk;
wire signed[15:0]o_Q8psk;
wire signed[15:0]o_Ifir_T;
wire signed[15:0]o_Qfir_T;
wire signed[15:0]o_cos_T;
wire signed[15:0]o_sin_T;
wire signed[31:0]o_modc_T;
wire signed[31:0]o_mods_T;
wire signed[31:0]o_mod_T;
 
wire signed[15:0]o_cos_R;
wire signed[15:0]o_sin_R;
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;
 
 
 
//DQPSK调制
T8PSK T8PSKU(
.i_clk  (i_clk),
.i_clksample(i_clksample),
.i_rst  (i_rst),
.i_dat  (i_dat),
.o_ISET (o_ISET),
.o_clk_3div(o_clk_3div),
.o_I8psk(o_I8psk),
.o_Q8psk(o_Q8psk),
.o_Ifir (o_Ifir_T),
.o_Qfir (o_Qfir_T),
.o_cos  (o_cos_T),
.o_sin  (o_sin_T),
.o_modc (o_modc_T),
.o_mods (o_mods_T),
.o_mod  (o_mod_T)
);
 
 
 
 
//8PSK解调
wire [2:0]o_wbits;
wire      o_bits;
R8PSK R8SKU(
.i_clk  (i_clk),
.i_clksample(i_clksample),
.i_rst  (i_rst),
.o_clk_3div(),
.i_med  (o_mod_T[25:10]),
.o_cos  (o_cos_R),
.o_sin  (o_sin_R),
.o_modc (o_modc_R),
.o_mods (o_mods_R),
.o_Ifir (o_Ifir_R),
.o_Qfir (o_Qfir_R),
.o_wbits(o_wbits),
.o_bits(o_bits)
);
 
initial
begin
    i_clk = 1'b1;
    i_clksample= 1'b1;
    i_rst = 1'b1;
    #12000
    i_rst = 1'b0;
end
 
always #80 i_clk=~i_clk;
always #5 i_clksample=~i_clksample;
 
 
initial
begin
    i_dat = 1'b0;
    #12000
    repeat(10000)
    begin
    #160 i_dat = 1'b1;
    #160 i_dat = 1'b1;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b1;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b1;
    #160 i_dat = 1'b1;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b1;
    #160 i_dat = 1'b1;
    #160 i_dat = 1'b1;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b1;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b0;
    #160 i_dat = 1'b1;
    #160 i_dat = 1'b1;
    #160 i_dat = 1'b0;
    
    
    end
end
 
 
 //显示发射端带相位旋转的星座图
integer fout1;
integer fout2;
initial begin
 fout1 = $fopen("It.txt","w");
 fout2 = $fopen("Qt.txt","w"); 
end
 
always @ (posedge i_clk)
 begin
     if(i_rst==0)
     begin
   	 $fwrite(fout1,"%d\n",o_I8psk);
	 $fwrite(fout2,"%d\n",o_Q8psk);
	 end
	 else begin
   	 $fwrite(fout1,"%d\n",0);
	 $fwrite(fout2,"%d\n",0);
	 end
end
 
 
 
endmodule

 

  

 

标签:wire,FPGA,signed,dat,b0,verilog,testbench,160,8PSK
From: https://www.cnblogs.com/51matlab/p/17881919.html

相关文章

  • Xlinx FPGA for DSP CORDIC 算法
    https://wenku.baidu.com/view/6c623aa8910ef12d2bf9e732.html?_wkts_=1701401816748&needWelcomeRecommand=1           ......
  • 系统性能提升2 倍以上【FPGA】XCKU5P-L2SFVB784E、XCKU5P-2SFVB784I
    Kintex™UltraScale+™器件在FinFET节点中提供最佳每瓦价格性能比,为需要高端功能(包括33Gb/s收发器和100G连接内核)的应用提供了经济高效的解决方案。最新的中端产品系列同时支持数据包处理和DSP密集型功能,是无线MIMO技术、Nx100G有线网络、以及数据中心网络和存储加速......
  • 基于FPGA的图像直方图统计实现,包括tb测试文件和MATLAB辅助验证
    1.算法运行效果图预览  2.算法运行软件版本vivado2019.2 matlab2022a 3.算法理论概述      基于FPGA的图像直方图统计实现主要是通过利用FPGA的并行处理能力,对图像中的每个像素进行统计,以计算出每个灰度级出现的次数或概率。这个过程涉及到对图像数据的快速......
  • 嵌入式【FPGA】5AGXMB7G6F40C6G、5AGXMB5G4F40C5G、5AGXBB5D4F35I5G实现最低功耗
    详情:Arria®V中端FPGA包含最为全面的多款中端FPGA产品,其中既有适用于每秒6千兆位(Gbps)和10千兆位应用的最低功耗型号,又有带宽最高且带有12.5Gbps收发器的型号。Arria®V器件特别适用于功耗敏感型无线基础设施设备、20G/40G桥接、交换、包处理应用、高清视频处理和......
  • 基于FPGA的RGB图像转Ycbcr实现,包括tb测试文件以及MATLAB辅助验证
    1.算法运行效果图预览 将FPGA的数据导入到matlab进行显示    2.算法运行软件版本Vivado2019.2 matlab2022a 3.算法理论概述     基于FPGA的RGB图像转Ycbcr转换的实现,主要是通过数字电路的设计,利用硬件并行处理的能力,快速完成图像数据的转换。   ......
  • 基于FPGA的图像形态学膨胀算法实现,包括tb测试文件和MATLAB辅助验证
    1.算法运行效果图预览在FPGA中仿真结果如下所示:   将FPGA中的仿真结果导入到matlab显示二维图,效果如下:   2.算法运行软件版本matlab2022a vivado2019.2 3.算法理论概述      膨胀操作是形态学中另外一种基本的操作。膨胀操作和腐蚀操作的作用是相......
  • 基于FPGA的数字时钟设计与实现(含源码)
    随着数字电子技术的不断发展,基于FPGA(现场可编程门阵列)的数字时钟设计方案逐渐成为了一种流行的选择。本篇博客将详细介绍如何利用FPGA实现一个简单的数字时钟,涉及到分频器、数码管驱动、时分秒计数、三八译码器和扫描数码管等模块。1.系统设计概述在本设计中,我们将使用FPGA来实......
  • RGB转YCbCr——基于《基于MATLAB与FPGA的图像处理教程》
    YCbCr介绍YCbCr由Y、Cb、Cr组成。为一种数字信号1、Y:表示颜色的明亮度和浓度,也可叫灰度阶。(通过RGB转换YCBCR提取Y分量也可以得到灰度图像)2、Cb:表示颜色的蓝色浓度偏移量即RGB输入信号蓝色部分与RGB信号亮度值之间的差异。3、Cr:表示颜色的红色浓度偏移量即RGB输入信号红色部分......
  • Verilog
    default都写(习惯){s1,s0}拼接inputi0,i1,i2,i3......
  • 基于FPGA的图像白平衡算法实现,包括tb测试文件和MATLAB辅助验证
    1.算法运行效果图预览    2.算法运行软件版本vivado2019.2 matlab2022a 3.算法理论概述       FPGA(Field-ProgrammableGateArray)是一种可编程逻辑电路,可以通过编程实现各种算法,包括图像白平衡算法。图像白平衡算法是一种用于调整图像颜色温度的方法,......