现代通信基于matlab协作通信仿真含Matlab源码 1006期
Posted 紫极神光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了现代通信基于matlab协作通信仿真含Matlab源码 1006期相关的知识,希望对你有一定的参考价值。
一、简介
协作通信的核心问题是中继节点的协作协议。有两种最基本的中继协作方式放大转发(AF)与解码重传(DF),其它各种协作协议的研究,几乎均是建立在这两个固定中继协议之上。本文通过MATLAB仿真,来验证协作对通信的改善,分析不同信道情况和不同信噪比下的AF与DF的误码率和分集增益,来研究二者的实际性能与所面临的主要问题。
二、源代码
%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];
三、运行结果
四、备注
2014a
完整代码或代写加1564658423
以上是关于现代通信基于matlab协作通信仿真含Matlab源码 1006期的主要内容,如果未能解决你的问题,请参考以下文章
现代通信基于matlab OFDM通信系统仿真含Matlab源码 1005期
扩频通信基于matlab扩频通信系统仿真含Matlab源码 968期
现代通信基于matlab直接序列扩频通信含Matlab源码 1004期