抗干扰算法实现

发布时间:2026/6/30 8:27:30

抗干扰算法实现 1、mainclc clear close all tic; MCS0; % 调制系数0~22 JSR[0 5 10 15 20 30 60]; %干信比/dB numJSRlength(JSR); %干信比总数 UserAziArray[0 5 10 15 20 25 30 35]; %通信信号方位角数组 numAzilength(UserAziArray); %方位角总数 JamAziArray0*ones(1,numAzi); %干扰信号方位角数组 numSubFrame100; %仿真子帧总数 nSnapCount1200; %构造协方差矩阵快拍数 SNRmat[-11 -7 -2.4 5]; %MCS0时信噪比设置 %SNRmat[-7 -2.4 5 8]; %MCS6时信噪比设置 %SNRmat[-2.4 5 8 10]; %MCS12时信噪比设置 %SNRmat[5 8 10 15]; %MCS22时信噪比设置 for idxSNR1:length(SNRmat) SNR SNRmat(idxSNR)*ones(1,numJSR); %信噪比/dB BLER0_2Dzeros(numAzi,numJSR); %无干扰抑制时误块率 BLER1_2Dzeros(numAzi,numJSR); %有干扰抑制时误块率 for idxAzi1:numAzi UserAziUserAziArray(idxAzi); %通信信号方位角 JamAziJamAziArray(idxAzi); %干扰信号方位角 %添加干扰不进行干扰抑制仿真 bAddJam1; %是否添加干扰标志0不添加干扰1添加干扰 bJamSupress0; %是否进行干扰抑制标志0不进行干扰抑制1进行干扰抑制 [BLER0,CrcSucc0,CrcFail0,CrcTotal0]AntiJam_LTE_UL_Platform(UserAzi,JamAzi,MCS,SNR,JSR,numSubFrame,bAddJam,bJamSupress,nSnapCount); %添加干扰进行干扰抑制仿真 bAddJam1; %是否添加干扰标志0不添加干扰1添加干扰 bJamSupress1; %是否进行干扰抑制标志0不进行干扰抑制1进行干扰抑制 [BLER1,CrcSucc1,CrcFail1,CrcTotal1]AntiJam_LTE_UL_Platform(UserAzi,JamAzi,MCS,SNR,JSR,numSubFrame,bAddJam,bJamSupress,nSnapCount); BLER0_2D(idxAzi,:)BLER0; BLER1_2D(idxAzi,:)BLER1; end %绘制不同夹角下的抗干扰性能曲线 for idxAzi1:numAzi BLER0BLER0_2D(idxAzi,:); BLER1BLER1_2D(idxAzi,:); angleUserAziArray(idxAzi)-JamAziArray(idxAzi); % 干扰信号与通信信号夹角 figure plot(JSR,BLER0,b-.s,JSR,BLER1,r:o); grid on; xlabel(干信比/dB); ylabel(BLER); ylim([0 1]); yticks([0:0.1:1]); legend(无干扰抑制,有干扰抑制); strTitle[误块率仿真结果(MCS num2str(MCS) , SNR num2str(SNR(1)) dB, 夹角 num2str(angle) °)]; title(strTitle); end %存储不同SNR下的抗干扰性能表格 Tab0array2table(BLER0_2D); strFileName0[MCS num2str(MCS) SNR num2str(SNR(1)) dB num2str(nSnapCount) Samples Tab0.xlsx]; writetable(Tab0, strFileName0, sheet, 无干扰抑制仿真结果, WriteVariableNames, false, AutoFitWidth, true); Tab1array2table(BLER1_2D); strFileName1[MCS num2str(MCS) SNR num2str(SNR(1)) dB num2str(nSnapCount) Samples Tab1.xlsx]; writetable(Tab1, strFileName1, sheet, 有干扰抑制仿真结果, WriteVariableNames, false, AutoFitWidth, true); Arr0table2array(Tab0); strFileName0[MCS num2str(MCS) SNR num2str(SNR(1)) dB num2str(nSnapCount) Samples Arr0.txt]; writematrix(Arr0,strFileName0,Delimiter,tab) Arr1table2array(Tab1); strFileName1[MCS num2str(MCS) SNR num2str(SNR(1)) dB num2str(nSnapCount) Samples Arr1.txt]; writematrix(Arr1,strFileName1,Delimiter,tab) end toc;2、JacobiEvd %Jacobi算法求解实数协方差矩阵特征值和特征向量%%Jacobi算法求解实数协方差矩阵特征值和特征向量 function [V,D]JacobiEvd(R) %R--实数协方差矩阵维数8X8 %V--特征向量维数8X8 %D--特征值对角矩阵维数8X8 nSensorsize(R,1); Veye(nSensor,nSensor); for p1:nSensor for qp1:nSensor rpqR(p,q); rppR(p,p); rqqR(q,q); theta0.5*atand(2*rpq/(rpp-rqq)); R(p,p)rpp*cosd(theta)^22*rpq*cosd(theta)*sind(theta)rqq*sind(theta)^2; R(q,q)rpp*sind(theta)^2-2*rpq*cosd(theta)*sind(theta)rqq*cosd(theta)^2; R(p,q)0.5*(rqq-rpp)*sind(2*theta)rpq*cosd(2*theta); R(q,p)R(p,q); for i1:nSensor ripR(i,p); riqR(i,q); if i~p i~q R(i,p)rip*cosd(theta)riq*sind(theta); R(i,q)-rip*sind(theta)riq*cosd(theta); R(p,i)R(i,p); R(q,i)R(i,q); end end for i1:nSensor vipV(i,p); viqV(i,q); V(i,p)vip*cosd(theta)viq*sind(theta); V(i,q)-vip*sind(theta)viq*cosd(theta); end end end DR; end3、%%获取投影矩阵function [ProMat,sigma2]GetPorMat(Xjam)%%获取投影矩阵 function [ProMat,sigma2]GetPorMat(Xjam) %Xjam --8天线零功率子载波频域数据维数8X1200每行对应1个天线接收数据 %ProMat--投影矩阵维数8X8 %sigma2--噪声功率 %构造实协方差矩阵 Xsub1Xjam(1:4,:); Xsub2Xjam(5:8,:); Mreal(Xsub1)real(Xsub2); Limag(Xsub1)-imag(Xsub2); Z[M;L]; RZ*Z/size(Z,2); %实协方差矩阵特征值分解 [V,D]JacobiEvd(R); nSensorsize(Xjam,1); [D,Idx]sort(diag(D),descend ); %特征值从大到小排序 VV(:,Idx); sigma2D(nSensor); %提取噪声功率 %nJamlength(find(D/sigma210)); nJamEstSrcNum(D,size(Z,2)); if nJam0 %构造实数干扰子空间 SintV(:,1:nJam); %将实数干扰子空间转换为复数干扰子空间 U1/sqrt(2)*[eye(4,4) eye(4,4);-1j*eye(4,4) 1j*eye(4,4)]; SjamU*Sint; %计算投影矩阵 ProMateye(nSensor,nSensor)-Sjam*Sjam; else ProMateye(nSensor,nSensor); end end2、sim_param_parsefunction [LTE_CommConfigPara, LTE_UEConfigPara] sim_param_parse(Case_Name, LTE_CommConfigPara, LTE_UEConfigPara) Case_Name_Input [Case_Name,.txt]; iCaseParam textread(Case_Name_Input,%s,delimiter,\n); iCaseParam_1 iCaseParam(2:end); for i 1:size(iCaseParam_1,1) Param_name iCaseParam_1{i,1}; if (strfind(Param_name,end\tr)) break; else if strfind(Param_name,NumOfUe) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.NumOfUe str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,NumOfFrm) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.NumOfFrm str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,ucCellID) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.CellID str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,BandWidth) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.BandWidth str2num(Param_name(start_idx:end_idx))/10; end if strfind(Param_name,SNR) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_CommConfigPara.SNR str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,Rnti) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.Rnti str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,ChannType) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; split_idx strfind(Param_name(start_idx:end_idx), ); if isempty(split_idx) LTE_UEConfigPara.ChannType(1,:) Param_name(start_idx:end_idx); else start_idx_1 start_idx; for ii 1:1:length(split_idx) end_idx_1 start_idx split_idx(ii)-2; LTE_UEConfigPara.ChannType(ii,:) strrep( LTE_UEConfigPara.ChannType(ii,:),LTE_UEConfigPara.ChannType(ii,:),Param_name(start_idx_1:end_idx_1));%Param_name(start_idx_1:end_idx_1); start_idx_1 start_idx split_idx(ii); end if split_idx(ii)start_idx-1 ~ end_idx LTE_UEConfigPara.ChannType(ii1,:) strrep( LTE_UEConfigPara.ChannType(ii,:),LTE_UEConfigPara.ChannType(ii,:),Param_name(start_idx_1:end_idx)); end end end if strfind(Param_name,RbStart) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; subframe_len size(LTE_UEConfigPara.PuschConfig.RbStart,2); Rb_Start str2num(Param_name(start_idx:end_idx)); for ii 1:1:length(Rb_Start) LTE_UEConfigPara.PuschConfig.RbStart(ii,:) repmat(Rb_Start(ii), 1, subframe_len); end end if strfind(Param_name,RbLen) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; subframe_len size(LTE_UEConfigPara.PuschConfig.RbLen,2); Rb_Len str2num(Param_name(start_idx:end_idx)); for ii 1:1:length(Rb_Len) LTE_UEConfigPara.PuschConfig.RbLen(ii,:) repmat(Rb_Len(ii), 1, subframe_len); end end if strfind(Param_name,MCSIdx) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; subframe_len size(LTE_UEConfigPara.PuschConfig.MCSIdx,2); MCS_Idx str2num(Param_name(start_idx:end_idx)); for ii 1:1:length(MCS_Idx) LTE_UEConfigPara.PuschConfig.MCSIdx(ii,:) repmat(MCS_Idx(ii), 1, subframe_len); end end if strfind(Param_name,nDMRS_2) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; subframe_len size(LTE_UEConfigPara.PuschConfig.nDMRS_2,2); n_DMRS_2 str2num(Param_name(start_idx:end_idx)); for ii 1:1:length(n_DMRS_2) LTE_UEConfigPara.PuschConfig.nDMRS_2(ii,:) repmat(n_DMRS_2(ii), 1, subframe_len); end end if strfind(Param_name,UCIisOverPUSCH) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; subframe_len size(LTE_UEConfigPara.PuschConfig.UCIisOverPUSCH,2); UCIisOver_PUSCH str2num(Param_name(start_idx:end_idx)); for ii 1:1:length(UCIisOver_PUSCH) LTE_UEConfigPara.PuschConfig.UCIisOverPUSCH(ii,:) repmat(UCIisOver_PUSCH(ii), 1, subframe_len); end end if strfind(Param_name,numAckBits) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; subframe_len size(LTE_UEConfigPara.PuschConfig.numAckBits,2); num_AckBits str2num(Param_name(start_idx:end_idx)); for ii 1:1:length(num_AckBits) LTE_UEConfigPara.PuschConfig.numAckBits(ii,:) repmat(num_AckBits(ii), 1, subframe_len); end end if strfind(Param_name,betaOffsetACKIndex) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; subframe_len size(LTE_UEConfigPara.PuschConfig.numAckBits,2); beta_OffsetACKIndex str2num(Param_name(start_idx:end_idx)); for ii 1:1:length(beta_OffsetACKIndex) LTE_UEConfigPara.PuschConfig.betaOffsetACKIndex(ii,:) repmat(beta_OffsetACKIndex(ii), 1, subframe_len); end end if strfind(Param_name,numCqiBits) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; subframe_len size(LTE_UEConfigPara.PuschConfig.numAckBits,2); num_CqiBits str2num(Param_name(start_idx:end_idx)); for ii 1:1:length(num_CqiBits) LTE_UEConfigPara.PuschConfig.numCqiBits(ii,:) repmat(num_CqiBits(ii), 1, subframe_len); end end if strfind(Param_name,betaOffsetCQIIndex) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; subframe_len size(LTE_UEConfigPara.PuschConfig.numAckBits,2); beta_OffsetCQIIndex str2num(Param_name(start_idx:end_idx)); for ii 1:1:length(beta_OffsetCQIIndex) LTE_UEConfigPara.PuschConfig.betaOffsetCQIIndex(ii,:) repmat(beta_OffsetCQIIndex(ii), 1, subframe_len); end end if strfind(Param_name,numRiBits) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; subframe_len size(LTE_UEConfigPara.PuschConfig.numAckBits,2); num_RiBits str2num(Param_name(start_idx:end_idx)); for ii 1:1:length(num_RiBits) LTE_UEConfigPara.PuschConfig.numRiBits(ii,:) repmat(num_RiBits(ii), 1, subframe_len); end end if strfind(Param_name,betaOffsetRIIndex) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; subframe_len size(LTE_UEConfigPara.PuschConfig.numAckBits,2); beta_OffsetRIIndex str2num(Param_name(start_idx:end_idx)); for ii 1:1:length(beta_OffsetRIIndex) LTE_UEConfigPara.PuschConfig.betaOffsetRIIndex(ii,:) repmat(beta_OffsetRIIndex(ii), 1, subframe_len); end end if strfind(Param_name,N_bundled) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; subframe_len size(LTE_UEConfigPara.PuschConfig.numAckBits,2); N_bounding str2num(Param_name(start_idx:end_idx)); for ii 1:1:length(N_bounding) LTE_UEConfigPara.PuschConfig.N_bundled(ii,:) repmat(N_bounding(ii), 1, subframe_len); end end if strfind(Param_name,HARQType) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; subframe_len size(LTE_UEConfigPara.PuschConfig.numAckBits,2); HARQ_Type str2num(Param_name(start_idx:end_idx)); for ii 1:1:length(HARQ_Type) LTE_UEConfigPara.PuschConfig.HARQType(ii,:) repmat(HARQ_Type(ii), 1, subframe_len); end end % 配置Harq参数 if strfind(Param_name,HarqProcNum) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.HarqConfig.HarqProcNum str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,PuschTestSubframe) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.PuschTestSubframe str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,RecAnt) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.RecPortNum str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,MaxRetranNum) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.HarqConfig.MaxRetranNum str2num(Param_name(start_idx:end_idx)); end %%%%%%%%%%%%%%%%PUCCH参数 if strfind(Param_name,FormatType) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; Format repmat(Param_name(start_idx:end_idx),LTE_UEConfigPara.NumOfUe,1); end if strfind(Param_name,NumCQIbits) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; strtmp Param_name(start_idx:end_idx); splittmp strsplit(strtmp, ); NumCQIbits cellfun(str2num,splittmp); end if strfind(Param_name,NPucch1) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; strtmp Param_name(start_idx:end_idx); splittmp strsplit(strtmp, ); nPUCCH1 cellfun(str2num,splittmp); end if strfind(Param_name,NPucch2) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; strtmp Param_name(start_idx:end_idx); splittmp strsplit(strtmp, ); nPUCCH2 cellfun(str2num,splittmp); end %%%%%%%%%%%%%%%%PRACH参数 if strfind(Param_name,PrachCfgIndx) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.PrachConfig.ucPrachCfgIndx str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,Ncscfg) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.PrachConfig.ucNcscfg str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,startLogicRoot) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.PrachConfig.uwstartLogicRoot str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,prachFrequencyOffset) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.PrachConfig.ucprachFrequencyOffset str2num(Param_name(start_idx:end_idx)); end %%%%%%%%%%%%%%%%%%SRS参数 if strfind(Param_name,SrsBandwidthCfg) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; SrsBandwidthCfg str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,SrsBandwidth) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; SrsBandwidth str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,SrsHoppingBandwidth) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; SrsHoppingBandwidth str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,kTC) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; kTC str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,nSrsCs) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; nSrsCs str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,nRRC) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; nRRC str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,Isrs) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; Isrs str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,SrsSubframeConfig) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; SrsSubframeConfig str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,SrsMaxUpPts) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; SrsMaxUpPts str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,SrsTestSubframe) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.SrsTestSubframe str2num(Param_name(start_idx:end_idx)); end if strfind(Param_name,EnableSrsUeId) start_idx strfind(Param_name,[) 1; end_idx strfind(Param_name,]) - 1; LTE_UEConfigPara.SrsConfig.EnableSrsUeId str2num(Param_name(start_idx:end_idx)); LTE_UEConfigPara LTE_UeSrsConfig(LTE_UEConfigPara, SrsBandwidthCfg, SrsBandwidth, SrsMaxUpPts, SrsHoppingBandwidth, ... kTC, nSrsCs, nRRC, Isrs, SrsSubframeConfig) ; end end end if strcmp(LTE_UEConfigPara.ChannType(1,:), PUCCH) NumRB LTE_UEConfigPara.PucchConfig.NumRB; NRB2 LTE_UEConfigPara.PucchConfig.NRB2; NCS1 LTE_UEConfigPara.PucchConfig.NCS1; DeltaPUCCHshift LTE_UEConfigPara.PucchConfig.DeltaPUCCHshift; GroupHopping LTE_UEConfigPara.PucchConfig.GroupHopping; LTE_UEConfigPara LTE_UePucchConfig(LTE_UEConfigPara, nPUCCH1, nPUCCH2, Format, GroupHopping, NumRB, ... NumCQIbits, NRB2, NCS1, DeltaPUCCHshift); end end3、JamDetect%%在100RB所对应的子频带进行干扰检测%%在100RB所对应的子频带进行干扰检测 function JamFlagJamDetect(Xjam1,Th) %Xjam1--任一天线零功率子载波频域数据维数1X2048 %Th--干扰检测门限Th6*sigma2 %JamFlag--干扰检测结果标志维数1X100存放100个RB对应子频带干扰检测结果0代表没有干扰1代表有干扰 IdxDetectPos[1:600 1449:2048]; %100个RB所对应的子频带位置索引 Xjam1Xjam1(1,IdxDetectPos); %提取100个RB对应子频带的数据 nL12; %每个子频带数据长度对应1个RB的12个子载波 nQ100; %子频带总数对应100个RB JamFlagzeros(1,100); %存放100个子频带干扰检测结果 for i1:nQ nStart(i-1)*nL1; nEndi*nL; Pimean(abs(Xjam1(1,nStart:nEnd)).^2) ; if PiTh JamFlag(i)1; end end end4、EstSrcNum %MDL算法估计信源数%MDL算法估计信源数 function nSrcEstSrcNum(D,nSnapCount) %D--一维特征值向量从大到小排序 %nSnapCount--计算协方差矩阵快拍数 %nSrc--输出估计信源数 %正则化处理 lmdD; lmd_dlsqrt(sum(lmd)); lmdlmdlmd_dl; Mlength(D); for k0:M-1 lmdsum0; for ik1:M lmdsumlmdsumlmd(i); end sumavglmdsum/(M-k); lmdmul1; for ik1:M lmdmullmdmul*lmd(i); end mulavglmdmul^(1/(M-k)); Asumavg/mulavg; %MDL算法 MDL(k1)nSnapCount*(M-k)*log(A)0.5*k*(2*M-k)*log(nSnapCount); end [~,idx]min(MDL); nSrcidx-1; end5、GetPorMat %获取投影矩阵%%获取投影矩阵 function [ProMat,sigma2]GetPorMat(Xjam) %Xjam --8天线零功率子载波频域数据维数8X1200每行对应1个天线接收数据 %ProMat--投影矩阵维数8X8 %sigma2--噪声功率 %构造实协方差矩阵 Xsub1Xjam(1:4,:); Xsub2Xjam(5:8,:); Mreal(Xsub1)real(Xsub2); Limag(Xsub1)-imag(Xsub2); Z[M;L]; RZ*Z/size(Z,2); %实协方差矩阵特征值分解 [V,D]JacobiEvd(R); nSensorsize(Xjam,1); [D,Idx]sort(diag(D),descend ); %特征值从大到小排序 VV(:,Idx); sigma2D(nSensor); %提取噪声功率 %nJamlength(find(D/sigma210)); nJamEstSrcNum(D,size(Z,2)); if nJam0 %构造实数干扰子空间 SintV(:,1:nJam); %将实数干扰子空间转换为复数干扰子空间 U1/sqrt(2)*[eye(4,4) eye(4,4);-1j*eye(4,4) 1j*eye(4,4)]; SjamU*Sint; %计算投影矩阵 ProMateye(nSensor,nSensor)-Sjam*Sjam; else ProMateye(nSensor,nSensor); end end6、AntiJam_LTE_UL_Platformfunction [BLER,CrcSucc,CrcFail,CrcTotal]AntiJam_LTE_UL_Platform(UserAzi,JamAzi,MCS,SNR,JSR,numSubFrame,bAddJam,bJamSupress,nSnapCount) % 上行算法开发仿真主程序 % clc; % close all; % clear all; % clear variables; % clear global; addpath(genpath([pwd \UlTx])); addpath(genpath([pwd \UlRx])); addpath(genpath([pwd \ChannelCfg])); addpath(genpath([pwd \HWA])); addpath(genpath([pwd \ParaCfg])); addpath(genpath([pwd \CfgDat])); addpath(genpath([pwd \sim_case])); addpath(genpath([pwd \AntiInterference])); rng(default); %% 配置公共参数(收发方都知道) global LTE_CommConfigPara LTE_HBFPara; global SimResult SnrIter SimIter global snrEst rssiEst LTE_CommConfigPara LTE_CommParaConfig_UL(); LTE_CommConfigPara.fixpoint 0; LTE_CommConfigPara.LC6Flag 1; LTE_CommConfigPara.bAddJam bAddJam; LTE_CommConfigPara.bJamSupressbJamSupress; LTE_CommConfigPara.nSnapCountnSnapCount; SimRunLen numSubFrame; %% 配置UE发射参数,假设Ue已经同步到基站并获得相关参数 LTE_UEConfigPara LTE_UEParaConfig(0); % Ue相关配置 % Case_Name .\sim_case\PUSCH\simcase_PUSCH_1UE_flt; Case_Name .\sim_case\PUSCH\simcase_PUSCH_1UE_flt_8r; % Case_Name .\sim_case\PRACH\simcase_PRACH_1UE_FMT0; % Case_Name .\sim_case\SRS\simcase_SRS_1UE; % Case_Name .\sim_case\PUCCH\simcase_PUCCH_1UE_FMT2; [LTE_CommConfigPara, LTE_UEConfigPara] sim_param_parse(Case_Name, LTE_CommConfigPara, LTE_UEConfigPara); LTE_CommConfigPara.SNR SNR; LTE_UEConfigPara.PuschConfig.MCSIdxMCS*ones(1,10); %% 生成发射信号(多用户) numSamplesPerSlot LTE_CommConfigPara.numSamplesPerSlot; numSlotPerFrm LTE_CommConfigPara.numSlotPerFrm; SNRSet LTE_CommConfigPara.SNR; numSNR length(SNRSet); NumOfUe LTE_UEConfigPara.NumOfUe; NumOfFrm LTE_UEConfigPara.NumOfFrm; numSamplesPerFrm numSlotPerFrm * numSamplesPerSlot; TransIQSig zeros( NumOfUe, NumOfFrm * numSamplesPerFrm ); %% 仿真结果初始化 Sim_Result_init( NumOfUe, SNRSet ); %% 基站参数配置和UE相同 LTE_BSConfigPara LTE_BSParaConfig(LTE_UEConfigPara); %% 干扰参数配置 LTE_HBFPara LTE_InterferenceParaConfig_UL(LTE_BSConfigPara); %% 信道参数配置包括功放非线性因素瑞利衰落多径信道白噪声频偏相位噪声IQ不平衡直流分量采样定时偏移 ChanConfigPara ChannParaConfig(); % 信道相关配置, 其中参数必须要和UE数目配对 %% 添加信道(只使能了第一个UE的噪声其余UE直接发送信号叠加) % tic; for SnrIter 1 : numSNR LTE_HBFPara.theta_txUserAzi; LTE_HBFPara.theta_jamJamAzi; LTE_HBFPara.JSRJSR(SnrIter); LTE_BSConfigPara LTE_HarqInfoInit( NumOfUe, LTE_BSConfigPara ); for SimIter 1 : SimRunLen %% 发送 for UeIdx 0 : NumOfUe - 1 [ TransIQSig(UeIdx 1, :), LTE_UEConfigPara, LTE_BSConfigPara ] LTE_Transmitter( LTE_UEConfigPara, LTE_BSConfigPara, UeIdx ); end %% 加信道 SigAfterChann 0; for UeIdx 0 : NumOfUe - 1 SigAfterChannTmp AddChannelImpairment( LTE_UEConfigPara, ChanConfigPara, LTE_BSConfigPara, UeIdx, TransIQSig(UeIdx 1, :) ); SigAfterChann SigAfterChann SigAfterChannTmp; end %% 接收 for UeIdx 0 : NumOfUe - 1 LTE_BSConfigPara LTE_Receiver( LTE_BSConfigPara, SigAfterChann, UeIdx ); end end end CrcSuccSimResult.PUSCH.CrcSucc CrcFailSimResult.PUSCH.CrcFail CrcTotalSimResult.PUSCH.TotalCrc BLERCrcFail./CrcTotal % toc; end7、

相关新闻