【OFDM通信】基于matlab OFDM多用户资源分配仿真【含Matlab源码 1902期】

举报
海神之光 发表于 2022/06/24 00:14:10 2022/06/24
【摘要】 一、OFDM简介 为了缓解无线频谱日益紧张的局面,认知无线电技术受到了越来越广泛的关注.与传统传输技术相比,认知无线电技术有着更高的灵活性和智能性.其最大特点是可以感知周围的频谱环境(主要是频谱使用状况...

一、OFDM简介

为了缓解无线频谱日益紧张的局面,认知无线电技术受到了越来越广泛的关注.与传统传输技术相比,认知无线电技术有着更高的灵活性和智能性.其最大特点是可以感知周围的频谱环境(主要是频谱使用状况),找到可以使用的频谱空洞[1],利用在特定时间内和特定地理位置上的空闲频段,从而极大地提高了频谱利用效率和系统容量.

认知无线电技术是继软件无线电技术后通信技术的发展趋势,它体现了通信技术从网络化向智能化的发展.无线电技术经历了固定模式,自适应模式后发展到认知模式.认知无线电具有感知功能,并通过感知结果,选择传输方案,同时无线终端具有“学习”功能,并能产生新的可供选择的传输方案的能力.

OFDM技术相对于其他传输技术优势在于可以灵活地分配子载波,作为下一代通信标准中具有广泛应用前景的技术,同样在认知无线电中也具有广泛的应用前景.认知用户所使用的频带并不是固定分配的,是随机变化的,并可能是不连续的.OFDM可以通过自适应给个别子载波分配零功率来调整带宽,其优势在于可以灵活地分配子载波并控制其功率.笔者针对OFDM系统提出了一种多用户子载波及其功率分配算法.

1 认知无线电系统模型
认知无线电系统体现了更高的智能化,它可以主动地感知无线环境,感知周围频谱使用情况,因此认知无线电系统必须具有频谱分析和信道估计单元负责检测频谱,寻找可以使用的频谱空洞.认知无线电所使用的频谱空洞是指已经分配给授权用户的,而授权用户在特定时间内没有使用或者在较远的特定地理位置上使用的频段.
在这里插入图片描述
图1 认知环示意图

经典的认知无线电系统包括对无线环境的感知、频谱资源估计、资源分配算法,构成了一个闭环,如图1所示.

Simon Haykin提出了认知环的概念,在认知环中可以看出认知无线电系统需要考虑一个新的物理量——干扰温度.干扰温度限制了频谱上功率的分配,即限制了信道容量的上限.认知无线电系统可以根据检测到的频谱使用情况和相应频谱上的干扰温度,在多用户中动态地分配资源,达到充分利用频谱的目的.

如何使多个认知用户充分利用检测到的频谱空洞,就转化为如何在多个认知用户之间分配这些子载波,以及分配这些子载波上的发射功率.这正是本文中研究的重点.具有多用户自适应资源分配的发射机原理框图如图2所示.在传统的多用户OFDM系统的基础上增加了资源检测、功率分配算法和功率控制单元.

2 多用户资源分配算法
资源分配指在认知AP(Access Point)节点的下行链路上针对多种类型认知用户(类型可以是手机,车载电台,PDA或其他)的算法研究.认知AP节点高效地利用检测到的频谱空洞通过实时动态的分配下行链路中的频谱资源.资源分配算法主要考虑功率受限和设备类型两个因素.

认知AP节点在收到要求进行通信的认知用户请求信息后,首先对周围的频谱使用情况进行检测,找到可以使用的频谱空洞,同时要获得所有认知用户在可以使用的频谱空洞上所呈现的衰落特性,以及整个系统功率覆盖范围内的授权用户的信息.这些是认知AP节点进行资源分配算法的依据.

认知AP节点根据上述获得的信息要在下行链路中完成功率分配和子载波的指配,认知无线电的功率分配算法要考虑对授权用户的功率干扰.在进行资源分配时,功率受限子载波的分配功率不能超过各自的功率上限,这要求分配算法要给每个子载波分配一个预分配功率,以保证不干扰授权用户的正常通信.

在资源分配过程中遵循比例公平原则,防止信道特性比较好的用户占用了大部分频谱空洞,而其他用户尤其是信道特性比较差的用户不能保证正常通信.本文中只考虑认知用户对于授权用户的干扰.认知用户对授权用户的干扰集中体现在对授权用户信干比的干扰.

设RSI表示授权用户处的信干比,
在这里插入图片描述
可以看出这是一个非线性优化问题,最优值的求解很复杂,这里给出了一种首先分配子载波再分配功率的次优值二步求解算法.

二、部分源代码

clear all;
worstpower=1.1565;
N0=worstpower*1e-8;
Ptotal=1;
BER = 1e-3;
Gap = -log(5*BER)/1.6;

channelnum=10;
samplenum=10;
numuser = 8;

epsilong=1e-3;
maxNumOfNewton=0;
maxTotalNewtonIteNum=0;

avenonlintime = zeros(1,numuser);
aveshentime = zeros(1,numuser);
aveiantime = zeros(1,numuser);


diffuservector = [];
iancapamat = [];
shencapamat = [];

cc = 1;

clear shencapa iancapa
N=64;            % 子载波数目
B=1000000;       % 带宽是1MHz

noise=B*N0/N;
clear ch


%for different user number
for ii=1:numuser,
    diffuser=2*ii;
    diffuservector(ii)=diffuser;
    K=diffuser;

    totaliancapa=0;
    totalshencapa=0;
    totalnonlincapa = 0;

    shencapavec = zeros(1,diffuser);
    iancapavec = zeros(1,diffuser);

    iannorm = 0;
    shennorm = 0;
    nonlinnorm = 0;


    %for different channel
    for chan=1:channelnum,
        chan
        [env,I,Q]=chtry(K,samplenum,30);
        h = rand(1,K);
        gamma = .064*(h < .5) + .128*((h >= .5) & (h < .8)) + .256*(h>.8);%%how to generate the coefficient

        %for diff samples
        for diffsamp=1:samplenum,
            diffsamp
            for i=1:K
                user=I(i,:,diffsamp)+sqrt(-1)*Q(i,:,diffsamp);
                ch(i,:)=abs(fft(user,N)).^2/Gap;%%channel in frequency domain
            end


            % Shen's subcarrier allocation
            [rheecapa,rheesuballo]=rheesub(Ptotal,ch, N, K, noise, gamma);

            % Shen's power allocation
            t=cputime;  shenp = shenpowerallo(ch,rheesuballo,N,K,Ptotal,noise,gamma); shentime = cputime-t;
            aveshentime(ii) = aveshentime(ii) + shentime;

            % Ian's subcarrier allocation
            [iancapa,iansuballo]=wongsuballo(Ptotal, ch, N, K, noise, gamma);

            % Ian's power allocation
            t=cputime; ianp = wongpowerallo(ch,iansuballo,N,K,Ptotal,noise,gamma); iantime = cputime-t;
            aveiantime(ii) = aveiantime(ii) + iantime;

            for i=1:K,
                shencapa(i) =  waterfilling(shenp(i),rheesuballo(i,:).*ch(i,:)/noise)/N;
                iancapa(i) = waterfilling(ianp(i),iansuballo(i,:).*ch(i,:)/noise)/N;
            end;

            totalshencapa=totalshencapa+sum(shencapa);
            totaliancapa=totaliancapa+sum(iancapa);

            if (chan == 1),
                shencapavec = shencapavec + shencapa;
                iancapavec = iancapavec + iancapa;
                if (chan ==  1 & diffsamp == 1),
                    figure(2);
                    bar([gamma/sum(gamma); iancapavec/sum(iancapavec); shencapavec/sum(shencapavec)]', 'grouped');%; nonlincapavec/sum(nonlincapavec)]', 'grouped');
                    title('快照');
                end;
            end;
            iannorm = iannorm + norm(iancapa/sum(iancapa) - gamma/sum(gamma), inf);
            shennorm = shennorm + norm(shencapa/sum(shencapa) - gamma/sum(gamma), inf);
        end

        if (chan == 1),
            iancapavec = iancapavec/(channelnum*samplenum);
            shencapavec = shencapavec/(channelnum*samplenum);
            figure(5);
            bar([gamma/sum(gamma); iancapavec/sum(iancapavec); shencapavec/sum(shencapavec)]', 'grouped');
            legend('伽玛', '线性', '寻根');
        end;
        %end diff channel
    end
    maxNumOfNewton;
    maxTotalNewtonIteNum;
    totalshencapavec(ii)=totalshencapa/(channelnum*samplenum);
    totaliancapavec(ii)=totaliancapa/(channelnum*samplenum);
    iannormvec(ii) = iannorm/(channelnum*samplenum);
    shennormvec(ii) = shennorm/(channelnum*samplenum);
end

% total capacities plot
figure(1)
plot(diffuservector,totaliancapavec, 'ko--', diffuservector, totalshencapavec, 'b+-.');%, diffuservector, totalnonlincapavec, 'rx-.');
iansumcapa = sum(totaliancapavec)
shensumcapa = sum(totalshencapavec)

grid on
xlabel('用户数')
ylabel('容量 (bit/s/Hz)')
legend('线性', '寻根');     %, 'NONLIN');
hold off

aveshentime = aveshentime/(channelnum*samplenum)
aveiantime = aveiantime/(channelnum*samplenum)

figure(3);
semilogy(diffuservector,aveiantime, 'ko--', diffuservector,aveshentime, 'b+-.');%, diffuservector, avenonlintime, 'rx-.');
grid on
xlabel('用户数')
ylabel('平均CPU时间(s)')
legend('线性', '寻根');      %, 'NONLIN');
title('平均CPU时间比较');







  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.
[4]李维英,陈东,邢成文,王宁.认知无线电系统中OFDM多用户资源分配算法[J].西安电子科技大学学报. 2007,(03)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/125407782

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。