m基于FPGA的高斯白噪声信道模拟系统verilog实现,包含testbench,可以配置不同的SNR和频偏

1.算法仿真效果

vivado2019.2仿真结果如下:



SNR=0db,无频偏



SNR=5db,无频偏



SNR=25db,无频偏



SNR=45db,带频偏



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

高斯白噪声信道在通信系统中具有重要意义,模拟此类信道有助于评估系统性能。本文提出的FPGA实现系统可以灵活地模拟不同信道条件,为通信系统的设计和测试提供有力支持。



本系统的设计分为以下几个步骤:


生成高斯白噪声:使用随机数生成器产生服从高斯分布的随机数,作为噪声信号。

生成发送信号:根据应用场景生成发送信号,如调制后的信号。

添加信道效应:将发送信号与高斯白噪声相加,模拟信道效应。

频偏模拟:将发送信号经过频偏模块,引入频偏效应。

编写Testbench:编写Verilog测试台,配置不同的SNR和频偏参数,验证系统功能。

本系统在通信系统设计、性能评估和算法验证等方面具有广泛应用。通过模拟不同信道条件,可以评估系统在各种环境下的性能表现,指导系统设计优化。


3.verilog核心程序

`timescale 1ns / 1ps

//

// Company:

// Engineer:

//

// Create Date: 2023/08/17 14:13:20

// 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_rst;

reg signed[7:0]i_SNR;//根据质量得到当前帧类型:-10~50

reg signed[15:0]i_fre;

wire signed[15:0]i_real1;

wire signed[15:0]i_imag1;

wire signed[15:0]o_Rnoise1;

wire signed[15:0]o_Inoise1;

wire signed[15:0]o_real1;

wire signed[15:0]o_imag1;    


reg signed[1:0]i_Idiff;

reg signed[1:0]i_Qdiff;    

initial

begin

i_Idiff = 2'b00;

#1440

repeat(12500)

begin

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b01;

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b11;

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b11;

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b11;

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b01;

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b01;

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b11;

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b01;

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b11;

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b01;

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b01;

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b01;

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b01;

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b11;

#10 i_Idiff = 2'b00;

#30 i_Idiff = 2'b11;

end

$stop();

end

initial

begin

i_Qdiff = 2'b00;

#1440

repeat(12500)

begin

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b11;

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b11;

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b01;

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b01;

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b01;

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b01;

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b11;

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b11;

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b11;

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b01;

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b11;

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b01;

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b11;

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b01;

#10 i_Qdiff = 2'b00;

#30 i_Qdiff = 2'b11;

end

$stop();

end


//测试信号源

wire signed[1:0] w_Inz=i_Idiff;

wire signed[1:0] w_Qnz=i_Qdiff;


//成型滤波

fiter uut1(

.i_clk  (i_clk),

.i_rst  (i_rst),

.i_din  (w_Inz),

.o_dout (i_real1)

);


fiter uut2(

.i_clk  (i_clk),

.i_rst  (i_rst),

.i_din  (w_Qnz),

.o_dout (i_imag1)

);



initial

begin

i_clk = 1'b1;

i_rst = 1'b1;

i_fre= 0;

i_SNR = 8'd0;

#1600

i_rst = 1'b0;

i_SNR = 0;

i_fre= 0;

#10000

i_SNR = 5;

i_fre= 0;

#10000

i_SNR = 15;

i_fre= 0;

#10000

i_SNR = 25;

i_fre= 0;

#10000

i_SNR = 45;

i_fre= 10;//1/2^15*100e6=3k频偏

end


always #5 i_clk=~i_clk;  


AWGN_tops AWGN_tops_u(

.i_clk     (i_clk),

.i_rst     (i_rst),

.i_SNR     (i_SNR),//根据质量得到当前帧类型:-10~50

.i_fre     (i_fre),

.i_real1   (i_real1),

.i_imag1   (i_imag1),

.o_Rnoise1 (o_Rnoise1),

.o_Inoise1 (o_Inoise1),

.o_real1   (o_real1),

.o_imag1   (o_imag1)

);  




endmodule

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容