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
标签:10,Qdiff,FPGA,30,Idiff,b00,SNR,频偏 From: https://www.cnblogs.com/51matlab/p/17651567.html