通信系统中ZF,ML,MRC以及MMSE四种信号检测算法误码率matlab对比仿真
目录
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;%100s_Alphabet = 1/sqrt(2)* [1+1j;-1+1j ;-1-1j ;1-1j];%4x1
c_Alphabet = [1;-1]; %2x1s_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%100kChannelh = 1/sqrt(2)*(normrnd(0,1) + 1i*normrnd(0,1)); %normalized direct-link channelf = 1/sqrt(2)*(normrnd(0,1) + 1i*normrnd(0,1)); %normalized TX-Tag channelg = sqrt(0.5); %fixed Tag-C-RX channels = s_Matrix(kChannel,:);%%S-matrix:100x10000 ; S:1x10000 c = c_Matrix(kChannel,:);%c-matrix:100x100 ; c:1x100noise = noise_Matrix(kChannel,:);%noise:1x10000c_sample = reshape(repmat(c,N,1),1,f_s);%fs=1e4 thus,repmat(c,N,1):100x100;c-sample:1x10000for kSNR = 1:length(SNR_dB)%length=11p = P(kSNR);y = sqrt(p)*h*s + sqrt(p)*f*alpha*g*s.*c_sample; %1x10000 received signaly_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=-1s_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=1s_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);%1x10000s_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
endnum_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
相关文章:
通信系统中ZF,ML,MRC以及MMSE四种信号检测算法误码率matlab对比仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、ZF(零迫)算法 4.2、ML(最大似然)算法 4.3、MRC(最大比合并)算法 4.4、MMSE(最小均方误差ÿ…...
Redis数据结构之listpack
前言 当数据量较小时,Redis 会优先考虑用 ziplist 来存储 hash、list、zset,这么做可以有效的节省内存空间,因为 ziplist 是一块连续的内存空间,它采用一种紧凑的方式来存储元素。但是它也有缺点,比如查找的时间复杂度…...
VMware 配置记录
VMware 配置笔记 CentOS 7.9 镜像下载 官网太慢,建议在阿里云镜像站去CentOS配置页找标准版下载。 选标准版即可,各版本区别: DVD:标准版,包含常用软件,体积为 4.4 G;Everything:…...
【Java基础面试十四】、 封装的目的是什么,为什么要有封装?
文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官: 封装的目的是什么&…...
阿里云2023年双十一优惠活动整理
随着双十一的临近,阿里云也为大家准备了一系列优惠活动。作为国内知名的云服务提供商,阿里云在双十一期间推出了多种优惠政策和福利,让用户在享受优质云服务的同时,也能节省一些费用。本文将对阿里云双十一优惠活动进行详细整理&a…...
HTML标签详解 HTML5+CSS3+移动web 前端开发入门笔记(四)
HTML中列表的作用 HTML中的列表(List)用于呈现按照一定逻辑关系组织的信息,以便用户更好地理解和识别。列表可以分为有序列表、无序列表和定义列表三种类型。 有序列表(Ordered List):用于表示按照一定顺序…...
lenovo联想笔记本ThinkPad系列T15p或P15v Gen3(21DA,21DB,21D8,21D9)原厂Win11系统镜像
下载链接:https://pan.baidu.com/s/1V4UXFhYZUNy2ZQ8u4x1AFg?pwdqz0s 系统自带指纹驱动、人脸识别驱动、显卡、声卡等所有驱动、出厂主题壁纸、Office办公软件、Lenovo联想电脑管家等预装程序 所需要工具:32G或以上的U盘 文件格式:ISO …...
【SpringBoot】拦截器(Interceptor)的使用
感兴趣的可以查看上一篇过滤器的使用 【Springboot】Filter 过滤器的使用 一、什么是拦截器 拦截器(Interceptor)是一种特殊的组件,它可以在请求处理的过程中对请求和响应进行拦截和处理。拦截器可以在请求到达目标处理器之前、处理器处理请…...
CS鱼饵制作
文章目录 宏病毒(宏钓鱼)快捷方式钓鱼shellQMaker bug伪装pdf文件上线 宏病毒(宏钓鱼) 启动teamsever服务器,具体过程请参考我之前的文章: 在主机中启动CS客户端,111是真实机的用户:…...
问题记录1 json解析问题
问题: json解析int类型不符合预期,使用json.NewDecoder解决。 示例如下: package mainimport ("bytes""encoding/json""fmt" )func main() {data1 : map[string]interface{}{}data1["id"] int64(4…...
std::move以及右值引用等
在这里只能给出 s t d : : m o v e std::move std::move一个比较通俗的看法,不能从原理上深挖,真是惭愧。不过这里面涉及到一些小 t r i c k trick trick,还是挺有意思的。 先说 s t d : : m o v e std::move std::move的两个用法:…...
分享一个比对图片是否一致的小工具(来源: github)
运行效果图: 官网: GitHub - codingfishman/image-diff: 一个方便的图片对比工具一个方便的图片对比工具. Contribute to codingfishman/image-diff development by creating an account on GitHub.https://github.com/codingfishman/image-diff 优缺点: 1.采用比对各色块是…...
编写AA程序需要做以下几个步骤:
编写AA程序需要做以下几个步骤: 首先,需要选择一个合适的开发环境,如Visual Studio或Eclipse,并安装AUTOSAR插件或工具链。 其次,需要创建一个AA项目,并配置相关的参数,如目标机器、编译器选项、链接选项等。 然后,需要编写AA代码,并遵循AUTOSAR规范和编码指南。 …...
jmeter接口测试使用rsa加密解密算法
本篇介绍jmeter 使用rsa算法进行加密参数 如果测试过程中,部分接口采用了rsa加密算法,我们的jmeter 也是可以直接拿来调用的,不需要开发配合去掉加密代码! 直接上代码 import org.apache.commons.codec.binary.Base64; import j…...
IDEA通过Docker插件部署SpringBoot项目
1、配置Docker远程连接端口 找到并编辑服务器上的docker.service文件。 vim /usr/lib/systemd/system/docker.service在下面ExecStart替换成下面的 ExecStart/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock2.重启docker systemctl daemon-reload s…...
微查系统,一站式查询,让您的查询更加便捷
微查系统是挖数据一款功能强大的查询系统,是一个集多种查询和核验工具于一身的综合性平台。它可以大大简化企业和个人的查询流程,节省时间和成本,提高查询的准确性和效率。本文将介绍微查系统的主要特点,功能和使用方法࿰…...
C++stack和queue模拟实现以及deque的介绍
stack和queue介绍以及模拟实现 1.stack1.1stack的介绍1.2stack的使用 2.queue2.1queue的介绍2.2queue的使用 3.容器适配器3.1什么是适配器 4.stack模拟实现5.queue的模拟实现6.deque(双端队列) 1.stack 1.1stack的介绍 stack的文档介绍 stack是一种容…...
WPF ListView 鼠标点击,移动改变背景色不启作用
构建数据源 <Window.Resources><x:ArrayExtension x:Key"stringList"xmlns"clr-namespace:System;assemblymscorlib"Type"String"><String>第一行</String><String>第二行</String><String>第三行<…...
Maven Dependency 机制
依赖关系管理是Maven的核心功能。管理单个项目的依赖关系很容易。管理由数百个模块组成的多模块项目和应用程序的依赖关系是可能的。Maven在定义、创建和维护具有良好定义的类路径和库版本的可复制构建方面有很大帮助。 一、传递依赖 Maven通过自动包含可传递的依赖关系&…...
CustomShapes/自定义形状, CustomCurves/自定义曲线, AnimateableData/数据变化动画 的使用
1. CustomShapes 自定义形状视图 1.1 资源图文件 therock.png 1.2 创建自定义形状视图 CustomShapesBootcamp.swift import SwiftUI/// 三角形 struct Triangle: Shape{func path(in rect: CGRect) -> Path {Path { path inpath.move(to: CGPoint(x: rect.midX, y: rect.mi…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
