OFDM仿真基于matlab秩亏情况下遗传算法MIMO-OFDM系统多用户检测含Matlab源码 2293期
Posted 海神之光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OFDM仿真基于matlab秩亏情况下遗传算法MIMO-OFDM系统多用户检测含Matlab源码 2293期相关的知识,希望对你有一定的参考价值。
⛄一、MIMO_OFDM简介
MIMO-OFDM系统的接收信号是多个发射天线发送信号的衰落与加性噪声的线性叠加,若采用通常SISO-OFDM系统或MIMO系统的估计算法估计信道,将会带来很大的估计误差。出于设计实现的考虑,本文主要研究理论相对比较成熟的慢变环境下基于训练序列的MIMO-OFDM系统的信道估计算法。本章将主要讨论MIMO-OFDM系统特殊训练序列的设计和信道估计算法的选择。
多天线系统的信道估计算法同单天线系统的相比具有更大的复杂性,因为接收信号是多个发射信号的叠加信号,这些发射信号同时从多个发射天线上发射出来,几乎同步到达任一接收天线。因此要从一个叠加信号中正确的识别出多个发射信号,需要信道估计算法能估计出各发射天线到同一接收天线之间多个并行信道的信道特性。而任一发射天线到任一接收天线之间的信道估计可参考单天线系统的算法。
信道估计算法主要可以分为两种:盲估计算法和非盲估计算法。盲信道估计算法不需要在发送信息中插入训练序列,节约了带宽。盲估计算法的实现需要利用发送信息内包含的统计信息。这通常需要在接收端对接收信号进行复杂的数学运算,算法的运算量一般都很大,不适合应用于对时延要求比较高的实时系统。非盲估计算法是在发送信号中插入收发两端都事先己知的信息,接收端在接收到该已知信息之后,由该信息的幅度、载频或相位变化来估计信道对发送信息所造成的衰落影响。算法应用广泛,几乎可以应用于所有的无线通信系统。
输入信号经复用器分解成n个长度相同的数据流,然后进行独立地编码和调制,因此它不是基于发射分集的。这些编码器可以是二进制的卷积编码器,也可以是不经过任何编码直接输出。
⛄二、部分源代码
clear;
clc;
tic
disp(‘--------------------------------------------’)
disp('============= HGA程序运行开始 =‘)
disp(’--------------------------------------------‘)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%秩亏:MIMO-OFDM System 接收天线数P小于用户天线数L
P=3; %接收天线数目
L=4; %用户数目
Ni=200; %信号源列数,总长度为10000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%GA:参数设定 *
Ng=10; %遗传最大代数
Nm=Ni; %种群规模Nm个个体
pc=0.8; %杂交概率
pm=0.02; %变异概率
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
H=randn(P,L)+j*randn(P,L); %信道复矩阵H(0,1)高斯分布 *H(P,L)
%产生均值为a,方差为b的N点高斯随即序列,N为随即序列的长度
%x=randn(1,N);y=a+sqrt(b)*x;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for tj=1:1:2 %tj次循环统计误码率 ******
disp(’=== 多次循环统计 =========‘)
tj %统计次数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
py=0.5;
for f11=1:1:L
source=randsrc(1,Ni,[1,0;py,1-py]); %信号源source:0/1 source(1,Ni)
source0=source;%-0.5; %改均值,方差不变
s(f11,:)=source0; %s(0,0.25)均值,方差 %模拟多通道信号
end;
%figure(1); %源信号 *
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x0=Hs;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp(’ 信噪比变化 =====‘)
for SNR=1:1:10; %不同信噪比条件进行仿真 ******
SNR %信噪比
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x=awgn(x0,SNR); %在信噪比为SNR时,对源信号s加噪声n得x x=Hs+n(P,Ni/L)
varns=0;
for f12=1:1:P
varn(f12)=var(x(f12,:))-var(x0(f12,:));
noise(f12,:)=randn(1,Ni)sqrt(varn(f12));
varns=varns+varn(f12);
%恢复噪声信号,均值为0,方差为varn的高斯分布
end %plot(noise)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%figure(2); %加噪声信号 *
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% MMSE方法求得Nm个Smmse值
Smmse=zeros(L,Ni); %mean(Smmse(1,:))=0;var=0.1901,0.1628,0.2297,0.1342
Smmse=((pinv(H H’+varns*eye§))*H)'x; % ‘:共轭转置;(.’:转置);pinv:逆;
%埃尔米特矩阵(或自共轭矩阵)是相对其主对角线以复共轭方式对称,
%Hermitian transpose即是 a(i,j)=a(j,i).^。
Sj=abs(Smmse); %Sj:Smmse检测后的幅值信息(绝对值)
%%%%%%%%%%%%%%%
%figure(3); %加噪声信号 *
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%判决0/1
for f15=1:1:L
for f16=1:1:Ni
if Sj(f15,f16)>0.5||Sj(f15,f16)<-0.5
Sx(f15,f16)=1; %Sx为幅度判决后的0/1信号值(第一代种群0/1) *
else Sx(f15,f16)=0;
end
end
end
T=(sSx); %s与Sx是否一样?T为逻辑值:1为一样;0为不一样。 *
sum=0;
for f17=1:1:L
for f18=1:1:Ni
sum=sum+T(f17,f18); %s与Sx相等的个数
end
end
pe0(tj,SNR)=(NiL-sum)/(NiL);%误码率 *
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
G0=Smmse; %MMSE算法产生GA第一代种群G0
G1=Sx; %GA第一代种群原始值Sy,初始化G1
for d=1:Ng %遗传代数 ********
% d %代数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
G7=G1; %保留G1为G7,后面会改变G7
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
OFz=0;%旧一代总目标函数
OFcz=0;
for p=1:1:P
OF(p,:)=(abs(x(p,:)-H(p,:)*G1(:😅)).^2;%第P个接收天线的目标函数
OFz=OFz+OF(p,:); %P个接收天线的总目标函数OFz(Object Function)
OFc(p,:)=(abs(x(p,:)-H(p,:)*G0(:😅)).^2;
OFcz=OFcz+OFc(p,:);
end
Zd=max(OFz); %总目标函数最大值Zd
Zx=min(OFz); %总目标函数最小值Zx
Zcd=max(OFcz);
Zcx=min(OFcz);
for m=1:1:Nm
if OFz(:,m)==Zx %寻找使总目标函数最小的个体
gt=m; %gt为一代种群中的最优个体序号m
Zy=G1(:,gt); %Zy为最优个体
end
end
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
以上是关于OFDM仿真基于matlab秩亏情况下遗传算法MIMO-OFDM系统多用户检测含Matlab源码 2293期的主要内容,如果未能解决你的问题,请参考以下文章
m基于rbf神经网络和遗传算法优化的MIMO-OFDM系统信道估计算法matlab仿真
基于PSO优化的OFDM系统PAPR抑制PTS算法MATLAB仿真
UWB系统同步OFDM基于训练序列的同步算法的MATLAB仿真