瑞利信道:从原理到实现

2023-05-16

瑞利信道模型

  瑞利信道模型是无线通信信道最重要、最基础的的仿真模型。无线信道中的平坦衰落信道基本上都是在瑞利信道模型的基础上修改而成,比如应用同样广泛的莱斯信道就可以通过在瑞利信道的基础上简单的添加直流分量实现,而频率选择性衰落信道基本上都是几种平坦衰落信道叠加的结果。

  小尺度平坦衰落信道中,由于移动体处于不断的运动状态,导致接收端接收到的是来自不同路径的多径信号。移动台的速率将会导致每条多径分量具有不同的多普勒频移,同时假设移动台接收的信号的入射角度在[ 0, 2π]间均匀分布。这样就产生了具有特定环境下的多普勒功率谱密度特性。Clarke信道模型描述的小尺度平坦衰落信道中,移动台接收信号具有基于散射方式的场强统计特性,这正符合市区移动通信环境不存在直射路径的特点,其包络统计特性服从瑞利分布,因此又称为瑞利衰落信道模型。一般情况下,在 瑞利衰落的状态下,多普勒功率谱具有Jakes 功率谱密度函数,即U型谱。

  许多信道建模和仿真方法的研究,均以Clarke信道模型的统计特性作为性能评估的标准,但Clarke参考模型是一种理想模型,物理不可实现。Clarke参考模型是由多个正弦波相加,但要求个数非常大,理想统计特性在N为无穷大时取得。从对模型的仿真结果来看,一般需要在大于50个正弦波的条件下,才能取得较好的仿真效果。

瑞利信道仿真的实现方法

  Clarke参考模型的主要实现方法有正弦波叠加法和成型滤波法。两种方法各有其优缺点,正弦波叠加法由于计算复杂度低,在工业界得到广泛应用。

正弦波叠加法

  正弦波叠加法是利用确定性过程来模拟随机过程。根据概率论,多个不同频率的正弦波叠加,幅度统计是服从高斯分布的。如果实部和虚部均用多个不同频率的正弦波叠加,则实部虚部均分别服从高斯分布。又根据瑞利分布的定义,两个高斯变量的平方和的根服从瑞利分布,因此包络服从瑞利分布。

  在仿真性能评估的角度来说,完全理想的情况下,各径的同相和正交分量应该完全不相关,两者合成的总自相关曲线有固定的变化趋势。这些也是评估正弦波叠加法实现算法性能的主要指标。

  正弦波叠加法易于实现,占用资源少,但是产生的多普勒功率谱是由多个离散频率点上的冲激构成的,并且相关性能不够理想。正弦波叠加法有很多种产生各正弦波相位、幅度参数的方法,比如等面积法,等距离法,蒙特卡罗法等,在这里不详细展开。

  Jakes提出了基于正弦波叠加法的Jakes仿真模型。Jakes仿真模型是一种确定模型,产生的信号非广义平稳且不具各态历经性,其二阶统计特性与Clarke参考模型也相差较大。Jakes仿真模型虽然对Clarke参考模型实现了简化,降低了复杂度,提高了仿真效率,但却引入了广义非平稳性。其主要原因就在于Jakes对模型中的随机相移进行了确定化,同时造成了随机相移之间存在相关性。在仿真效率方面,所需的低频振荡器(即正弦波发生器)的数目由N减小到M=(N/2一l)/2,运算量大大减少。


  基于Jakes仿真模型的多种改进方法,均是引入随机多普勒频率、随机正弦波初始相位等随机变量,避免确定性。

  某改进模型的方法是在低频振荡器中引入随机相移,避免了随机相移的确定化和相关性,从而使得广义平稳问题得到解决。此模型仅满足Clarke参考模型的一阶统计特性,二阶统计特性则不满足。另一改进模型的输出信号满足Clarke参考模型的二阶统计特性,但最大多普勒频移对应的正弦波对应两个随机相移,而其余多普勒频移位置对应的正弦波均对应四个随机相移,也就是对于每个多普勒频移都将所有随机相移考虑在内,因此并未引入随机相移的相关。但由于每个多普勒频移项均要考虑所有随机相移,因此结构过于复杂。

  Y.R.Zheng和e.Xiao提出了多种改进的Jakes仿真模型,低频振荡器数目仅为M=8,一二阶统计特性同样符合Clarke参考模型理论值。文献[Yahong Rosa Zheng,Chengshan Xiao. ImProved Models for Generation of MultiPle Uneorrelated Rayleigh Fading Waveform 2002]给出了相应的结构图,每个正弦波需要三个随机量。

  下面给出Jakes方法的matlab实现代码,参见《MIMO-OFDM Wireless Communications with MATLAB》:

