返回信息流我最近在仿真分布式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是接收信号
请多多指教,不胜感激!
这是一条镜像帖。来源:北邮人论坛 / communications / #21912同步于 2012/12/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Communications机器人发帖
[问题]功率时延分布服从指数衰减的多径瑞利衰落信道该如何仿真
ericcheung
2012/12/8镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
让chan.ResetBeforeFiltering = 0,试一试吧。默认是1,在每次调用filter时,信道系数会有很大变化,这样就失去连续性了,可能会造成错误。
非常感谢!
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时,信道系数会有很大变化,这样就失去连续性了,可能会造成错误。
【 在 EricCheung 的大作中提到: 】
: 非常感谢!
: google了一下,参考了别人的代码,一般都在filter之前加了这一句。
: 另外,还发现另外一个问题,rayleighchan这个函数到底应该放在什么位置?比如针对每一个SNR值要仿真nloop次,我看有的代码是把rayleighchan放在了仿真次数for循环的外面,比如下面这个:
: ...................
其实我也不是很懂,感谢真是愧不敢当啊~
rayleighchan放在外面,就意味着所有的码块通过的信道都是具有连续性的。仿真次数和仿真的码块数目应该还是有差别。
如果是按照次数做仿真,就应该放在每次的循环里,即每次的信道是不同的,有一定差异;如果是按照码块数去仿真,就应该放在循环外面,认为所有的码块都是通过一个信道。如果你的算法依赖信道连续性,需要很长的数据才能完成计算,那rayleighchan就应该是放在循环外面,如果是每个码块得到一个值,不依赖连续性,那么rayleighchan放哪里都无所谓。
至于用信号各时延样本线性叠加来模拟多径,这样就是AWGN信道了,不是瑞利衰落信道,只是有一个多径的叠加罢了。定时估计应该就是相关运算吧?如果是,那么相关长度足够长,对噪声就不会很敏感,就可能出现一条直线吧。
因为我对于定时估计的算法不很了解,不知道说的对不对。。。
你太谦虚了,你的回答真的有帮到我^_^
我没注意到自己贴的那段代码确实是按块仿真的。。。
没错,训练序列辅助的同步算法一般都是利用相关的方法来实现的。现在看来,我之前那种简单的模拟多径信道的方法完全是错误的
【 在 c122621779 的大作中提到: 】
:
: 其实我也不是很懂,感谢真是愧不敢当啊~
: rayleighchan放在外面,就意味着所有的码块通过的信道都是具有连续性的。仿真次数和仿真的码块数目应该还是有差别。
: ...................
放在for外是为了得到连续信道,放在for内每执行一次就产生一个新的信道
【 在 EricCheung 的大作中提到: 】
: 非常感谢!
: google了一下,参考了别人的代码,一般都在filter之前加了这一句。
: 另外,还发现另外一个问题,rayleighchan这个函数到底应该放在什么位置?比如针对每一个SNR值要仿真nloop次,我看有的代码是把rayleighchan放在了仿真次数for循环的外面,比如下面这个:
: ...................