• 基于DF中继的协作MIMO通信系统matlab仿真


    目录

    一、理论基础

    二、核心程序

    三、仿真测试结果


     

    1. 作者ID :fpga和matlab
    2. CSDN主页:https://blog.csdn.net/ccsss22?type=blog
    3. 擅长技术:
    4. 1.无线基带,无线图传,编解码
    5. 2.机器视觉,图像处理,三维重建
    6. 3.人工智能,深度学习
    7. 4.智能控制,智能优化
    8. 5.其他

    一、理论基础

             FD-MIMO代表全维度多入多出技术(Full Dimension Multi-Input-Multi-Output, FD-MIMO)。那么,这里的全维是什么意思?它表示天线系统,可以形成一个波束(beams)在水平和垂直方向,覆盖(集中)在三维空间的任何地方。 

            由于频率复用技术的广泛应用,节点间的同频干扰凸显,并成为当前限制移动接入网络容量进一步提升的主要瓶颈之一。其中,中继节点面临的干扰是整个移动通信网络干扰问题的重要组成部分。虽然中继能够有效地提高分集增益和复用增益,但同时也受到同频干扰的制约,影响系统性能。对AF/DF协作方式下最优中继选择进行了研究,以使得在同频干扰下MIMO中继系统信噪比最大化,并对AF/DF方式下的最优MIMO中继在同频干扰下的中断概率进行性能分析。通过理论推导和蒙特卡罗仿真结果表明,与AF,DF协议中继在同频干扰下的中断概率性能相比,AF/DF方式下最优中继选择在同频干扰下的中断概率远低于AF,DF协议中继在同频干扰下的中断概率。

            协作通信是一种利用移动中继节点来增加特定用户容量的技术,这种技术的原理是在小区所有节点工作频带相同的情况下,可以将系统分解成三类节点,基站为源节点、特定用户(高速用户)为目的节点、其他用户终端为中继节点,所有中继节点都可以看作是特定用户节点的收发天线,从而网络就等于一个多输入多输出(MIMO)天线系统,被称为是虚拟多入多出天线(V-MIMO)系统,能支持高速用户的特定容量。因此,这种技术被称为“协作通信”。
            简单来说,就是基站给你发数据的时候,处于该基站覆盖范围内的移动台也可以接收到基站给你发送的数据,然后接收到该数据的所有移动台对数据进行处理之后,再把它们发送给你的移动台。该方法使用带有一根天线的移动台,在多用户环境中可以共享其他移动用户的天线,这样可产生多根虚拟发射天线,进而得到相应的分集增益,改善移动通信系统的性能。

    AF
           放大转发中继,指的是中继节点收到信号之后,不对信号进行解码或编码,直接将收到的信号转发给目的节点。
    优点: 做法比较简单,减少中继的压力。
    缺点: 中继节点处的噪声也转发给目的节点。

           在AF模式下,中继节点对收到的数据不进行任何的解调或解码操作,只对信号的功率作归一化处理,然后用自身的发射功率将信号放大后发射给目的节点。
           AF方式:操作简单,开销小,复杂度低,但在放大有用信号的同时也放大了噪声,在信道状况较差时并不能获得良好的性能。
          中继节点不对接收的信号进行解调和解码,而是直接将收到的信号进行模拟处理后转发,这是采用最早的一种协作模式。 在该机制中,每个用户接收它伙伴发送过来的带有噪声的信号,接着对该信号进行放大,然后将放大的带有噪声信号重新发送。基站将对用户和其伙伴传送来的数据进行合并判决。 尽管协作者在进行放大时也放大了噪声,但是基站接收到两个独立的衰落信号,最后能作出较好的判决。

    DF
            解码转发中继,指的是中继节点收到信号之后,对信号进行解码,然后将解码结果进行重新编码,最后转发给目的节点。
    优点: 避免中继节点的噪声转发到目的节点,导致目的节点处噪声过大。
    缺点: 协议比较复杂,同时中继节点的计算压力比较大。

           在DF模式下,中继节点对用户的信息进行解调,解码之后仍用原来的编码方式进行编码,然后发送给目的节点。通过循环冗余校验来判断是否收到正确的数据包,如果无误则进行转发,如果有误则将其丢弃。
           DF方式:通过对数据先进行解调解码从而将源节点与中继节点之间的噪声剔除掉,同时利用循环冗余校验(CRC)避免了错误信息的扩散,但是会降低频谱效率,丢弃数据包也会损失一定的能量,造成接收端信噪比的下降。因此比较适合信道状况较好时使用。
    AF和DF方式都是对信息的重复传输。
           DF方式不会带来噪声传播的问题,但是如果不采用CRC循环冗余校验,则得不到满分集阶数。并且中继节点对源节点信息解码错误所带来的的误差会随着跳数(经历的中继节点的个数)的增加而产生累积。

    二、核心程序

    1. clc;
    2. clear;
    3. close all;
    4. warning off;
    5. pack;
    6. addpath 'func\'
    7. Snr_1 = 1;
    8. Snr_2 = 15;
    9. %信号功率
    10. Power_signal = 0.2;
    11. Monte_Times = 100;
    12. M = 4; %QPSK调制
    13. N = 1e4;%仿真bit
    14. %产生信号源
    15. Signal = randint(1,N,M);
    16. Signal_mod = modulate(modem.pskmod(M),Signal);
    17. %产生信道
    18. %Source and Destination
    19. H_sd = func_Rayleigh_Channel(1,1);
    20. %节点1信道
    21. H_sr1 = func_Rayleigh_Channel(1,7);
    22. H_rd1 = func_Rayleigh_Channel(1,7);
    23. Index = 0;
    24. for SNR_dB=Snr_1:Snr_2
    25. SNR_dB
    26. Index = Index+1;
    27. ERR = 0;
    28. for Times = 0:Monte_Times
    29. RandStream.setDefaultStream(RandStream('mt19937ar','seed',Times));
    30. sig = 10^(SNR_dB/10);
    31. Power_Signals = Power_signal;
    32. Power_Niose = Power_Signals / sig;
    33. %直接模式下不通过中继节点直接进行传输
    34. Y_S2D = awgn(sqrt(Power_signal)*H_sd*Signal_mod,SNR_dB);
    35. Y_S2R1 = awgn(sqrt(Power_signal)*H_sr1*Signal_mod,SNR_dB);
    36. Y_S2R = [Y_S2R1];
    37. H_sr = [H_sr1];
    38. H_rd = [H_rd1];
    39. %选瞬时信噪比最大的座位转发中继
    40. R1 = SNR_dB*(abs(H_sr1))^2;
    41. R = [R1];
    42. [V,I] = max(R);
    43. Y_S2RO = Y_S2R(I,:);
    44. H_rdO = H_rd(I);
    45. H_srO = H_sr(I);
    46. %DF
    47. x_ODF = func_DF(M,Y_S2RO,Signal);
    48. y_rd = awgn(sqrt(0.5)*H_rdO * x_ODF, SNR_dB);
    49. y_combine_ODF = func_MRC(H_sd,H_rdO,Power_Signals,Power_Niose,Y_S2D,y_rd);
    50. y_ODF = demodulate(modem.pskdemod(M),y_combine_ODF);
    51. %计算中断概论
    52. ERR = ERR + func_ber(Signal,y_ODF);
    53. end
    54. BERS(Index) = ERR/(N*Monte_Times);
    55. end
    56. SNR_dB = Snr_1:1:Snr_2;
    57. figure;
    58. semilogy(SNR_dB,BERS,'r-o');
    59. grid on;
    60. ylabel('BER');
    61. xlabel('SNR(dB)');
    62. axis([Snr_1,Snr_2,10^(-6),1]);
    63. save DF1.mat SNR_dB BERS

    三、仿真测试结果

    A01-66

  • 相关阅读:
    An工具介绍之骨骼工具
    OpenLayers使用高德导航接口实现动画animate
    基于 socketio 的 room 的使用
    关于Linux Shell 脚本的制作
    【go零基础】go-zero从零基础学习到实战教程 - 1项目表设计
    基础练习 十进制转十六进制
    充电桩负载测试需要检测哪些项目
    C++算法:分发糖果
    远程连接PostgreSQL:配置指南与安全建议
    LeetCode 0792. 匹配子序列的单词数
  • 原文地址:https://blog.csdn.net/ccsss22/article/details/127437174