通信系统中ZF,ML,MRC以及MMSE四种信号检测算法误码率matlab对比仿真

简介: 通信系统中ZF,ML,MRC以及MMSE四种信号检测算法误码率matlab对比仿真

1.算法运行效果图预览

ff5103e38185d921414b28e7898f26b1_82780907_202401120017070527244328_Expires=1704990427&Signature=b%2FX3nTfaC2ePZSzdaGwFS%2FaTIC4%3D&domain=8.jpeg
a97d9525f30f78a27715546c77276286_82780907_202401120017070622770691_Expires=1704990427&Signature=2J%2FLP3ZZWKqihq1CT104FHFqkHo%3D&domain=8.jpeg

2.算法运行软件版本
matlab2022a

3.算法理论概述
通信系统中ZF(Zero Forcing,零迫)、ML(Maximum Likelihood,最大似然)、MRC(Maximum Ratio Combining,最大比合并)和MMSE(Minimum Mean Square Error,最小均方误差)是四种常见的信号检测算法。这些算法在通信系统中用于从接收信号中恢复出原始发送信号。

3.1、ZF(零迫)算法
ZF算法是一种简单的信号检测算法,它的目标是在接收端完全消除干扰和噪声,从而恢复出原始的发送信号。ZF算法通过迫零接收端的干扰和噪声,使得接收信号只包含所需的信号分量。

假设接收信号为y,发送信号为s,信道矩阵为H,噪声为n,则接收信号可以表示为:

y = Hs + n

ZF算法通过左乘信道矩阵的逆矩阵H^(-1),得到:

s = H^(-1) * y

这样,就可以恢复出原始的发送信号s。

3.2、ML(最大似然)算法
ML算法是一种基于统计学的信号检测算法,它的目标是在所有可能的发送信号中,找到最有可能的那一个。ML算法通过比较接收信号与所有可能的发送信号的似然度,选择似然度最大的那个作为最终的检测结果。

    假设发送信号有M种可能,每种可能的概率为p(s|y),则ML算法的目标是找到使得p(s|y)最大的s。具体的数学表达式为:

s_ML = arg max p(s|y)

3.3、MRC(最大比合并)算法
MRC算法是一种多天线技术中的信号检测算法,它的目标是通过合并多个接收天线的信号,提高接收信号的信噪比。MRC算法通过对每个接收天线的信号进行加权合并,使得合并后的信号信噪比最大化。

   假设有N个接收天线,每个天线的接收信号为y_n,信道为h_n,噪声为n_n,则MRC算法的输出可以表示为:

y_MRC = Σ (h_n^ y_n) / Σ |h_n|^2

其中,*表示共轭运算。

3.4、MMSE(最小均方误差)算法
MMSE算法是一种考虑噪声和干扰的信号检测算法,它的目标是在抑制噪声和干扰的同时,尽可能地减小误差。MMSE算法通过最小化均方误差来衡量检测性能的优劣。

假设接收信号为y,发送信号为s,信道矩阵为H,噪声为n,则MMSE算法的输出可以表示为:

s_MMSE = (H^H H + σ^2 I)^(-1) H^H y

其中,σ^2是噪声的方差,I是单位矩阵。

   以上是ZF、ML、MRC和MMSE四种信号检测算法的原理和数学公式。这些算法在通信系统中有着广泛的应用,可以提高通信系统的性能和稳定性。

4.部分核心程序

