m基于FPGA的多径信道模拟verilog实现,包含testbench,可配置SNR,频偏,多径增益和多径延迟

发布时间 2023-08-25 23:38:49作者: 我爱C编程

1.算法仿真效果

其中Vivado2019.2仿真结果如下:

 

 

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

       瑞利分布是一个均值为0,方差为σ²的平稳窄带高斯过程,其包络的一维分布是瑞利分布。其表达式及概率密度如图所示。瑞利分布是最常见的用于描述平坦衰落信号接收包络或独立多径分量接受包络统计时变特性的一种分布类型。两个正交高斯噪声信号之和的包络服从瑞利分布。

       瑞利衰落能有效描述存在能够大量散射无线电信号的障碍物的无线传播环境。若传播环境中存在足够多的散射,则冲激信号到达接收机后表现为大量统计独立的随机变量的叠加,根据中心极限定理,则这一无线信道的冲激响应将是一个高斯过程。如果这一散射信道中不存在主要的信号分量,通常这一条件是指不存在直射信号(LoS),则这一过程的均值为0,且相位服从0 2π的均匀分布。即,信道响应的能量或包络服从瑞利分布。若信道中存在一主要分量,例如直射信号(LoS),则信道响应的包络服从莱斯分布,对应的信道模型为莱斯衰落信道。通常将信道增益以等效基带信号表示,即用一复数表示信道的幅度和相位特性。由此瑞利衰落即可由这一复数表示,它的实部和虚部服从于零均值的独立同分布高斯过程。

 

       瑞利衰落信道(Rayleigh fading channel)是一种无线电信号传播环境的统计模型。这种模型假设信号通过无线信道之后,其信号幅度是随机的,即“衰落”,并且其包络服从瑞利分布。这一信道模型能够描述由电离层和对流层反射的短波信道,以及建筑物密集的城市环境。瑞利衰落只适用于从发射机到接收机不存在直射信号(LoSLine of Sight)的情况,否则应使用莱斯衰落信道作为信道模型。     

 

       瑞利衰落(Rayleigh Fading):在无线通信信道中,由于信号进行多径传播达到接收点处的场强来自不同传播的路径,各条路径延时时间是不同的,而各个方向分量波的叠加,又产生了驻波场强,从而形成信号快衰落称为瑞利衰落。瑞利衰落属于小尺度的衰落效应,它总是叠加于如阴影、衰减等大尺度衰落效应上。

 

      由于多径和移动台运动等影响因素,使得移动信道对传输信号在时间、频率和角度上造成了色散,如时间色散、频率色散、角度色散等等,因此多径信道的特性对通信质量有着至关重要的影响,而多径信道的包络统计特性成为我们研究的焦点。根据不同无线环境,接收信号包络一般服从几种典型分布,如瑞利分布。

 

       当信道中不存在一个较强的直达径时,其信号包络服从是瑞利分布。在移动无线信道中,Rayleigh分布是常见的用于描述平坦衰落信号或独立多径分量接收包络统计时变特性的一种分布类型。众所周知,两个正交的噪声信号之和的包络服从Rayleigh分布。Rayleigh分布的概率密度函数(pdf)为:

 

 

 

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;