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

相关文章
|
4天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的64QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的64QAM调制解调通信系统的设计与实现,包括信号生成、调制、解调和误码率测试。系统在Vivado 2019.2中进行了仿真,通过设置不同SNR值(15、20、25)验证了系统的性能,并展示了相应的星座图。核心程序使用Verilog语言编写,加入了信道噪声模块和误码率统计功能,提升了仿真效率。
20 4
|
4天前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
18天前
|
存储 算法 数据处理
基于FPGA的8PSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本系统在原有的8PSK调制解调基础上,新增了高斯信道与误码率统计模块,验证了不同SNR条件下的8PSK性能。VIVADO2019.2仿真结果显示,在SNR分别为30dB、15dB和10dB时,系统表现出不同的误码率和星座图分布。8PSK作为一种高效的相位调制技术,广泛应用于无线通信中。FPGA凭借其高度灵活性和并行处理能力,成为实现此类复杂算法的理想平台。系统RTL结构展示了各模块间的连接与协同工作。
43 16
|
8天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的16QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本项目基于FPGA实现16QAM调制解调通信系统,使用Verilog语言编写,包括信道模块、误码率统计模块。通过设置不同SNR值(如8dB、12dB、16dB),仿真测试系统的误码性能。项目提供了完整的RTL结构图及操作视频,便于理解和操作。核心程序实现了信号的生成、调制、信道传输、解调及误码统计等功能。
23 3
|
12天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的16PSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
### 简介 本项目采用VIVADO 2019.2进行了十六进制相位移键控(16PSK)算法仿真,结果显示,在SNR=30dB时效果为Tttttttttttttt12,在SNR=20dB时效果为Tttttttttttttt34。系统RTL结构如Tttttttttttttt555555所示。16PSK是一种高效的相位调制技术,能在每个符号时间内传输4比特信息,适用于高速数据传输。其工作原理包括将比特流映射到16个相位状态之一(Tttttttttttttt777777),并通过匹配滤波和决策进行解调。具体Verilog核心程序见完整代码。
24 1
|
1月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的2ASK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本项目基于Vivado 2019.2实现了2ASK调制解调系统,新增高斯信道及误码率统计模块,验证了不同SNR条件下的ASK误码表现。2ASK通过改变载波振幅传输二进制信号,其调制解调过程包括系统设计、Verilog编码、仿真测试及FPGA实现,需考虑实时性与并行性,并利用FPGA资源优化非线性操作。
52 0
|
5月前
|
机器学习/深度学习 算法 异构计算
m基于FPGA的多通道FIR滤波器verilog实现,包含testbench测试文件
本文介绍了使用VIVADO 2019.2仿真的多通道FIR滤波器设计。展示了系统RTL结构图,并简述了FIR滤波器的基本理论,包括单通道和多通道的概念、常见结构及设计方法,如窗函数法、频率采样法、优化算法和机器学习方法。此外,还提供了Verilog核心程序代码,用于实现4通道滤波器模块,包含时钟、复位信号及输入输出接口的定义。
151 7
|
5月前
|
算法 异构计算
m基于FPGA的电子钟verilog实现,可设置闹钟,包含testbench测试文件
该文介绍了基于FPGA的电子钟设计,利用Vivado2019.2平台进行开发并展示测试结果。电子钟设计采用Verilog硬件描述语言,核心包括振荡器、分频器和计数器。时间显示为2个十进制格式,闹钟功能通过存储器和比较器实现,当当前时间等于设定时间时触发。文中给出了Verilog核心程序示例,展示了时钟信号、设置信号及输出的交互。
182 2
|
5月前
|
编解码 算法 异构计算
基于FPGA的NC图像质量评估verilog实现,包含testbench和MATLAB辅助验证程序
在Vivado 2019.2和Matlab 2022a中测试的图像质量评估算法展示了效果。该算法基于NC指标,衡量图像与原始图像的相似度,关注分辨率、色彩深度和失真。提供的Verilog代码段用于读取并比较两个BMP文件,计算NC值。
|
5月前
|
算法 异构计算
m基于FPGA的MPPT最大功率跟踪算法verilog实现,包含testbench
该内容包括三部分:1) 展示了Vivado 2019.2和Matlab中关于某种算法的仿真结果图像,可能与太阳能光伏系统的最大功率点跟踪(MPPT)相关。2) 简述了MPPT中的爬山法原理,通过调整光伏电池工作点以找到最大功率输出。3) 提供了一个Verilog程序模块`MPPT_test_tops`,用于测试MPPT算法,其中包含`UI_test`和`MPPT_module_U`两个子模块,处理光伏电流和电压信号。
63 1

热门文章

最新文章