Matlab 瑞利信道仿真

时间:2020-12-15 08:52:58

转眼间三月都已经过去一半,一直找不到有什么可以写的,一直想等自己把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的具体参数:

Matlab 瑞利信道仿真

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

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

Matlab 瑞利信道仿真   Matlab 瑞利信道仿真

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

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

Matlab 瑞利信道仿真

如果你还不相信的话,那我们就看看它的功率谱是不是满足在多普勒频移之间的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)])

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

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

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

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