```N = 100; %Tc/TS the ratio between symbol period
num_Source_bit = 2e6; %1000000
num_Tag_bit = num_Source_bit/N;%10000
num_Channel = num_Source_bit/f_s;%100

s_Alphabet = 1/sqrt(2)* [1+1j;-1+1j ;-1-1j ;1-1j];%4x1
c_Alphabet = [1;-1]; %2x1

s_Matrix = exp(j(randi([0 3],num_Channel,f_s)pi/2+pi/4)); %ambient signal (QPSK) %100x10000
c_Matrix = 2(randi([0 1],num_Channel,f_s/N))-1; %backscattered signal (BPSK) %100x100
noise_Matrix = 1/sqrt(2)
(normrnd(0,sqrt(varNoise),num_Channel,f_s) + 1i*normrnd(0,sqrt(varNoise),num_Channel,f_s));%100x10000

%% AWGN
for kChannel = 1:num_Channel%100
kChannel
h = 1/sqrt(2)(normrnd(0,1) + 1inormrnd(0,1)); %normalized direct-link channel
f = 1/sqrt(2)(normrnd(0,1) + 1inormrnd(0,1)); %normalized TX-Tag channel
g = sqrt(0.5); %fixed Tag-C-RX channel
s = s_Matrix(kChannel,:);%%S-matrix:100x10000 ; S:1x10000
c = c_Matrix(kChannel,:);%c-matrix:100x100 ; c:1x100
noise = noise_Matrix(kChannel,:);%noise:1x10000
c_sample = reshape(repmat(c,N,1),1,f_s);%fs=1e4 thus,repmat(c,N,1):100x100;c-sample:1x10000

for kSNR = 1:length(SNR_dB)%length=11
    p     = P(kSNR);
    y     = sqrt(p)*h*s + sqrt(p)*f*alpha*g*s.*c_sample; %1x10000 received signal
    y_std = sqrt(p)*h*s;
    y     = awgn(y,SNR_dB(kSNR),'measured');
    y_std = awgn(y_std,SNR_dB(kSNR),'measured');

    %%ML detection 
    %%fixed c=-1
    s_detection_c1     = abs( repmat(y,4,1)- sqrt(p)*(h -  alpha * g * f)* repmat(s_Alphabet,1,f_s));
    [~,s_Est_c1_index] = min(s_detection_c1);
    s_Est_c1           = exp(j*(mod(s_Est_c1_index-1,4)*pi/2+pi/4));
    %%fixed c=1
    s_detection_c2     = abs( repmat(y,4,1)- sqrt(p)*(h +  alpha * g * f)* repmat(s_Alphabet,1,f_s));
    [~,s_Est_c2_index] = min(s_detection_c2);
    s_Est_c2           = exp(j*(mod(s_Est_c2_index-1,4)*pi/2+pi/4));


    c_detection        = abs([y-sqrt(p)*(h-alpha * g * f)*s_Est_c1; y-sqrt(p)*(h+ alpha * g * f)*s_Est_c2]).^2;
    c_est_block1       = sqrt(sum(reshape(c_detection(1,:),N,f_s/N)));
    c_est_block2       = sqrt(sum(reshape(c_detection(2,:),N,f_s/N)));

    [~,c_Est_index]    = min([c_est_block1;c_est_block2]);
    c_Est              = (c_Est_index-1)*2-1;


    c_Est_sample       = reshape(repmat(c_Est,N,1),1,f_s);%1x10000
    s_detection        = abs( repmat(y,4,1)- sqrt(p)*(h*repmat(s_Alphabet,1,f_s) + s_Alphabet*alpha * g * f*c_Est_sample));

    [~,s_Est_index]    = min(s_detection);
    s_Est              = exp(j*(mod(s_Est_index-1,4)*pi/2+pi/4));


    Num_BER_s(kChannel,kSNR)     = length(find(s-s_Est~=0)); 
    Num_BER_c(kChannel,kSNR)     = length(find(c-c_Est~=0)); 
end

end

num_BER_s = sum(Num_BER_s);
num_BER_c = sum(Num_BER_c);

BER_s = num_BER_s/num_Source_bit;
BER_c = num_BER_c/num_Tag_bit;

figure;
semilogy(SNR_dB,BER_s,'b-o')
hold on
semilogy(SNR_dB,BER_c,'r-s')
grid on
xlabel('SNR (dB)')
ylabel('BER')

legend('s(n)','c(n)')

save ML_Awgn.mat SNR_dB BER_s BER_c

```

相关文章
|
4天前
|
算法
基于GA遗传优化的混合发电系统优化配置算法matlab仿真
**摘要:** 该研究利用遗传算法(GA)对混合发电系统进行优化配置,旨在最小化风能、太阳能及电池储能的成本并提升系统性能。MATLAB 2022a用于实现这一算法。仿真结果展示了一系列图表,包括总成本随代数变化、最佳适应度随代数变化,以及不同数据的分布情况,如负荷、风速、太阳辐射、弃电、缺电和电池状态等。此外,代码示例展示了如何运用GA求解,并绘制了发电单元的功率输出和年变化。该系统原理基于GA的自然选择和遗传原理,通过染色体编码、初始种群生成、适应度函数、选择、交叉和变异操作来寻找最优容量配置,以平衡成本、效率和可靠性。
|
3天前
|
算法 计算机视觉
基于Chan-Vese算法的图像边缘提取matlab仿真
**算法预览展示了4幅图像,从边缘检测到最终分割,体现了在matlab2022a中应用的Chan-Vese水平集迭代过程。核心代码段用于更新水平集并显示迭代效果,最后生成分割结果及误差曲线。Chan-Vese模型(2001)是图像分割的经典方法,通过最小化能量函数自动检测平滑区域和清晰边界的图像分割,适用于复杂环境,广泛应用于医学影像和机器视觉。**
|
2天前
|
机器学习/深度学习 自然语言处理 算法
m基于深度学习的OFDM+QPSK链路信道估计和均衡算法误码率matlab仿真,对比LS,MMSE及LMMSE传统算法
**摘要:** 升级版MATLAB仿真对比了深度学习与LS、MMSE、LMMSE的OFDM信道估计算法,新增自动样本生成、复杂度分析及抗频偏性能评估。深度学习在无线通信中,尤其在OFDM的信道估计问题上展现潜力,解决了传统方法的局限。程序涉及信道估计器设计,深度学习模型通过学习导频信息估计信道响应,适应频域变化。核心代码展示了信号处理流程,包括编码、调制、信道模拟、降噪、信道估计和解调。
23 8
|
6天前
|
传感器 算法
ANC主动降噪理论及Matlab代码实现
ANC主动降噪理论及Matlab代码实现
|
1月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
1月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
1月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
1月前
|
供应链 算法
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
|
1月前
|
算法 调度
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)