• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: Matlab
  • 标签: 波束成形  

资源简介

迫零波束成形,MMSE波束成形以及非线性波束成形仿真代码

资源截图

代码片段和文件信息

%基于ZF准则MMSE准则的预编码性能比较
function zf_mmse_svd()
clear all
close all
format long; %将数据显示为长整型科学计数 
Nt=4;%天线个数
Nr=4;
SNR=[0:5:20];%设置不同信噪比
channel_n=100*ones(1length(SNR));
error_mmselinp=zeros(1length(SNR));%初始化误码率
error_zflinp=zeros(1length(SNR));
error_nonlinp=zeros(1length(SNR));
for loop_ebno=1:length(SNR)%不同信噪比的循环
    snr=10.^(SNR(loop_ebno)/10);%将信噪比从分贝形式转化成比例表示
    ea=1;%每个天线发射的功率,也即信号向量中每个元素的功率
    es=ea*Nt;%总共的发射功率
    sigma_n2=es/snr;%噪声功率
    num=100;%发送数据个数
    tic
    for loop_channel=1:channel_n(loop_ebno)%信道的实现次数的循环
        H=sqrt(1/2)*(randn(NrNt)+j*randn(NrNt));%信道增益矩阵
        mmse_F=H‘*inv(H*H‘+sigma_n2/ea*eye(Nt));
        zf_F=H‘*inv(H*H‘); %求出F^
        beta_mmse=sqrt(es/norm(mmse_F‘fro‘).^2);
        beta_zf=sqrt(es/norm(zf_F‘fro‘).^2); %求出缩放因子beta
        F_mmse=beta_mmse*mmse_F; 
        F_zf=beta_zf*zf_F;%求出预编码矩阵F=F^×beta 
        for loop_num=1:num%在一帧数据符号中,信道保持不变。一帧总共有num个数据发送
            gen_s=(sign(randn(Nt1))+j*sign(randn(Nt1)));%产生信号
            s=sqrt(1/2)*gen_s;%归一化信号功率
            x_mmse=F_mmse*s;
            x_zf=F_zf*s;%发送信号
            noise=sqrt(sigma_n2/2)*(randn(Nr1)+j*randn(Nr1));%生成噪声功率为sigma_n2的噪声
            noise1=sqrt(sigma_n2/2)*(randn(Nr1)+j*randn(Nr1));
            noise2=sqrt(sigma_n2/2)*(randn(Nr1)+j*randn(Nr1));
            y_mmse=H*x_mmse+noise;
            y_zf=H*x_zf+noise1;
            y_non=H*s+noise2;
            r_mmse=1/beta_mmse*y_mmse;
            

评论

共有 条评论