转眼间三月都已经过去一半,一直找不到有什么可以写的,一直想等自己把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. 解决Matlab画图直接保存.eps格式而导致图不全的问题

    Matlab确是一款简单方便的工具,使用此工具绘图也是我们常用的一种手段,可是如果我们想将此图片保存成.eps格式并应用于latex中,就有可能会出现.eps格式的图片显示不全的问题,这个着实让我们头 ...

  2. 递归与迭代的联系以及优缺点(以c++为例)

    1.递归的定义: 程序直接或间接的调用自身的方法. 递归算法的特点:(1) 递归就是在过程或函数里调用自身.(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口.(3) 递归算法解题通 ...

  3. 第十八章 dubbo-monitor计数监控

    监控总体图: 红色:监控中心 -  dubbo-simple-monitor 黄色:provider 蓝色:consumer 统计总体流程: MonitorFilter向DubboMonitor发送数 ...

  4. PC高级语言与施耐德、罗克韦尔、台达等PLC的Modbus通讯源代码(ModbusTCP.DLL/ModbusRTU.DLL)

    1.0  通讯组件概述 该类通讯组件适用于基于PC高级语言的工业自动化控制系统,用于PC与可编程控制器(PLC).智能仪表等进行数据通讯.组件采用动态链接库文件(*.DLL)的形式,在PC系统的项目工 ...

  5. CentOS 7搭建Linux GPU服务器

    1. CUDA Toolkit的安装 到https://developer.nvidia.com/cuda-gpus查询GPU支持的CUDA版本: 到https://developer.nvidia. ...

  6. Spark机器学习(6):决策树算法

    1. 决策树基本知识 决策树就是通过一系列规则对数据进行分类的一种算法,可以分为分类树和回归树两类,分类树处理离散变量的,回归树是处理连续变量. 样本一般都有很多个特征,有的特征对分类起很大的作用,有 ...

  7. PL/SQL学习笔记之函数

    一:函数 函数与过程的最大不同就是,函数有返回值.适用于需要返回结果的场景. 二:创建函数 CREATE [OR REPLACE] FUNCTION function_name [(parameter ...

  8. SoapUI Pro Project Solution Collection-XML assert

    in soapui the XML object used here is from  org.w3c.dom package so you need to read this article car ...

  9. 使用Amalgamate将C/C++项目合并成一个.h/.c[pp]文件

    简述 C/C++开源库一般是一堆的头文件和源文件,做到声明和实现分离,减小单个模块大小,这在设计上是很好的,但是用起来稍显麻烦.在网上看到有好心人推荐了一个开源工具Amalgamate,专门用来对C/ ...

  10. maven本地库与私服比对,查找缺失jar包

    项目中遇到的一个问题,因为要切换开发环境(新环境不能联网,且私服上的jar包信息不全),需要将本地仓库(项目使用本地仓库能够正常编译)中有而私服上没有的jar包整理出来(名称.版本号等),提供给第三方 ...