function [h,tf]=Jakes_Flat(fd,Ts,Ns,t0,E0,phi_N)
% Inputs:
%   fd      : Doppler frequency
%   Ts      : sampling period
%   Ns      : number of samples
%   t0      : initial time
%   E0      : channel power
%   phi_N  : inital phase of the maximum doppler frequency sinusoid
% Outputs:
%   h       : complex fading vector
%   t_state: current time

%MIMO-OFDM Wireless Communications with MATLAB㈢   Yong Soo Cho, Jaekwon Kim, Won Young Yang and Chung G. Kang
%?2010 John Wiley & Sons (Asia) Pte Ltd

if nargin<6,  phi_N=0;    end
if nargin<5,  E0=1;       end
if nargin<4,  t0=0;  end
if nargin<3,  error('More arguments are needed for Jakes_Flat()');   end
N0=8;                  % As suggested by Jakes 
N=4*N0+2;             % an accurate approximation              
wd=2*pi*fd;           % Maximum doppler frequency[rad]
%t_state = t0;
%for i=1:Ns
%   ich=sqrt(2)*cos(phi_N)*cos(wd*t_state);
%   qch=sqrt(2)*sin(phi_N)*cos(wd*t_state);
%   for k=1:N0
%      phi_n=pi*k/(N0+1);
%      wn=wd*cos(2*pi*k/N);
%      ich=ich+2*cos(phi_n)*cos(wn*t_state);
%      qch=qch+2*sin(phi_n)*cos(wn*t_state);
%   end
%   h1(i) = E0/sqrt(2*N0+1)*complex(ich,qch);
%   t_state=t_state+Ts;             % save last time
%end
t = t0+[0:Ns-1]*Ts;  tf = t(end)+Ts; 
coswt = [sqrt(2)*cos(wd*t); 2*cos(wd*cos(2*pi/N*[1:N0]')*t)]; % 侥 (2.32)
h = E0/sqrt(2*N0+1)*exp(j*[phi_N pi/(N0+1)*[1:N0]])*coswt; 
                                % (2.29) with (2.30),(2.31), and (2.32)
% discrepancy = norm(h-h1)


成型滤波法

  成形滤波器法是将高斯白噪声输入成形滤波器来产生指定形状的多普勒功率谱,实部和虚部均是具有特定形状多普勒功率谱的高斯色噪声,因此包络服从瑞利分布。


基于频域仿真的瑞利衰落仿真结构图

  由于通常情况下通信系统的采样好速率非常高,最大多普勒频率与采样率相比很小,因此成形滤波器需要的带宽很小,直接实现非常困难。一般是高斯噪声通过低采样率的滤波器滤波后不断进行内插来实现,得到与系统数据速率相等的抽头系数。需要进行多级内插和IFFT,消耗的计算存储资源很多,不适宜用于大数据量的信道仿真。但是成形滤波器法是用随机噪声产生的,因而随机性比正弦波叠加法,各方面性能更为理想。

  其中滤波过程可以采用频域滤波或时域滤波。时域滤波可以通过改变高斯信号源长度任意扩展信道长度,但计算量非常大大,而频域滤波受到IFFT长度的限制,计算量较大。对于时域滤波,使用重叠相加法可以改善复杂度。

  对于滤波,一般以大约为系统最高Doppler频移的8到12倍速率对信号进行采样,能得到满意的结果。系统数据传送速率与这个采样频率的比值为抽样(内插)因子。对滤波器的输出以内插因子作内插,可以得到和系统数据速率匹配的信道抽头系数,即信道响应。

  给出频域滤波的matlab实现代码如下,参见《MIMO-OFDM Wireless Communications with MATLAB》:

function [FadTime,tf] = FWGN_ff(Np,fm_Hz,Nfading,Nfosf,FadingType,varargin)
%Fadng generation based on FWGN method
% FadTime= FWGN_ff(Np,fm_Hz,Nfading,Nfosf,FadingType,sigma,phi)
% Inputs:
%  Np         : # of multipath
%  fm_Hz      : A vector of max. Doppler frequency of each path[Hz]
%  Nfading    : Doppler filter size (IFFT size)
%  Nfosf      : Oversampling factor of Doppler bandwith
%  FadingType : Doppler type, 'laplacian'/'class'/'flat'
%  sigma      : Angle spread of UE in case of 'laplacian' Doppler type
%  phi        : DoM-AoA in case of 'laplacian' Doppler type
% Outputs:
%  FadTime    : Np x Nfading, fading time matrix

%MIMO-OFDM Wireless Communications with MATLAB㈢   Yong Soo Cho, Jaekwon Kim, Won Young Yang and Chung G. Kang
%?2010 John Wiley & Sons (Asia) Pte Ltd

fmax= max(fm_Hz);
% Doppler frequency spacing respect to maximal Doppler frequency
dfmax= 2*Nfosf*fmax/Nfading; 
if isscalar(fm_Hz), fm_Hz= fm_Hz*ones(1,Np);  end
% To get a funtion corresponding to Doppler spectrum of "FadingType"
FadingType= lower(FadingType); ftn_psd= Doppler_PSD_function(FadingType);
err_msg= 'The difference between max and min Doppler frequencies is too large.\n increase the IFFT size'; 
if strcmp(FadingType(1:2),'la') % Laplacian constrained PAS
  for i=1:Np
     Nd= floor(fm_Hz(i)/dfmax)-1;
     if Nd<1,  error(err_msg);   end
     tmp= ftn_psd([-Nd:Nd],varargin{1}(i),varargin{2}(i));
     tmpz= zeros(1,Nfading-2*Nd+1);
     FadFreq(i,:)= [tmp(Nd+1:end-1) tmpz tmp(2:Nd)];
  end
 else  % symmetric Doppler spectrum
  for i=1:Np
     Nd= floor(fm_Hz(i)/dfmax)-1;
     if Nd<1,  error(err_msg);  end
     tmp= ftn_psd([0:Nd]/Nd); tmpz= zeros(1,Nfading-2*Nd+3);
     FadFreq(i,:)= [tmp(1:Nd-1) tmpz fliplr(tmp(2:Nd-1))];
  end
end
% Add a random phase to the Doppler spectrum
FadFreq = sqrt(FadFreq).*exp(2*pi*j*rand(Np,Nfading));
FadTime = ifft(FadFreq,Nfading,2);
% Normalization to 1
FadTime= FadTime./sqrt(mean(abs(FadTime).^2,2)*ones(1,size(FadTime,2)));
tf=1/(2*fmax*Nfosf); %fading sample time=1/(Doppler BW*Nfosf)


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

瑞利信道:从原理到实现 的相关文章

  • java:程序包XXXX不存在

    使用idea导入maven项目 xff0c 编译时报错 xff1a java 程序包XXXX不存在 如图 xff1a 百度到的诸如右键libraries所在文件夹 xff0c 选择add to libraries 等方法没有作用 后来去查看
  • tomcat启动报错:java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.Lifec

    tomcat启动报错 xff1a java lang IllegalStateException ContainerBase addChild start org apache catalina Lifec 百度的结果一般都是让修改web
  • UE4 音乐的播放与停止--基于蓝图

    要实现的功能非常简单 xff1a 点击按钮 xff0c 播放音乐 这个功能非常基础 xff0c 就两步 xff1a 1 将音乐源文件拖到context文件夹中 注意 xff0c 这里的音乐文件必须是 wav格式的 2 在按钮的onclick
  • UnityEditor.BuildPlayerWindow+BuildMethodException

    unity3D安卓打包报错 xff1a UnityEditor BuildPlayerWindow 43 BuildMethodException 61 errors at UnityEditor BuildPlayerWindow 43
  • Spark常用API<Scala>

    概览 1 转换 2 动作1 Transformation 1 1一个RDD进行转换操作1 2 两个RDD的转换操作1 3对一个Pair RDD进行转化操作1 4对两个PairRDD进行转换操作2 Action 2 1对一个RDD进行行动操作
  • 关于特定网页打不开问题的解决

    如果有一些特定的网站打不开 排除被屏蔽的可能性的话 xff0c 试着把DNS设置成了自动获取ip试试看 我就这样子解决了打不开学校官网的问题
  • 渲染业务领域全景图

    最近图形学应用领域愈发广泛 xff0c 根据我的理解 xff0c 制作了一张渲染相关业务全景图 xff0c 希望对大家的职业规划有一定帮助
  • AI 入门怎么学?这份学习指南请收好!

    万事开头难 xff01 AI 入门对很多初学 AI 的同学来说是一大难题 搜集了一大堆入门资料 xff0c Python 数学 深度学习应有尽有 xff0c 但就是无从下手 xff0c 总是在第一章与放弃之间徘徊 那么 xff0c AI 应
  • FTP如何设置用户名密码

    1 新建FTP站点 xff0c 指定名称和物理路径 2 身份验证 选择 基本 xff0c 允许访问 选择 指定用户 xff0c 下面文本框中输入 本地用户和组 中现有的一个用户名即可 注意 xff1a 只能是 本地用户和组 中的用户 xff
  • Android布局 -- Navigation实现底部导航栏

    底部导航栏加页卡的切换 xff0c 很多App采用这种布局设计 xff0c 在以前的开发中 xff0c 需要自定义底部导航栏以及使用FragmentTransaction来管理Fragment的切换 xff0c 代码量较大 xff0c 而使
  • ViewModelProviders is deprecated

    原有的创建ViewModel的方法 xff1a viewModel 61 ViewModelProviders of this get ViewModel class 提示ViewModelProviders过时 改为 xff1a view
  • Android Fragment退出 返回上一个Fragment与直接退出

    例如应用底部有两个导航按钮A与B xff0c 刚进入的时候显示为第一个AFragment xff0c 点击B切换到BFragment 如果需求是在BFragment点击返回键回到AFragment xff0c 需要配置 app defaul
  • Android基础 -- 子线程可以修改UI吗?

    子线程可以修改UI吗 xff1f 为什么会产生这样的问题 xff0c 可能是因为在开发过程中遇到了 34 Only the original thread that created a view hierarchy can touch it
  • leetcode 417. 太平洋大西洋水流问题

    https leetcode cn com problems pacific atlantic water flow 思路是从海洋开始逆流 如果可以逆流到 就标记为1 然后检查两个海洋都可以逆流到的区域 DFS public List lt
  • Android模拟器检测常用方法

    在Android开发过程中 xff0c 防作弊一直是老生常谈的问题 xff0c 而模拟器的检测往往是防作弊中的重要一环 xff0c 接下来有关于模拟器的检测方法 xff0c 和大家进行一个简单的分享 1 传统的检测方法 传统的检测方法主要是
  • RecyclerView 隐藏部分分割线

    在项目中遇到复杂点的RecyclerView xff0c 可能会有隐藏部分分割线的需求 xff0c 例如item1和item3之间的分割线隐藏 xff0c item4和item5之间的分割线隐藏等 在看了文档里的ItemDecoration
  • 浅谈去中心化应用

    1 中心化应用 现在我们所使用的应用基本上都是中心化的应用 xff0c 什么是中心化应用呢 xff0c 举个栗子 xff0c 我们在天猫买东西的时候 xff0c 需要先付款给支付宝 xff0c 然后卖家发货 xff0c 我们确认收货之后 x
  • EGL综述

    参考 xff1a https www khronos org registry EGL specs eglspec 1 5 pdf 什么是EGL EGL是支持多平台 多操作系统的 xff0c 比如安卓 Unix Windows等 为了扩展性
  • Java二分搜索树及其添加删除遍历

    对于树这种结构 xff0c 相信大家一定耳熟能详 xff0c 二叉树 二分搜索树 AVL树 红黑树 线段树 Trie等等 xff0c 但是对于树的应用以及编写一棵解决特定问题的树 xff0c 不少同学都会觉得不是一件简单的事情 xff0c
  • Android自定RadioGroup实现点击切换效果

    一 xff1a java文件 public class SegmentedGroup extends RadioGroup private int mMarginDp private Resources resources private

随机推荐

  • opencv--将本地摄像头数据转换成ip摄像头数据流,并在客户端获取该流进行显示

    项目介绍 xff1a 在本项目中 xff0c 实现从本地摄像头获取数据帧 xff0c 然后将其转换成ip摄像头数据流并在客户端通过opencv代码实时获取该图像数据进行显示 xff1a 当然也能在浏览器通过输入地址进行视频的访问 方式一 x
  • 8. &amp;和&amp;&amp;的区别?

    答 xff1a amp 运算符有两种用法 xff1a 1 按位与 xff1b 2 逻辑与 amp amp 运算符是短路与运算 逻辑与跟短路与的差别是非常巨大的 xff0c 虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是t
  • 记InheritedWidget使用思考

    InheritedWidget 是项目中必不可少的组件 xff0c 用户数据共享 老生常谈的Provider框架也是基于InheritedWidget实现的 简介 InheritedWidget组件是功能性组局 xff0c 实现了由上向下共
  • flutter数据共享系列——随记

    Provider InheritedWidget 解决了数据共享问题 迎面也带来数据刷新导致的组件不必要更新问题 Provider基于InheritedWidget实现数据共享 xff0c 数据更新 xff0c 定向通知组件更新等 接下来我
  • Flutter布局——一段代码解释最常见的约束错误

    flutter布局的原理 Constraints go down Sizes go up Parent sets position 父节点向子节点传约束子节点向父节点上传大小最后由父节点决定位置 不是按照直接约束显示 问题代码 xff1a
  • 流媒体压力测试rtmp&hls(含推流和拉流)

    root 64 localhost yum install git unzip patch gcc gcc c 43 43 make root 64 localhost git clone https github com rzrobert
  • Windows开启网络对时方法

    Windows开启网络对时方法 1 启用 NTPServer 为此 xff0c 请按照下列步骤操作 xff1a a 单击 开始 xff0c 单击 运行 xff0c 键入 regedit xff0c 然后单击 确定 进入注册表 b 找到并单击
  • 关于【finder不能完成该操作 因为未能读取或写入"文件名"中的某些数据(错误代码-36)】快速解决办法

    如题 xff1a finder不能完成该操作 因为未能读取或写入 34 文件名 34 中的某些数据 错误代码 36 我们在Mac上操作NTFS格式的硬盘中的文件 xff0c 删除过程中由于某些原因为删除完整 xff0c 直接拔掉硬盘 xff
  • Ubuntu安装指定版本clang-format

    执行以下命令即可 xff1a wget O https apt llvm org llvm snapshot gpg key sudo apt key add sudo vim etc apt sources list 插入从https a
  • Swift中设置tableview的分割线(separator)的样式、颜色、边距

    Swift中设置tableview的分割线 xff08 separator xff09 的样式 颜色 边距 设置分割线样式 三种分割线样式 xff1a case None 无分割线 case SingleLine 单条分割线 case Si
  • React-Native 程序出现闪退原因之一

    React Native 程序出现闪退原因之一 1 RN的iOS端release版本和staging版本出现闪退 原因 xff1a 使用了Number isInteger 该方法在iOS端debug模式下运行不会出现异常 xff0c 一旦生
  • 【Android】【问题分析】G-sensor因数据交互问题导致手机crash

    G sensor因数据交互问题导致手机crash 问题现象 xff1a 测试同事发现 xff0c 手机在使用和待机时 xff0c 低概率发现手机会crash 问题原因 xff1a G sensor在driver和HAL层因交互的参数不匹配
  • 【瓣芽·Banya】React Native 构建的仿豆瓣应用

    今天介绍一个用 React Native 创建的应用 xff0c 集合了豆瓣电影 xff0c 图书等信息展示功能的 app github 地址 瓣芽 Banya 项目使用了react navigation 做路由 redux 做部分状态管理
  • CSS - position

    在 CSS 中 xff0c position 是实现元素定位的一种重要方式 使用定位的元素层叠级别比浮动会更高 xff0c 采用定位来控制元素位置会更加容易 一般我们使用定位 xff0c 是通过使用定位模式和边偏移量来确定元素位置的 定位模
  • React Native 选择器组件 / react-native-slidepicker

    react native slidepicker 一个纯 JavaScript 实现的的 React Native 组件 xff0c 用于如地址 xff0c 时间等分类数据选择的场景 github https github com lexg
  • 函数式组件 ref 的解决方案

    对于 React 中需要强制修改子组件的情况 xff0c React 提供了 Refs 这种解决办法 xff0c 使得我们可以操作底层 DOM 元素或者自定的 class 组件实例 除此之外 xff0c 文档 xff08 v17 0 1 x
  • JavaScript生成指定范围的随机数和随机数序列

    在JavaScript中我们经常使用Math random 方法生成随机数 xff0c 但是该方法生成的随机数只是0 1之间的随机数 先看如下常用方法的特征 xff1a 1 Math random 结果为0 1间的一个随机数 包括0 不包括
  • JavaScript生成指定范围随机数和随机序列

    在JavaScript中我们经常使用Math random 方法生成随机数 xff0c 但是该方法生成的随机数只是0 1之间的随机数 先看如下常用方法的特征 1 Math random 结果为0 1间的一个随机数 包括0 不包括1 2 Ma
  • 【React Native】JavaScript 中 bind 方法

    这个问题其实是一个 JavaScript 中的问题 JavaScript中jQury的bind方法为选定元素添加事件处理程序 xff0c 规定事件发生时运行的函数 语法为 xff1a selector bind event data fun
  • 瑞利信道:从原理到实现

    瑞利信道模型 瑞利信道模型是无线通信信道最重要 最基础的的仿真模型 无线信道中的平坦衰落信道基本上都是在瑞利信道模型的基础上修改而成 xff0c 比如应用同样广泛的莱斯信道就可以通过在瑞利信道的基础上简单的添加直流分量实现 xff0c 而频