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

news2025/7/19 21:04:36

目录

1.算法运行效果图预览

2.算法运行软件版本

3.部分核心程序

4.算法理论概述

4.1、ZF(零迫)算法

4.2、ML(最大似然)算法

4.3、MRC(最大比合并)算法

4.4、MMSE(最小均方误差)算法

5.算法完整程序工程


1.算法运行效果图预览

2.算法运行软件版本

matlab2022a

3.部分核心程序

.......................................................................
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) + 1i*normrnd(0,1));         %normalized direct-link channel
    f = 1/sqrt(2)*(normrnd(0,1) + 1i*normrnd(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
01_143m

4.算法理论概述

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

4.1、ZF(零迫)算法

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

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

y = Hs + n

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

s = H^(-1) * y

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

4.2、ML(最大似然)算法

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

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

s_ML = arg max p(s|y)

4.3、MRC(最大比合并)算法

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

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

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

其中,*表示共轭运算。

4.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四种信号检测算法的原理和数学公式。这些算法在通信系统中有着广泛的应用,可以提高通信系统的性能和稳定性。

5.算法完整程序工程

OOOOO

OOO

O

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1102533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024杭州人工智能展会(世亚智博会)一场人工智能领域的视觉盛宴

2024年,一场规模空前的人工智能盛会将在杭州国际博览中心盛大开幕。这场名为“2024杭州国际人工智能展览会(简称:世亚智博会)”的展会活动,将于4月份在杭州国际博览中心隆重举行,届时将迎来一场人工智能领域…

网络安全必备常识:Web应用防火墙是什么?

如今,很多企业都将应用架设在Web平台上,为用户提供更为方便、快捷的服务支持,例如网上银行、网上购物等。与此同时,应用程序组合变得前所未有的复杂和多样化,这为攻击者发动攻击开辟了大量媒介,Web应用防火…

【C++ 学习 ㉘】- 详解 C++11 的列表初始化

目录 一、C11 简介 二、列表初始化 2.1 - 统一初始化 2.2 - 列表初始化的使用细节 2.2.1 - 聚合类型的定义 2.2.2 - 注意事项 2.3 - initializer_list 2.3.1 - 基本使用 2.3.2 - 源码剖析 一、C11 简介 1998 年,C 标准委员会发布了第一版 C 标准&#xff0…

使用new创建动态结构

在运行时创建数组优于在编译时创建数组,对于结构(同一个结构可以存储多种类型的数据。)也是如此。需要在程序运行时为结构分配所需的空间,这也可以使用new运算符来完成。通过使用new,可以创建动态结构。同样&#xff0…

【广州华锐互动】利用AR进行野外地质调查学习,培养学生实践能力

在科技发展的驱动下,AR(增强现实)技术已经在许多领域中找到了应用,包括医疗、教育、建筑和娱乐等。然而,有一个领域尚未充分利用AR技术的潜力,那就是野外地质调查。通过将AR技术引入到这个传统上需要大量人…

免费:实时 AI 编程助手 Amazon CodeWhisperer

点 ,一起程序员弯道超车之路 现已正式推出实时 AI 编程助手 Amazon CodeWhisperer,包括 CodeWhisperer 个人套餐,所有开发人员均可免费使用。最初于去年推出的预览版 CodeWhisperer 让开发人员能够保持专注、高效,帮助他们快速、安…

rabbitMq (2)

RabbitMQ 消息应答与发布 文章目录 1. 消息应答1.2 自动应答1.2 手动应答1.3 代码案例 2. RabbitMQ 持久化2.1 队列持久化2.2 消息持久化 3. 不公平分发4. 预取值分发5. 发布确认5.1 发布确认逻辑5.2 开启发布确认的方法5.3 单个确认发布5.4 批量确认发布5.5 异步确认5.5.1 处理…

【milkv】更新rndis驱动

问题 由于windows升级到了11,导致rndis驱动无法识别到。 解决 打开设备管理器,查看网络适配器,没有更新会显示黄色的图标。 右击选择更新驱动

机器学习基础之《回归与聚类算法(3)—线性回归优化:岭回归》

一、什么是岭回归 其实岭回归就是带L2正则化的线性回归 岭回归,其实也是一种线性回归。只不过在算法建立回归方程时候,加上L2正则化的限制,从而达到解决过拟合的效果 二、API 1、sklearn.linear_model.Ridge(alpha1.0, fit_interceptTrue…

软件测试中bug修正后测试就结束了吗?

一般来说,当 Bug 跟踪系统上所有的 bug 都被关闭了以后,你会感到如释重负,终于可以松一口气了。 当项目成功交付后,你是否感到大脑进入了疲惫期,上网,聊天,写自己感兴趣的小程序,项…

SRS Config 一 基础配置

Config srs 流媒体服务配置官方文档已经很详细了,本文仅记录部分配置过程 srs.conf同级目录下 新建 self.conf 仿照srs.conf 添加基础配置 1 rtmp RTMP是直播的事实标准,这么多年以来一直是使用最广泛的直播协议。 然而Adobe公司没有一直更新RTMP协…

“1688按图搜索商品:拍立淘API,轻松实现高效购物!“

1688按图搜索商品(拍立淘)API的步骤大致如下: 需要先开放平台注册开发者账号。为每个淘宝应用注册一个应用程序键,登陆密钥。下载1688API的SDK并掌握基本的API基础知识和调用。利用SDK接口和对象,传入AppKey或者必要的…

VScode折叠代码

问题现状 代码看的我很烦, 有大段大段好像没有逻辑意义的部分,像大量的print语句, 想能不能折叠起来 在设置里面找 搜索Folding,找到Show Folding Controls, 换成always吧,一般默认是mouseover&#x…

21-数据结构-内部排序-交换排序

简介:主要根据两个数据进行比较从而交换彼此位置,以此类推,交换完全部。主要有冒泡和快速排序两种。 目录 一、冒泡排序 1.1简介: 1.2代码: 二、快速排序 1.1简介: 1.2代码: 一、冒泡排序…

10.17七段数码管单个多个(部分)

单个数码管的实现 第一种方式 一端并接称为位码;一端分别接收电平信号以控制灯的亮灭,称为段码 8421BCD码转七段数码管段码是将BCD码表示的十进制数转换成七段LED数码管的7个驱动段码, 段码就是LED灯的信号 a为1表示没用到a,a为…

文心一言 VS 讯飞星火 VS chatgpt (115)-- 算法导论10.2 8题

八、用go语言,说明如何在每个元素仅使用一个指针 x.np(而不是通常的两个指针 next和prev)的下实现双向链表。假设所有指针的值都可视为 k 位的整型数,且定义x.npx.next XOR x.prev,即x.nert和x.prev 的 k 位异或。(NIL 的值用0表示。)注意要说…

1数据结构的分类,算法效率的度量

一,数据结构的定义和分类 数据结构:数据之间的关系即数据的逻辑结构,因为要存储到计算机里,所以视为将这个数据的逻辑结构映射到存储器里。即数据因为自身的和其他的数据的关系而在计算机内存储的方式。我们就归类了一些类型。 二…

Idea怎么配置Maven才能优先从本地仓库获取依赖

网上的方法 : 在设置中搜索 Runner ,在VM Option中设置参数 -DarchetypeCataloginternal删除 解压后的依赖包中的 _remote.repositories m2e-lastUpdated.properties *.lastUpdated 文件。 上边都没有效果 最终的解决方法,修改maven配置文件settings.xml 主要两个…

封装一个Element-ui生成一个可行内编辑的表格(vue2项目)

这个封装的是一个供整个项目使用的表格,可多次复用.放在一个全局使用的公共组件文件下. 大致功能介绍,封装自定义指令,点击获得焦点,显示输入框,失去焦点显示文本内容,类型是字典决定类型,图片可以显示图片名还是上传图片 子组件 <script> export default {props: {//生…

6.4 图的存储结构

思维导图&#xff1a; 前言&#xff1a; --- **6.4 图的存储结构** - **核心问题**&#xff1a;由于图的结构复杂性&#xff0c;我们不能仅仅依赖于元素在存储区的物理位置来表示它们之间的关系。 - **邻接矩阵**&#xff1a; - **基本思路**&#xff1a;虽然图没有顺序存…