转眼间三月都已经过去一半,一直找不到有什么可以写的,一直想等自己把LTE仿真平台搭好后,再以连载的形式记录下来。但是,后来一想,我必须先做好充分的铺垫,在这过程中也遇到了很多问题,及时留下点什么,也是好的。即便以后回过头来再看这些文章,可能会有些许惊讶,惊讶于当时的无知或是稚嫩。不得不说,时间真的是一把杀猪刀,猪没少杀,更可怕的是扼杀了许多人的梦想。今天没有去实验室,我觉得在忙了一周后,应该停下来歇歇,有时候的驻足观望或许是为了更好的前行。

言归正传,今天想记录的是自己在仿真中遇到的一个问题,那就是信道模型的仿真。对于无线通信来说,最常见的就是瑞利衰落+多径+多普勒的模型了。具体分析如下:

瑞利衰落:就是有很多独立的小径的叠加,根据中心极限定理,知道这样的分布满足的是2个自由度的chi-square分布,也就是功率满足指数分布,幅度的分布就叫做瑞利分布。它表明的是信道h的幅度和相位变化情况,幅度满足瑞利分布的变化,相位满足[0,2pi]上均匀分布的变化。可以参考博文:Matlab 简单计算PDF和CDF

多径效应:谈到多径效应,我们就应该想到频率选择性这个概念。简单地说,就是延时的径在频域相当于相位搬移,每个径我们都可以看做是一个矢量,幅度是由它们各自的功率决定,角度(相位)就是由每径延时决定。然后,我们就做矢量相加,最后得到的就是一个旋转矢量,它对每个频率的响应都不同。第二个概念就是,相干带宽:既然信道响应在各个频率点处的不同,那么我们关心的一个问题是,在多大的频率间隔上,它的响应是呈现一定的相关性(也就是说,在这个频率间隔上的响应变化非常慢,可以认为是相同的)。这就很自然的过渡到功率延迟分布图上了,信道响应的频域(相关性)方面实质上是由信道时域的功率延迟分布做傅立叶变换得到的(功率与自相关函数的关系)。功率延迟分布图是一个很有用的工具,我们能从中得到Trms(信道平均延迟,用功率去对延时加权)和Tmax(信道最大延时)等。一般我们假设的是Bc = 0.5*(1/Tmax),当然根据不同的相关系数,这个带宽会有改变的。但至少从感性的角度你知道了什么是相干带宽。重点还是一句话:信道是个随机过程,我们要去看它的频域相关性,那我们就要去研究功率谱,因为功率谱和相关性就是一傅立叶变换的关系。可以参考博文:从简单信道估计说起

多普勒效应:谈到多普勒效应,我们应该想到的是信道在时间域上的变化。这个可以这么理解(虽然不严密),多普勒效应是怎么来的?不就是你离声源的距离的变化,导致了你接收到的信号频率的改变嘛。类比过来,你离基站距离改变,那么它传播信号到你接受端时间也在改变,时间的改变不就对应着你接收相位或是频率的改变嘛(exp(-jwT)其中T就是时间的变化量),从多普勒定义也能看出,你接收端运动速度越快,多普勒频率就越大,不就是你和基站间信道条件变化越快嘛。不得不说的一个概念是:相干时间,这完全跟相关带宽是一个对偶的概念,我们要知道时域上的相关性,我们就从频域着手,做傅立叶变换就能得到相干时间了,这也就是为什么我们在仿真时候有什么多普勒功率谱和高斯功率谱等区别。一般定义相干时间是Tc = 0.423*(1/Fm),Fm是最大多普勒频移。

再谈完了基本概念后,我们就要造这么一个信道来仿真看看,三要素就是上面三点,我们一一来完成。我想先说的是,有很多经典的模型来仿真,最经典的莫过于JAKES频域反变换方法来产生时间相关性的瑞利模型,Matlab自带的函数就是用这种方法产生的貌似,下面我们先产生单径,它是带时间相关性(存在多普勒)。

  1. chan = rayleighchan(1/15000,500);%1/15000代表我们的采样频率,也就是我一个点代表的是多长一段时间单位。500就是最大多普勒频移...
  1. %其实我们可以想这个函数怎么能工作呢?其实我们我们给定了500的多普勒,它就会按一定的相关时间计算出具体的相关时间,然后它又知道你的采样频率,它就知道在多少个采样点它应该是相关的了,就这么简单!
  2. x = ones(1,140);%源数据
  3. y = filter(chan,x);%经过信道后的输出
  4. plot(abs(y))

首先看看chan的具体参数:

当然更具体的设置你可以doc rayleighchan里看看

我们来看看最后的输出是不是带相关性的:

   

从图中可以看出信道是慢变的,当然如果你把多普勒频移取得再大点的话,它的变化就明显了,如上图!我们来验证下相关时间,我们按照公式9/(16*pi*fm)来计算约等于0.18*(1/fm),在fs = 15000情况下,可以估计出在相关性大于0.5的点数应该是5-6个。

  1. [r,lags] = xcorr(y,'coeff');
  2. stem(lags,r)

如果你还不相信的话,那我们就看看它的功率谱是不是满足在多普勒频移之间的jakes模型。

  1. chan = rayleighchan(1/15000,500);
  2. x = ones(1,4000);
  3. y = filter(chan,x);
  4. fs = 15000;
  5. Y = fft(y,4096);
  6. Y = fftshift(abs(Y));
  7. plot([-2048:2047]*fs/4096,Y.*Y)
  8. axis([-1000 1000 min(Y.*Y) max(Y.*Y)])


这下可以放心了吧,通过多次求傅立叶平均可以得到更加平滑的曲线。

