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

目录

1.算法仿真效果

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

3.verilog核心程序

4.完整算法代码文件


1.算法仿真效果

vivado2019.2仿真结果如下:

SNR=0db,无频偏

SNR=5db,无频偏

SNR=25db,无频偏 

SNR=45db,带频偏 

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

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

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

  1. 生成高斯白噪声:使用随机数生成器产生服从高斯分布的随机数,作为噪声信号。
  2. 生成发送信号:根据应用场景生成发送信号,如调制后的信号。
  3. 添加信道效应:将发送信号与高斯白噪声相加,模拟信道效应。
  4. 频偏模拟:将发送信号经过频偏模块,引入频偏效应。
  5. 编写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
00_037m

4.完整算法代码文件

V

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Verilog高斯白噪声实现可以采用不同的方法。一个简单的方法是在Matlab中生成服从一定均值和方差的I、Q两路噪声信号,然后将这两组数据存储在FPGA中进行回放,从而产生高斯白噪声。这种方法的优点是实现简单且占用FPGA资源较少,但是只能保证回放噪声的一段数据满足不相关特性,而段与段之间的数据是相关的。 为了使整个过程中产生的噪声都满足不相关特性,可以利用线性反馈移位寄存器(LSFR)序列的交错异或来得到均匀分布的伪随机信号。另外,可以在一个ROM中存储sin函数值,另一个ROM中存储log函数值。通过产生随机读地址的方式,随机读取两个ROM中的数据,并将两组随机的函数值相乘,从而得到高斯白噪声。 在Verilog实现高斯白噪声时,可以使用带通信号采样来解决采样频率过大的问题。根据Nyquist采样定理,为了避免信号频谱混叠,采样速率须大于信号最高频率分量的二倍。然而,过大的采样频率会带来更高性能的采样器要求,并且会对整个系统的数据处理能力造成压力。因此,采用带通信号采样可以解决这个问题。 在Verilog代码中,可以通过乘以周期循环的固定数组来进行混频操作。具体的实现过程可以参考上述提供的代码片段。 综上所述,Verilog高斯白噪声实现可以通过回放预先生成的噪声信号或通过LSFR序列的交错异或来得到均匀分布的伪随机信号。另外,可以采用带通信号采样来避免采样频率过大的问题。具体的实现过程可以根据具体需求进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [高斯白噪声Verilog实现](https://blog.csdn.net/weixin_30567225/article/details/98026958)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Verilog学习 | 数字下变频与脉冲压缩的综合仿真与硬件实现](https://blog.csdn.net/qq_56937808/article/details/120591604)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱C编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值