clear all;
close all;
Nr=8;
Nt=8;
M=4;
SNR_db=0:5:100;
snr=10.^(SNR_db/10) ; %将信噪比由分贝形式转换为比例形式
ep=1; %每根天线的发射功率
es=Nt*ep ; %总的发射功率
Np=es./snr; %噪声功率
error_zf=[];
error_mmse=[];
num=100; %帧数
z_length=4; %每帧的长度
for a=1:1:length(SNR_db)
err1=0;
err2=0;
for b=1:1:num
H=sqrt(1/2)*(randn(Nr,Nt)+1i*randn(Nr,Nt)); %产生信道矩阵
for c=1:1:z_length
x=round((M-1)*rand(Nt,1)); %产生发射信号
noise=sqrt(Np(a)/2)*(randn(Nr,1)+1i*randn(Nr,1)); %生成功率为Np(a)的噪声
x_psk=pskmod(x,M);
y=H*x_psk+noise; %接收到的信号
y_zf=pinv(H)*y;
y_mmse=H'*inv(H*H'+Np(a)/ep*eye(Nt))*y;
x_zf=pskdemod(y_zf,M);
x_mmse=pskdemod(y_mmse,M);
err1=err1+sum(x_zf~=x); %计算误比特数
err2=err2+sum(x_mmse~=x);
end
end
error_zf=[error_zf,err1];
error_mmse=[error_mmse,err2];
end
BER_zf=error_zf/(num*Nt*z_length) ; %求出误码率
BER_mmse=error_mmse/(num*Nt*z_length);
semilogy(SNR_db,BER_zf,'o-k')
grid on;
hold on;
semilogy(SNR_db,BER_mmse,'r->')
legend('zf','mmse');
xlabel('SNR/dB');
ylabel('BER');