【协作通信】协作通信仿真含Matlab源码
【协作通信】协作通信仿真含Matlab源码
TT_Matlab
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。
1 简介
协作通信仿真
2 部分代码
%multi-hop ,主程序
tic
% --------------
% Set Parameters
nr_of_iterations =
1000
;
SNR = [-
10
:
1
:
10
];
use_direct_link =
1
;
use_relay =
1
;
global statistic;
statistic = generate_statistic_structure;
global signal;
signal = generate_signal_structure;
signal(
1
).nr_of_bits =
2
^
10
;
signal.modulation_type =
’BPSK’
;% ’BPSK’, ’QPSK’
calculate_signal_parameter;
channel = generate_channel_structure;
channel(
1
).attenuation(
1
).pattern =
’Rayleigh’
;% ’no’,’Rayleigh’
channel(
1
).attenuation(
1
).block_length =
1
;
channel(
2
) = channel(
1
);
channel(
3
) = channel(
1
);
channel(
4
) = channel(
1
);
channel(
5
) = channel(
1
);
channel(
6
) = channel(
1
);
channel(
7
) = channel(
1
);
channel(
8
) = channel(
1
);
channel(
9
) = channel(
1
);
channel(
10
) = channel(
1
);
channel(
11
) = channel(
1
);
channel(
12
) = channel(
1
);
rx = generate_rx_structure;
rx(
1
).combining_type =
’ERC’
; %’ERC’,’FRC’,’SNRC’,’ESNRC’,’MRC’
rx(
1
).sd_weight =
3
; % used
for
’FRC’
global relay;
relay = generate_relay_structure;
relay(
1
).mode =
’DAF’
; %’AAF’, ’DAF’
relay.magic_genie =
0
;
relay(
1
).rx(
1
) = rx(
1
); % same beahaviour
channel(
1
).attenuation.distance =
1
;
channel(
2
).attenuation.distance =
0
.
5
;
channel(
3
).attenuation.distance =
0
.
5
;
% ----------------
% Start Simulation
BER = zeros(size(SNR));
for
iSNR =
1
:size
(SNR,
2
)% returns the size of the dimension of SNR specified by scalar
2
disp([
’progress: ’
,int2str(iSNR),
’/’
,int2str(size(SNR,
2
))]) % Convert integer to string
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%
channel(
1
).noise(
1
).SNR = SNR(iSNR); % iSNR ??????
channel(
2
).noise(
1
).SNR = SNR(iSNR);
channel(
3
).noise(
1
).SNR = SNR(iSNR);
for
it =
1
:nr_of_iterations
;
% --------------
% Reset receiver
rx = rx_reset(rx);
relay.rx = rx_reset(relay.rx);
% -----------
% Direct link
if
(use_direct_link ==
1
)
[channel(
1
), rx] = add_channel_effect(channel(
1
), rx,...
signal.symbol_sequence);
rx = rx_correct_phaseshift(rx, channel(
1
).attenuation.phi);
end
% ------------中继传输 ---------------
if
(use_relay ==
1
) % 采用中继协作
% ----------只有
1
个中继 ---------
% Sender to relay
[channel(
2
), relay.rx] = add_channel_effect(channel(
2
),relay.rx, signal.symbol_sequence);
relay = prepare_relay2send(relay,channel(
2
));
% Relay to destination
[channel(
3
), rx] = add_channel_effect(channel(
3
), rx,relay.signal2send);
% [received_symbol,signal.received_bit_sequence]=rx_combine(rx,channel,use_relay);
switch relay.mode
% Correct phaseshift
case
’AAF’
rx = rx_correct_phaseshift(rx,...
channel(
3
).attenuation.phi + channel(
2
).attenuation.phi);
case
’DAF’
rx = rx_correct_phaseshift(rx,channel(
3
).attenuation.phi);
end
end
% Receiver
[received_symbol, signal.received_bit_sequence] = rx_combine(rx, channel(
1
),channel(
3
), use_relay);
BER(iSNR) = BER(iSNR) + sum(
not
(signal.received_bit_sequence == signal.bit_sequence));
if
(BER(iSNR) >
10000
)
% Stop iterate
break
;
end
end
% Iteration
if
(BER(iSNR)<
100
)
warning([
’Result might not be precise when SNR equal ’
,num2str(SNR(iSNR))])
end
BER(iSNR) = BER(iSNR) ./ it ./ signal.nr_of_bits;
end
% ---------------Present the result of the simulation---------------------
txt_distance = [
’ - distance: ’
,...
num2str(channel(
1
).attenuation.distance),
’:’
,...
num2str(channel(
2
).attenuation.distance),
’:’
,...
num2str(channel(
3
).attenuation.distance)];
%txt_distance=
’’
;
if
(use_relay ==
1
)
if
(relay.magic_genie ==
1
)
txt_genie =
’ - Magic Genie’
;
else
txt_genie =
’’
;
end
txt_combining = [
’ - combining: ’
, rx(
1
).combining_type];
switch rx(
1
).combining_type
case
’FRC’
txt_combining = [txt_combining,
’ ’
,...
num2str(rx(
1
).sd_weight),
’:1’
];% Convert number to string
end
add2statistic(SNR,BER,[signal.modulation_type,
’-’
,relay.mode, txt_combining,
’,’
,
’two-hop’
])
else
switch channel(
1
).attenuation.pattern
case
’no’
txt_fading =
’ - no fading’
;
otherwise
txt_fading =
’ - Rayleigh fading’
;
end
add2statistic(SNR,BER,[signal.modulation_type,
’-’
,relay.mode, txt_combining,
’,’
,
’two-hop’
])
end
%--
-------------多跳仿真-----------%
channel(
1
).attenuation.distance =
1
;
channel(
2
).attenuation.distance =
1
/
3
;
channel(
3
).attenuation.distance =
1
/
3
;
channel(
4
).attenuation.distance =
1
/
3
;
% ----------------
% Start Simulation
BER = zeros(size(SNR));
for
iSNR =
1
:size
(SNR,
2
)% returns the size of the dimension of SNR specified by scalar
2
disp([
’progress: ’
,int2str(iSNR),
’/’
,int2str(size(SNR,
2
))]) % Convert integer to string
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%
channel(
1
).noise(
1
).SNR = SNR(iSNR); % iSNR ??????
channel(
2
).noise(
1
).SNR = SNR(iSNR);
channel(
3
).noise(
1
).SNR = SNR(iSNR);
channel(
4
).noise(
1
).SNR = SNR(iSNR);
for
it =
1
:nr_of_iterations
;
% --------------
% Reset receiver
rx = rx_reset(rx);
relay.rx = rx_reset(relay.rx);
% -----------
% Direct link
if
(use_direct_link ==
1
)
[channel(
1
), rx] = add_channel_effect(channel(
1
), rx,...
signal.symbol_sequence);
rx = rx_correct_phaseshift(rx, channel(
1
).attenuation.phi);
end
% ----中继传输-----%
if
(use_relay ==
1
)
% Sender to relay
[channel(
2
), relay.rx] = add_channel_effect(channel(
2
),relay.rx, signal.symbol_sequence);
relay = prepare_relay2send(relay,channel(
2
));% ??this function
%relay1 to Relay2
[channel(
3
), relay.rx]=add_channel_effect(channel(
3
),relay.rx, relay.signal2send);
relay=prepare_relay2send(relay,channel(
3
));
%relay2 to destination
[channel(
4
),rx]=add_channel_effect(channel(
4
),rx,relay.signal2send);
switch relay.mode
% Correct phaseshift
case
’AAF’
rx = rx_correct_phaseshift(rx,...
channel(
2
).attenuation.phi + channel(
3
).attenuation.phi+ channel(
4
).attenuation.phi);
case
’DAF’
rx = rx_correct_phaseshift(rx,channel(
4
).attenuation.phi);
end
end
% Receiver
[received_symbol, signal.received_bit_sequence] = rx_combine(rx, channel(
1
),channel(
4
), use_relay);
BER(iSNR) = BER(iSNR) + sum(
not
(signal.received_bit_sequence == signal.bit_sequence));
if
(BER(iSNR) >
10000
)
% Stop iterate
break
;
end
end
% Iteration
if
(BER(iSNR)<
100
)
warning([
’Result might not be precise when SNR equal ’
,...
num2str(SNR(iSNR))])
end
BER(iSNR) = BER(iSNR) ./ it ./ signal.nr_of_bits;
end
% ---------------Present the result of the simulation---------------------
txt_distance = [
’ - distance: ’
,...
num2str(channel(
2
).attenuation.distance),
’:’
,...
num2str(channel(
3
).attenuation.distance),
’:’
,...
num2str(channel(
4
).attenuation.distance)];
%txt_distance=
’’
;
if
(use_relay ==
1
)
if
(relay.magic_genie ==
1
)
txt_genie =
’ - Magic Genie’
;
else
txt_genie =
’’
;
end
txt_combining = [
’ - combining: ’
, rx(
1
).combining_type];
switch rx(
1
).combining_type
case
’FRC’
txt_combining = [txt_combining,
’ ’
,...
num2str(rx(
1
).sd_weight),
’:1’
];% Convert number to string
end
add2statistic(SNR,BER,[signal.modulation_type,
’-’
,relay.mode, txt_combining,
’,’
,
’three-hop’
])
else
switch channel(
1
).attenuation.pattern
case
’no’
txt_fading =
’ - no fading’
;
otherwise
txt_fading =
’ - Rayleigh fading’
;
end
add2statistic(SNR,BER,[signal.modulation_type,
’-’
,relay.mode, txt_combining,
’,’
,
’three-hop’
])
end
% % -----------------
% % Graphs to compare
SNR_linear =
10
.^(SNR/
10
);
add2statistic(SNR,ber(SNR_linear,
’BPSK’
,
’Rayleigh’
),
’BPSK - single link transmiss’
)
% add2statistic(SNR,ber_2_senders(SNR_linear,
’QPSK’
),
’QPSK - 2 senders’
)
show_statistic;
toc
3 仿真结果
4 参考文献
[1]县惠媛. 多用户协作通信网络中无线资源分配技术的研究[D]. 中南大学, 2013.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
