目錄
1.算法描述
2.仿真效果預覽
3.MATLAB核心程式
4.完整MATLAB
1.算法描述
假設有M個使用者均為MIMO Full Duplex,N個頻率,1<N<M,設計算法實作M個使用者與N個頻率的比對。
由于在一個MIMO系統中,使用者數量M大于可用的頻譜個數N,是以,必有一部分使用者存在頻譜共享的問題。目前,現有的關于頻譜配置設定的方法主要有基于競價的配置設定方法,基于博弈論的配置設定方法,現有資料,主要都是這兩種方法。下面針對這個問題,提出如下的改進方案:
這個改進方案,命名為基于改進遺傳優化算法的多因素權重競價博弈頻譜配置設定算法。
這裡,有别于傳統的頻譜配置設定方法,這裡的配置設定方法,考慮了多種因素,我們分别假設為y1,y2,y3,。。。。。yn,并通過遺傳優化算法,計算一種配置設定方案,即M個使用者配置設定到N個頻譜上, 分别計算以不同因素進行劃分所得到的效益值V1,V2,V3,。。。。。Vn,,最後将這将這n個因素進行權重,得到其綜合效益值:
根據遺傳優化算法流程可知,其詳細步驟如下所示:
步驟一:選擇問題解的一個編碼,給出一個有N個染色體的初始群體。編碼的主要功能為确定用何種碼制,然後将問題參數編碼形成基因碼鍊,每一個碼鍊代表一個個體,表示優化問題的一個解。 根據編碼方式不同可以分為二進制編碼和實數編碼兩種類型,其中二進制編碼的優勢在于編碼方式簡單,便于遺傳算法的交叉和編碼操作。
步驟二:對群體中的每一個染色體,計算它的适應函數值。适應函數值為群體進化時的選擇提供了依據,一般來說适應度越高,解的素質越好。适應度函數可以根據目标函數而定。
步驟三:若停止規則滿足,則算法停止,否則計算機率P,并以此機率分布,從舊的種群pop(t)中随機選取N個染色體構成一個新的種群。選擇操作常見的操作方式有比例 選擇和排序選擇方式。
步驟四:通過交叉,得到N個染色體的交叉集合。交叉的主要功能從種群中随機選擇兩個染色體,按一定的機率進行基因交換,交換位置的選取是随機的。
競價和博弈相結合的聯合配置設定方法;
值最大的使用者,有先配置設定頻譜資源,值最小的,則根據實際頻譜資源情況,進行共用某一相同的頻譜資源。
2.仿真效果預覽
matlab2022a仿真結果如下:
3.MATLAB核心程式
clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
K=20; %使用者對數
N=2; %收發天線數
INR_dB=5;INR=db2pow(5);
eta=INR/N; %使用者對間的幹擾
SI=db2pow(20); %自幹擾
u=1; %weighted
k = db2pow(-40);
beta = db2pow(-40);
times=5;
SNR_dB= -10:10:50;
rho_real=db2pow(SNR_dB)/N;
sum_rate_HD=zeros(1,length(rho_real));
sum_rate_FD=zeros(1,length(rho_real));
sum_rate_HD_TDMA=zeros(1,length(rho_real));
sum_rate_FD_TDD=zeros(1,length(rho_real));
for tt=1:times
tt
%通信信道
H_cha= rayleigh( N,N,2*K);
%自幹擾信道
H_sel= rayleigh( N,N,2*K);
%使用者間幹擾信道
H_int= rayleigh( N,N,8*K);
Rate_HD=zeros(1,length(rho_real));
Rate_HD_TDMA=zeros(1,length(rho_real));
Rate_FD=zeros(1,length(rho_real));
Rate_FD_TDD=zeros(1,length(rho_real));
i=1;
for rho=rho_real
% rho
V=right_singular(H_cha,2*K);
[ Rate_HD_get ] = HD_MIMO_interference(N,H_int,H_cha,H_sel,V,rho,eta,beta,k,u ,K);
Rate_HD(i)=Rate_HD_get;
[ Rate_FD_get ] = FD_MIMO_interference(N,H_int,H_cha,H_sel,V,rho,eta,SI,beta,k,u ,K);
Rate_FD(i)=Rate_FD_get;
i=i+1;
end
sum_rate_HD=sum_rate_HD+Rate_HD;
sum_rate_FD=sum_rate_FD+Rate_FD;
end
sum_rate_HD=real(sum_rate_HD/times/2);
sum_rate_FD=real(sum_rate_FD/times);
figure;
semilogy(SNR_dB,sum_rate_FD,'b-^','linewidth',2);
hold on
semilogy(SNR_dB,sum_rate_HD,'b-s','linewidth',2);
grid on;
xlabel('SNR (dB)')
ylabel('sum Rate (b/s/HZ)')
legend('FD','HD')
01-140m
4.完整MATLAB
V