1️⃣ 介绍

虽然线性检测方法ZF检测和MMSE检测的硬件实现复杂度更低,但性能较差。本文章介绍性能更好但复杂度高的非线性检测方法——ML信号检测。


2️⃣ 原理介绍

最大似然(ML)检测的基本目的是通过接收的信号估计最有可能的发射信号。在通信系统中,发射端和接收端之间通常会受到信道的影响(比如噪声和衰减等),接收的信号通常会与原始发射的信号有所不同。ML检测就是一种方法,用来从接收到的信号中“猜测”发射端到底发送了什么信号。

假设发射信号向量为 x \boldsymbol{x} x。接收端的信号向量是 y \boldsymbol{y} y ,但由于信道的干扰,接收到的信号和发射的信号会有所不同。信道的影响可以用一个矩阵 H \boldsymbol{H} H 来描述,这个矩阵表示信号通过信道后是如何变化的。接收端接收到的信号可以表示为:
y = H x + n \boldsymbol{y}=\boldsymbol{H} \boldsymbol{x}+\boldsymbol{n} y=Hx+n

接收端的任务就是从接收到的信号 y \boldsymbol{y} y 中"反推"发射端发送的信号 x \boldsymbol{x} x

最大似然检测的思路的具体步骤

  • 对于每一种可能的发射信号 x \boldsymbol{x} x ,通过信道矩阵 H \boldsymbol{H} H 计算它经过信道后的接收信号 H x \boldsymbol{H} \boldsymbol{x} Hx
  • 计算接收信号 y \boldsymbol{y} y 与每个假设的信号 H x \boldsymbol{H} \boldsymbol{x} Hx 之间的差异,使用欧氏距离来度量: ∥ y − H x ∥ 2 \|\boldsymbol{y}-\boldsymbol{H} \boldsymbol{x}\|^2 yHx2
  • 找出最小欧氏距离对应的发射信号

x ^ ML  \hat{x}_{\text {ML }} x^ML  是估计的发射信号,表示为:

x ^ M L = arg ⁡ min ⁡ x ∈ C N T X ∥ y − H x ∥ 2 \hat{\boldsymbol{x}}_{\mathrm{ML}}=\underset{\boldsymbol{x} \in C^{N_{\mathrm{TX}}}}{\arg \min }\|\boldsymbol{y}-\boldsymbol{H} \boldsymbol{x}\|^2 x^ML=xCNTXargminyHx2

这表示当 x = x ^ ML  \boldsymbol{x}=\hat{x}_{\text {ML }} x=x^ML 时, ∥ y − H x ∥ 2 \|\boldsymbol{y}-\boldsymbol{H} \boldsymbol{x}\|^2 yHx2最小

复杂度分析:
复杂度与调制阶数C和发射天线数量有关。总共需要计算 ∣ C ∣ N T x |C|^{N_{\mathrm{Tx}}} CNTx 个 ML 度量,也就是说计算度量的复杂度随着天线数呈指数上升。


3️⃣ 代码

%%%%%%%%%%%%%%%%%%%%%%%%%ML信号检测%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
close all;

%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%%%%%
Nrx = 8;
Ntx = 2;
num_symbol = 1000;
num_iteration = 100;
SNR = 0:1:15;
errors = zeros(1,length(SNR));
%QPSK调制
M = 4;
qpsk_symbol = [1+0i,0+1i,-0-1i,-1-0i];
%%%%%%%%%%%%%%%%%%%%%%%主循环%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for index_snr = 1:length(SNR)
    snr = SNR(index_snr);
    %噪声的方差也就是功率
    sigma2 = 1/10^(snr/10);
    for iteration = 1:num_iteration
        %随机生成一个发射符号矩阵 x,其大小为 Ntx x num_symbol。每个符号是从QPSK的符号集合中随机选择的
        x = randi([0,M-1],Ntx,num_symbol);
        %对符号进行QPSK调制,x_mod 是调制后的信号
        x_mod = pskmod(x,M);
        %生成一个复高斯随机信道矩阵 H,表示发射信号与接收信号之间的关系。randn 是生成正态分布的随机数,sqrt(0.5) 是为了保证信道矩阵的方差为1
        H = sqrt(0.5)*(randn(Nrx,Ntx)+1i*randn(Nrx,Ntx)); 
        %生成复高斯噪声 N,每个噪声分量的方差为sigma^2 
        N = sqrt(sigma2/2)*(randn(Nrx,num_symbol)+1i*randn(Nrx,num_symbol));
        %计算接收信号 y
        y = H*x_mod+N;
        %估计的发射符号矩阵 x_hat,它的大小和原始的发射符号矩阵 x 一样
        x_hat = zeros(Ntx,num_symbol);
        %最小二乘法估计x_hat
        for index_symbol = 1:num_symbol
            %初始化最小值为无穷大
            MIN = inf;
            for i = 1:M
                for j = 1:M
                    temp = norm(y(:,index_symbol)-H*[qpsk_symbol(i);qpsk_symbol(j)])^2;
                    if temp<MIN
                        x_hat(:,index_symbol) = [qpsk_symbol(i);qpsk_symbol(j)];
                        MIN = temp;
                    end
                end
            end
        end
        %对估计的发射符号 x_hat 进行解调,得到解调后的符号
        x_demod = pskdemod(x_hat,M);
        %计算误码数
        errors(index_snr) = errors(index_snr) + sum(sum(x_demod~=x));
    end
end
error_rate = errors/(num_symbol*num_iteration*Ntx);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%作图比较%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
plot(SNR,error_rate,'b-o');
xlabel('SNR(dB)');
ylabel('BER');
title('ML信号检测误码率');

结果分析:
在这里插入图片描述

  • 误码率巨小,几乎趋于零

4️⃣ 知识点

  • ML信号检测性能好但复杂度高,总共需要计算 ∣ C ∣ N T x |C|^{N_{\mathrm{Tx}}} CNTx 个 ML 度量

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