【现代通信】基于matlab协作通信仿真【含Matlab源码 1006期】
2021/6/18 22:33:49
本文主要是介绍【现代通信】基于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期】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-18机器学习与数据分析的区别
- 2024-10-28机器学习资料入门指南
- 2024-10-25机器学习开发的几大威胁及解决之道
- 2024-10-24以下是五个必备的MLOps (机器学习运维)工具,帮助提升你的生产效率 ??
- 2024-10-15如何选择最佳的机器学习部署策略:云 vs. 边缘
- 2024-10-12从软件工程师转行成为机器学习工程师
- 2024-09-262024年机器学习路线图:精通之路步步为营指南
- 2024-09-13机器学习教程:初学者指南
- 2024-08-07从入门到精通:全面解析机器学习基础与实践
- 2024-01-24手把手教你使用MDK仿真调试