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

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

1.算法仿真效果
vivado仿真结果如下:
abf4a253c9eb540124d30d387f1849bf_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.jpg

借助matlab看8PSK的星座图:

2cbc8672ffbf7d4e51a5749075b0a556_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.jpg

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映射关系
042facaef90a59488da39eeafa631708_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

其星座图如下所示:
1a0d4226631291af47d379d6706cedc8_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

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
```

相关文章
|
6天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的变步长LMS自适应滤波器verilog实现,包括testbench
### 自适应滤波器仿真与实现简介 本项目基于Vivado2022a实现了变步长LMS自适应滤波器的FPGA设计。通过动态调整步长因子,该滤波器在收敛速度和稳态误差之间取得良好平衡,适用于信道均衡、噪声消除等信号处理应用。Verilog代码展示了关键模块如延迟单元和LMS更新逻辑。仿真结果验证了算法的有效性,具体操作可参考配套视频。
99 74
|
1月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的16QAM调制+软解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本项目基于FPGA实现了16QAM基带通信系统,包括调制、信道仿真、解调及误码率统计模块。通过Vivado2019.2仿真,设置不同SNR(如8dB、12dB),验证了软解调相较于传统16QAM系统的优越性,误码率显著降低。系统采用Verilog语言编写,详细介绍了16QAM软解调的原理及实现步骤,适用于高性能数据传输场景。
140 69
|
4天前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的16psk调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的16PSK调制解调系统的硬件测试版本。系统在原有仿真基础上增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同信噪比下的性能测试。16PSK通过改变载波相位传输4比特信息,广泛应用于高速数据传输。硬件测试操作详见配套视频。开发板使用及移植方法也一并提供。
19 6
|
30天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
63 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
10天前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的8PSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现8PSK调制解调系统,包含高斯信道、误码率统计、ILA数据采集和VIO在线SNR设置模块。通过硬件测试和Matlab仿真,展示了不同SNR下的星座图。8PSK调制通过改变载波相位传递信息,具有高频谱效率和抗干扰能力。开发板使用及程序移植方法详见配套视频和文档。
24 7
|
17天前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的QPSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的QPSK调制解调系统的硬件实现与仿真效果。系统包含测试平台(testbench)、高斯信道模块、误码率统计模块,支持不同SNR设置,并增加了ILA在线数据采集和VIO在线SNR设置功能。通过硬件测试验证了系统在不同信噪比下的性能,提供了详细的模块原理及Verilog代码示例。开发板使用说明和移植方法也一并给出,确保用户能顺利在不同平台上复现该系统。
57 15
|
1月前
|
移动开发 算法 数据安全/隐私保护
基于FPGA的QPSK调制+软解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的QPSK调制解调系统,通过Vivado 2019.2进行仿真,展示了在不同信噪比(SNR=1dB, 5dB, 10dB)下的仿真效果。与普通QPSK系统相比,该系统的软解调技术显著降低了误码率。文章还详细阐述了QPSK调制的基本原理、信号采样、判决、解调及软解调的实现过程,并提供了Verilog核心程序代码。
70 26
|
25天前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的2FSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的2FSK调制解调系统,包含高斯信道、误码率统计模块及testbench。系统增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同SNR下的硬件测试,并提供操作视频指导。理论部分涵盖频移键控(FSK)原理,包括相位连续与不连续FSK信号的特点及功率谱密度特性。Verilog代码实现了FSK调制解调的核心功能,支持在不同开发板上移植。硬件测试结果展示了不同SNR下的性能表现。
64 6
|
5天前
|
存储 编解码 算法
基于FPGA的直接数字频率合成器verilog实现,包含testbench
本项目基于Vivado 2019.2实现DDS算法,提供完整无水印运行效果预览。DDS(直接数字频率合成器)通过数字信号处理技术生成特定频率和相位的正弦波,核心组件包括相位累加器、正弦查找表和DAC。相位累加器在每个时钟周期累加频率控制字,正弦查找表根据相位值输出幅度,DAC将数字信号转换为模拟电压。项目代码包含详细中文注释及操作视频。
|
2月前
|
算法 异构计算
基于FPGA的4ASK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的4-ASK调制解调系统的算法仿真效果、理论基础及Verilog核心程序。仿真在Vivado2019.2环境下进行,分别测试了SNR为20dB、15dB、10dB时的性能。理论部分概述了4-ASK的工作原理,包括调制、解调过程及其数学模型。Verilog代码实现了4-ASK调制器、加性高斯白噪声(AWGN)信道模拟、解调器及误码率计算模块。
74 8