BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / communications / #21912同步于 2012/12/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Communications机器人发帖

[问题]功率时延分布服从指数衰减的多径瑞利衰落信道该如何仿真

ericcheung
2012/12/8镜像同步5 回复
我最近在仿真分布式mimo-ofdm中的同步算法,用matlab对某篇文章中的算法进行了仿真,在多径信道模拟这里遇到了困难。 文章对仿真信道参数的描述是这样的: 信道采用多径瑞利衰落模型,路径数为7,路径时延在0~30μs(采样频率1MHz,也就是采样周期为1μs)等间隔分布,功率时延分布服从指数衰减,φ(τ)=exp(-τ/τ'),τ'为均方根时延扩展,其值为7μs。 我以前仿真多径信道,比如COST207 6径信道,只是将信号的多个时延样本分别乘上各径增益后线性叠加。对于很多文章中所说的多径瑞利衰落信道,我一直不知道该怎么仿真。比如上面这个瑞利衰落信道,是否可以认为各径时延为τ = [0 5 10 15 20 25 30] (单位:samples)?各径的增益是否就通过计算φ(τ)的值来得到呢,即path_gain = [1 0.4895 0.2397 0.1173 0.0574 0.0281 0.0138] ;我的理解正确否? 我知道matlab里有一个rayleighchan函数,上面这个信道是否可以用这个函数来产生?具体怎么写呢? 我按照下面这样来做,发现结果完全不对,性能曲线波动很大,曲线趋势也不对,应该不仅仅是仿真次数的问题: ts = 1; fd = 0; tau = [0 5 10 15 20 25 30]; path_gain = [1.0000 0.4895 0.2397 0.1173 0.0574 0.0281 0.0138]; %pdb就是把path_gain按照10log10的关系转换了一下。。。 pdb = [0 -3.1025 -6.2033 -9.3070 -12.4109 -15.5129 -18.6012]; chan = rayleighchan(ts,fd,tau,pdb); rx = filter(chan,tx);%tx是发射信号,rx是接收信号 请多多指教,不胜感激!
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
c122621779机器人#1 · 2012/12/8
让chan.ResetBeforeFiltering = 0,试一试吧。默认是1,在每次调用filter时,信道系数会有很大变化,这样就失去连续性了,可能会造成错误。
ericcheung机器人#2 · 2012/12/8
非常感谢! google了一下,参考了别人的代码,一般都在filter之前加了这一句。 另外,还发现另外一个问题,rayleighchan这个函数到底应该放在什么位置?比如针对每一个SNR值要仿真nloop次,我看有的代码是把rayleighchan放在了仿真次数for循环的外面,比如下面这个: for i=1:1:EbN0Num ebno=EbN0Start+i*EbN0Step; delta=10*log10(ModLevel*InfCarNum/(InfCarNum+PilotNum+CPNum)); SNR=ebno+delta; chan=rayleighchan(ts,fd,tau,pdb); chan.ResetBeforeFiltering=0; %必须设置为0这样多径信道对符号的拖尾就可以算到下一个符号上 for block=1:1:Block % ======================== 发送端 ================================= % ================== 产生数据 ================== % 包括信源产生,数字调制,插入导频 [Msg,Inf,Inf_Mod,Pilot,PilotInterval]=Tx_GenMsg(ModLevel,InfCarNum,PilotNum,InfNum); …… 但是也有把它放在仿真次数for循环里面的。我有点糊涂了,到底哪种是正确的? 两种都试过,还是没得到想要的结果,主要问题在于定时估计MSE曲线随SNR增加变化很小,且MSE值偏大。 如果用上面说的信号各时延样本线性叠加来模拟多径,则定时估计MSE曲线用plot来画的话是一条水平线,其值一直是0,我想是不是还是跟多径信道模拟的方法不对有关系。。。 【 在 c122621779 的大作中提到: 】 : 让chan.ResetBeforeFiltering = 0,试一试吧。默认是1,在每次调用filter时,信道系数会有很大变化,这样就失去连续性了,可能会造成错误。
c122621779机器人#3 · 2012/12/10
【 在 EricCheung 的大作中提到: 】 : 非常感谢! : google了一下,参考了别人的代码,一般都在filter之前加了这一句。 : 另外,还发现另外一个问题,rayleighchan这个函数到底应该放在什么位置?比如针对每一个SNR值要仿真nloop次,我看有的代码是把rayleighchan放在了仿真次数for循环的外面,比如下面这个: : ................... 其实我也不是很懂,感谢真是愧不敢当啊~ rayleighchan放在外面,就意味着所有的码块通过的信道都是具有连续性的。仿真次数和仿真的码块数目应该还是有差别。 如果是按照次数做仿真,就应该放在每次的循环里,即每次的信道是不同的,有一定差异;如果是按照码块数去仿真,就应该放在循环外面,认为所有的码块都是通过一个信道。如果你的算法依赖信道连续性,需要很长的数据才能完成计算,那rayleighchan就应该是放在循环外面,如果是每个码块得到一个值,不依赖连续性,那么rayleighchan放哪里都无所谓。 至于用信号各时延样本线性叠加来模拟多径,这样就是AWGN信道了,不是瑞利衰落信道,只是有一个多径的叠加罢了。定时估计应该就是相关运算吧?如果是,那么相关长度足够长,对噪声就不会很敏感,就可能出现一条直线吧。 因为我对于定时估计的算法不很了解,不知道说的对不对。。。
ericcheung机器人#4 · 2012/12/10
你太谦虚了,你的回答真的有帮到我^_^ 我没注意到自己贴的那段代码确实是按块仿真的。。。 没错,训练序列辅助的同步算法一般都是利用相关的方法来实现的。现在看来,我之前那种简单的模拟多径信道的方法完全是错误的 【 在 c122621779 的大作中提到: 】 : : 其实我也不是很懂,感谢真是愧不敢当啊~ : rayleighchan放在外面,就意味着所有的码块通过的信道都是具有连续性的。仿真次数和仿真的码块数目应该还是有差别。 : ...................
huawudi机器人#5 · 2012/12/10
放在for外是为了得到连续信道,放在for内每执行一次就产生一个新的信道 【 在 EricCheung 的大作中提到: 】 : 非常感谢! : google了一下,参考了别人的代码,一般都在filter之前加了这一句。 : 另外,还发现另外一个问题,rayleighchan这个函数到底应该放在什么位置?比如针对每一个SNR值要仿真nloop次,我看有的代码是把rayleighchan放在了仿真次数for循环的外面,比如下面这个: : ...................