迫零响应法用于MIMO系统

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41608328/article/details/88921281

今天跟大家分享有关信道均衡法——迫零响应法在多输入多输出(MIMO)天线系统中的应用。
在实际的信道中,常常存在码间干扰(ISI),此时需要通过一些特殊的方法和手段来进行均衡,对抗由于ISI造成的影响。常用的均衡方法有迫零响应法(ZF, zero-forcing)、最小均方误差(MMSE)、最大似然估计(MLD)、盲均衡法。下面介绍迫零响应法。
给出信道模型示意图如下:

信道
假设信道信息已知,在抽样时刻接收到的信号为:
在这里插入图片描述
其中an是指输入信号,xk是指等效的信道冲激响应在抽样时刻的值,zn表示服从标准正态分布的随机变量(均值为0,方差为1)。
判决量为
在这里插入图片描述
迫零响应的思想在于构造这么一组wk,使得信道接收信号与实际发送信号相同,即
在这里插入图片描述
在这里插入图片描述
以上这个式子是迫零响应法的主要逻辑,可以发现均衡之后,均衡器得到的响应是ISI信道的倒数,此时能够与不理想信道造成的影响完全抵消,从而消除码间干扰,实现均衡的作用。
迫零均衡器示意图为:
在这里插入图片描述
由零码间干扰奈奎斯特定理,满足:
在这里插入图片描述
从迫零响应均衡器的框图可以看出,依照以上方法构造出(2N+1)个等式,解这个矩阵等式就得到了各个抽头系数(权重)的值。
迫零响应法用于MIMO系统的具体代码见下文。

clear all;
close all;
SNR_dB=0:2:20;
K=6;     %发射天线数
L=8;     %接收天线数
Es=1;    %初始化白噪声能量
len_SNR=length(SNR_dB);
N0_dB=10*log10(K*Es)-SNR_dB;  %信噪比用对数形式表示时,SNR_dB=S_dB-N_dB,注意这里的信号功率要乘以K,因为有K道发射信号
N0=10.^(N0_dB/10);
%
count=zeros(1,len_SNR);       %错误接受码元计数
BER=zeros(1,len_SNR);         %误码率
N_block=5000;                 %分块数目
N_sym0=100;                   %每根天线处理的QPSK符号数
N_err=2000;                   %最小错误数
n_init=1;                     %信噪比指针
while (n_init<=len_SNR)&&(count(len_SNR)<N_block)
	H=sqrt(0.5)*(randn(L,K)+1i*randn(L,K));      %%产生L、K路QPSK信号,H信道响应
    Dt=round(rand(K,N_sym0)+1i*rand(K,N_sym0));  %发送K路QPSK信号
    modDt=sqrt(Es/2)*(Dt*2-(1+1i));
    HS=H*modDt;                                  %接收端信号
	Noise=sqrt(0.5)*(randn(L,N_sym0)+1i*randn(L,N_sym0));  %L路接收端的噪声
    for n=n_init:len_SNR
        count(n)=count(n)+1
        n0=N0(n);
        RxDt=HS+sqrt(n0)*Noise;   %接收信号(考虑L路噪声影响)
        if K==L
            W=inv(H);             %inv函数表示矩阵求逆变换,W为加权系数
        else
            W=pinv(H);
       %pinv函数返回矩阵A的伪逆矩阵。如果矩阵A是可逆(非奇异)的,那么pinv(A)与inv(A)的结果是一样的。
       %但如果矩阵A是奇异矩阵,则inv(A)不存在;
       %但pinv(A)仍然存在,并表现出一些与逆矩阵类似的性质。在pinv函数中,A不一定是方阵。
        end;    
        zt=W*RxDt;
        estDt=(sign(real(zt))+1i*sign(imag(zt))+1+1i)/2;
        err=abs(round(Dt-estDt)).^2;  %错误接收码元数
        BER(n)=BER(n)+sum(sum(err));  %计算误码率
    end;
    if mean(BER(n_init))>=N_err       
        n_init=n_init+1;
    end;   
end;
format short e;                       %format short e格式控制指令,表示5字长浮点数           
BER=BER./(2*K*N_sym0*count);
semilogy(SNR_dB, BER, '-*');
strtitle=['ZF for a ',num2str(K),'x',num2str(L),' QPSK System'];   %strtitle表示字符标题
title(strtitle);
xlabel('Rx SNR per antenna (dB)');
ylabel('BER');
展开阅读全文

没有更多推荐了,返回首页