单径我们已经产生好了,多径还远吗?我们只需要再产生几条这样的单径,给予每条径不同的功率大小,一般是指数衰减。例如:

H = [path1 path2 path3 path 4 ....]每径都是一个列向量,对于OFDM来说,H 的每行就是对于每个符号的信道,你就只需要做卷积就行啦,这样在频域上就有选择性了。然后呢,在时间上,下一个符号也就是第二行,又是一个多径信道,只不过每个径都变化了一点,这一点的大小就是多普勒频移决定的。

转:http://blog.csdn.net/mike190267481/article/details/7359576

Matlab 瑞利信道仿真的更多相关文章

  1. matlab的滤波器仿真——低通滤波器与插值滤波器

    项目里面有用到插值滤波器的场合,用matlab做了前期的滤波器性能仿真,产生的滤波器系数保存下来输入到FPGA IP中使用即可. 下面是仿真的代码 % clear all close all Nx = ...

  2. matlab之simulink仿真入门

    Matlab Simulink仿真工具的应用 ****Simulink是一个用来对动态系统进行建模.仿真和分析的软件包.使用Simulink来建模.分析和仿真各种动态系统(包含连续系统.离散系统和混合 ...

  3. Matlab Robotics Toolbox 仿真计算:Kinematics, Dynamics, Trajectory Generation

    1. 理论知识 理论知识请参考: 机器人学导论++(原书第3版)_(美)HLHN+J.CRAIG著++贠超等译 机器人学课程讲义(丁烨) 机器人学课程讲义(赵言正) 2. Matlab Robotic ...

  4. MATLAB——神经网络sim仿真函数

  5. OFDM通信系统的MATLAB仿真(1)

    由于是第一篇博客,想先说点废话,其实自己早就想把学到的一些东西总结成文章随笔之类的供自己复习时查看的了.但是一是觉得自己学的的不够深入,总结也写不出什么很深刻的东西:二是觉得网上也有海量的资料了,需要 ...

  6. OFDM通信系统的MATLAB仿真(2)

    关于OFDM系统的MATLAB仿真实现的第二篇随笔,在第一篇中,我们讨论的是信号经过AWGN信道的情况,只用添加固定噪声功率的高斯白噪声就好了.但在实际无线信道中,信道干扰常常是加性噪声.多径衰落的结 ...

  7. Matlab下多径衰落信道的仿真

    衰落信道参数包括多径扩展和多普勒扩展.时不变的多径扩展相当于一个延时抽头滤波器,而多普勒扩展要注意多普勒功率谱密度,通常使用Jakes功率谱.高斯.均匀功率谱. 多径衰落信道由单径信道叠加而成,而单径 ...

  8. 经典功率谱估计及Matlab仿真

    原文出自:http://www.cnblogs.com/jacklu/p/5140913.html 功率谱估计在分析平稳各态遍历随机信号频率成分领域被广泛使用,并且已被成功应用到雷达信号处理.故障诊断 ...

  9. 通过文件读写方式实现Matlab和Modelsim的联合仿真

    虽然Modelsim的功能非常强大,仿真的波形可以以多种形式进行显示,但是当涉及到数字信号处理的算法的仿真验证的时候,则显得有点不足.而进行数字信号处理是Matlab的强项,不但有大量的关于数字信号处 ...

随机推荐

  1. 几款流行的HTML5 UI 框架比较

    手机HTML5开发,大部分都使用现有的框架,这里简单比较几个流行的UI 框架.作者(启明星工作室 http://www.dotnetcms.org) 比较一下几款流行的HTML5框架,个人意见,仅供参 ...

  2. task_payment_byonlinedown

    CREATE DEFINER=`root`@`%` PROCEDURE `vir`.`task_payment_byonlinedown`()begin declare _mobile varchar ...

  3. 微软BI 之SSAS 系列 - 多维数据集维度用法之一 引用维度 Referenced Dimension

    在 CUBE 设计过程中有一个非常重要的点就是定义维度与度量值组关系,维度的创建一般在前,而度量值组一般来源于一个事实表.当维度和度量值组在 CUBE 中定义完成之后,下一个最重要的动作就是定义两者之 ...

  4. ubuntu 登陆信息打印 -- motd

    新需求需要改变 Ubuntu 启动时的登录信息打印,根据搜索到的资料,找到了这里: luo[~]ssh luo@192.168.100.233 Press ^@ (C-Space) to enter ...

  5. C#后台执行js

    StringBuilder sb = new StringBuilder(); sb.Append("<script type='text/javascript'>") ...

  6. JAVA常用代码

    一. 判断是否包含某个注解.    1). 声明接口 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented ...

  7. Swift 柯里化

    前言 由于柯里化在业务层的应用较少,所以从 Swift 3.0 开始移除了柯里化的用法,但是 Swift 的很多底层特性是使用柯里化来表达的. 1.柯里化 1.1 柯里化简介 柯里化(Currying ...

  8. 12C -- ORA-12850: 无法在所有指定实例上分配从属进程: 需要 2, 已分配 1

    使用客户端连接到oracle 12.2.0.1 rac数据库,报以下错误信息: ORA-12850: 无法在所有指定实例上分配从属进程: 需要 2, 已分配 1 因为没有mos账号,只好谷歌一下了.找 ...

  9. 手动释放和收缩tempdb

    USE [tempdb] GO DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS DBCC FREESYSTEMCACHE ('ALL') DBCC FREESESSI ...

  10. R语言编程艺术#02#矩阵(matrix)和数组(array)

    矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数.所以矩阵也是和向量一样,有模式(数据类型)的概念.(但反过来,向量却不能看作是只有一列或一行的矩阵. 数组(array)是R里更一 ...