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等數)