1、之前存在的问题
- 之前作系统仿真时,把此类函数发到了信道对应的function里面,这样在不改变信道参数时,每次调用该信道对象都要初始化一次,导致前后两帧数据不是连续发送。(可以通过info()方法查看该信道对象中NumSamplesProcessed参数来验证,每次初始化该位置0)。
2、解决方法
- 将该信道对象在主函数中以全局变量声明(函数中若要使用全局变量需要声明,但不需要赋值),然后在信道函数中使用该对象即可,这样使用info方法查看该对象可以看到信道通过数据量一致增长,如果设置了多普勒可以看到对应信道频域通带连续变化。
3、示例
主函数设置
global rayChan0;
rayChan0 = comm.RayleighChannel(...
'SampleRate',sample_, ... %单个数
'PathDelays',delay_, ... %行向量
'AveragePathGains',power_, ... %行向量
'NormalizePathGains',true, ... %归一化输出
'MaximumDopplerShift',dplshift_,... %单个数
'RandomStream', 'mt19937ar with seed',... %'Global stream' 'mt19937ar with seed' %'Global stream'不可设置seed
'Seed',seed); %单个数 取值(1->正无穷)
%'Visualization','Frequency response','SamplesToDisplay','10%',... %信道实时频域图像(可选)
不同SNR可以使用reset方法重置信道为初始位置,设置seed保种每一SNR初始信道特性相同
信道函数
global rayChan0;
[row,column] = size(rxDataGhostIn);
if (column == 1)
rxDataGhostIn = rxDataGhostIn.';
end
[rxDataGhostOut0] = rayChan0(rxDataGhostIn.'); %输入必须为列向量
information=info(rayChan0);
fprintf('%d - ',information.NumSamplesProcessed); %打印接续信息
R2016b之前版本需要使用step方法通过信道
使用persistent变量这里未作验证
本模块存在的问题:多普勒设置为0时,初始信道频选特性与其它正数不一样(无论10-13这样的极小数或者10等数)