📄 chk_parameters.m
字号:
function [sim, err]=chk_parameters(sim);
%check parameters after setting:
err=0;
if ~sim.sampling_rate | ~sim.carrier_freq | ~sim.symbol_rate ...
| ~sim.bandwidth,
disp('[chk_parameters]Error:sampling_rate, carrier_freq, symbol_rate or bandwidth cannot be zeros.')
err=-1;
return;
end
if sim.sampling_rate<2*sim.carrier_freq,
disp('[chk_parameters]Error:sampling_rate is less than Nyquist frequency.');err=-1; return;
end
if sim.carrier_freq<sim.symbol_rate,
disp('[chk_parameters]Error:carrier_freq is less than symbol rate.');err=-1; return;
end
if sim.bandwidth<0.5*sim.symbol_rate,
disp('[chk_parameters]Warning:bandwith is less than half of the symbol rate.');err=err+1;
end
ipoints=sim.sampling_rate/sim.symbol_rate;
if ipoints~=fix(ipoints),
disp('[chk_parameters]Error: Fractional sampling_rate/symbol_rate is not supportted');
err=-1;
return;
end
if sim.packet_time==0 && ~strcmp(lower(sim.packet_type), 'ofdm'),
sim.packet_time=sim.blank_time+sim.lfm_time+sim.preamble_time+sim.frame_time*sim.frame_num;
if sim.frame_num==0,
disp('[chk_parameters]Error: frame_num and packet_time are both zeros.')
err=-1;
return;
end
end
if sim.frame_num==0 && sim.packet_time~=0 && ~strcmp(lower(sim.packet_type), 'ofdm'),
sim.frame_num=round((sim.packet_time-sim.blank_time-sim.lfm_time-sim.preamble_time)/sim.frame_time);
sim.packet_time=sim.blank_time+sim.lfm_time+sim.preamble_time+sim.frame_time*sim.frame_num;
disp('[chk_parameters]Info: frame_num and packet_time have been adjusted.')
end
if sim.frame_num<=0 && ~strcmp(lower(sim.packet_type), 'ofdm'),
disp('[chk_parameters]Error: frame_num should be greater than zero.');err=-1; return;
end
if strcmp(lower(sim.appendix_type), 'prefix'),
if sim.appendix_time~=sim.prefix_time & sim.appendix_time~=0,
disp('[chk_parameters]Warning: appendix_time~=prefix_time.');
err=err+1;
end
sim.appendix_time=sim.prefix_time;
end
if sim.prefix_time+sim.appendix_time>sim.frame_time && ~strcmp(lower(sim.packet_type), 'ofdm')
disp('[chk_parameters]Error: prefix_time+appendix_time>frame_time')
err=-1;
return;
end
if sim.prefix_time+sim.appendix_time>0.8*sim.frame_time;
disp('[chk_parameters]Warning: prefix_time+appendix_time>0.8frame_time')
err=err+1;
end
if sim.frame_data_time==0 && ~strcmp(lower(sim.packet_type), 'ofdm'),
sim.frame_data_time=sim.frame_time-sim.prefix_time-sim.appendix_time;
elseif sim.frame_data_time~=sim.frame_time-sim.prefix_time-sim.appendix_time && ~strcmp(lower(sim.packet_type), 'ofdm'),
disp('[chk_parameters]Error: frame_time-prefix_time-appendix_time~=frame_data_time.')
err=-1;
return;
end
%update the sim.frame_data_len %will update again for OFDM
sim.frame_data_len=round(sim.frame_data_time*sim.symbol_rate);
if sim.ps_alpha>1
disp('[chk_parameters]Error: ps_alpha>1');
err=-1;
return;
end
if sim.tx_num==0,
sim.tx_num=1;
end
if sim.tx_num==1,
sim.multiplex_type='';
sim.multiplex_outvec=[];
elseif sim.tx_num>1,
isempty(sim.multiplex_type);
sim.multiple_outvec=[1: tx_num];
end
%set some default values.
if isempty(sim.packet_type),
sim.packet_type='sc';
end
if isempty(sim.pulse_shaping_type),
sim.pulse_shaping_type='sqrt';
sim.ps_alpha=.5000;
sim.ps_grp_delay=5;
end
if isempty(sim.mapping_msb),
sim.mapping_msb='msb_first';
end
%check some nessary values.
if isempty(sim.coding_type)
disp('[chk_parameters]Info: no coding_type specified.');
sim.coding_rate=1;
end
if isempty(sim.mapping_type)
disp('[chk_parameters]Error: no mapping_type.');
err=-1; return;
end
sim.mapping_rate=constell_mapping_rate(sim.mapping_type);
if strcmp(lower(sim.coding_type), '802_15_3_tcm'),
if sim.mapping_rate==2 | sim.mapping_rate==4 | sim.mapping_rate==5 | sim.mapping_rate==6,
sim.n_k=[sim.mapping_rate sim.mapping_rate-1];
sim.coding_rate=sim.n_k(2)/sim.n_k(1);
sim.coding_reg_num=3;
else
disp('[chk_parameters]Error: 802_15_3_tcm for other than (qpsk/qam16/qam32/qam64) are not supported.')
end
end
if sim.coding_rate==0,
disp('[chk_parameters]Error: coding_rate is zero.');
err=-1; return;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -