【多天线传输技术】BPSK调制信号在复高斯瑞利信道下Alamouti的误码率分析

news2024/11/17 9:29:59
%% [预处理]
clc;
clear;
close all;

%% [配置参数]
N=3000000;             %数据点数(个)
SNR_dB=0:1:45;         %信噪比(dB形式)
SNR=10.^(SNR_dB/10);   %信噪比(一般形式,Eb/N0)
Ps=1;                  %信号功率,功率为1时其dB形式为0。
Pn=Ps./SNR;            %噪声功率

Error_Count_1T1R=zeros(1,length(SNR_dB));  %码元错误个数(11收)
Error_Count_2T1R=zeros(1,length(SNR_dB));  %码元错误个数(21收)
Error_Count_1T2R=zeros(1,length(SNR_dB));  %码元错误个数(12收)

SER_1T1R=zeros(1,length(SNR_dB));          %仿真误码率(11收)
SER_2T1R=zeros(1,length(SNR_dB));          %仿真误码率(21收)
SER_1T2R=zeros(1,length(SNR_dB));          %仿真误码率(12收)

Demod_1T1R=zeros(1,N);                     %解调信号(11收)
Demod_2T1R=zeros(2,N);                     %解调信号(21收)
Demod_1T2R=zeros(1,N);                     %解调信号(12收)

yn_1T1R=zeros(1,N);                        %接收信号(11收)
yn_2T1R=zeros(2,N);                        %接收信号(21收)
yn_1T2R=zeros(1,N);                        %接收信号(12收)

h_1T1R=(randn(1,N) +1i*randn(1,N));        %复高斯瑞利信道,均值为0+0i,方差为211收)
h_2T1R=(randn(2,N) +1i*randn(2,N));        %复高斯瑞利信道,均值为0+0i,方差为221收)
h_1T2R=(randn(2,N) +1i*randn(2,N));        %复高斯瑞利信道,均值为0+0i,方差为212收)

h_2T1R=h_2T1R./sqrt(2);                    %信道能量归一化,方差为121收) 
h_1T2R=h_1T2R./sqrt(2);                    %信道能量归一化,方差为112收) 
h_1T1R=h_1T1R./sqrt(2);                    %信道能量归一化,方差为111收) 

%% 111收】
sn_1T1R=round(rand(1,N));              % 原信号: 0,1序列sn
sn1_1T1R=round((sn_1T1R-1/2)*2);       % 原信号:-1,1序列sn1
for i=1:length(SNR_dB)
    noise_1T1R = sqrt(Pn(i)/2)*(randn(1,N)+1i*randn(1,N)); %高斯白噪声
%     yn_1T1R=sn1_1T1R+noise_1T1R./h_1T1R; 
    r_1T1R=h_1T1R.*sn1_1T1R+noise_1T1R; %接收
    yn_1T1R=r_1T1R./h_1T1R;  %判决变量
    %%% 解码
    for j=1:N
         if (yn_1T1R(j)>0)
             Demod_1T1R(j)=1;         %接收信号大于0,则判1
         else
             Demod_1T1R(j)=0;         %接收信号小于0,则判0
         end
    end
     %%% 计算错误比特个数
     for j=1:N
         if(Demod_1T1R(j)~=sn_1T1R(j))
              Error_Count_1T1R(i)=Error_Count_1T1R(i)+1;
         end
     end
     %%% 计算误码率
     SER_1T1R(i)=Error_Count_1T1R(i)/N;           % 仿真误码率
end
%% 221收 空时码】
sn_2T1R=round(rand(2,N));                           % 原信号: 0,1序列sn
sn1_2T1R=(1/sqrt(2)).*round((sn_2T1R-1/2)*2);       % 原信号

for i=1:length(SNR_dB)
    %%% 生成信号
    noise_1= sqrt(Pn(i)/2)*(randn(1,N)+1i*randn(1,N)); %第一个信道上的噪声
    noise_2= sqrt(Pn(i)/2)*(randn(1,N)+1i*randn(1,N)); %第二个信道上的噪声
%     noise_2T1R(1,:)= (conj(h_2T1R(1,:)).*noise_1+h_2T1R(2,:).*conj(noise_2))./(sum(abs(h_2T1R).^2)); %(h1*n1+h2n2*)/(||h||)             
%     noise_2T1R(2,:)= (conj(h_2T1R(2,:)).*noise_1-h_2T1R(1,:).*conj(noise_2))./(sum(abs(h_2T1R).^2)); %(h2*n1-h1n2*)/(||h||)
%     yn_2T1R=sn1_2T1R+noise_2T1R; 
    r1_2T1R=h_2T1R(1,:).*sn1_2T1R(1,:)+h_2T1R(2,:).*sn1_2T1R(2,:)+noise_1; %t1时刻接收
    r2_2T1R=-h_2T1R(1,:).*conj(sn1_2T1R(2,:))+h_2T1R(2,:).*conj(sn1_2T1R(1,:))+noise_2; %t2时刻接收
    yn_2T1R(1,:)=( conj(h_2T1R(1,:)).*r1_2T1R+h_2T1R(2,:).*conj(r2_2T1R) )./(sum(abs(h_2T1R).^2)); %判决变量
    yn_2T1R(2,:)=( conj(h_2T1R(2,:)).*r1_2T1R-h_2T1R(1,:).*conj(r2_2T1R) )./(sum(abs(h_2T1R).^2));
    %%% 解码
    for j=1:2
        for k=1:N
           if (yn_2T1R(j,k)>0)
             Demod_2T1R(j,k)=1;       %接收信号大于0,则判1
           else
             Demod_2T1R(j,k)=0;       %接收信号小于0,则判0
           end
        end
    end
    %%% 计算错误比特个数
    for j=1:2
        for k=1:N
          if(Demod_2T1R(j,k)~=sn_2T1R(j,k))
              Error_Count_2T1R(i)=Error_Count_2T1R(i)+1;
          end
        end
    end
    %%% 计算误码率
    SER_2T1R(i)=Error_Count_2T1R(i)/N/2;           % 仿真误码率
end

%% 312收】
sn_1T2R=round(rand(1,N));                                       % 原信号: 0,1序列sn
sn1_1T2R=[round((sn_1T2R-1/2)*2);round((sn_1T2R-1/2)*2)];       % 原信号:-1,1序列sn1
for i=1:length(SNR_dB)
    %%% 生成信号
    noise_1T2R=sqrt(Pn(i)/2)*(randn(2,N)+1i*randn(2,N));
    r_1T2R=h_1T2R.*sn1_1T2R+noise_1T2R;  %接收信号
%     yn_1T2R=(conj(h_1T2R(1,:)).*(h_1T2R(1,:).*sn1_1T2R(1,:)+noise_1T2R(1,:))+... %y=[h1*(h1x1+n1)+h2*(h2x2+n2)]/(h1^2+h2^2)
%              conj(h_1T2R(2,:)).*(h_1T2R(2,:).*sn1_1T2R(2,:)+noise_1T2R(2,:)))./...
%              (abs(h_1T2R(1,:)).^2+abs(h_1T2R(2,:)).^2);
    yn_1T2R=(conj(h_1T2R(1,:)).*r_1T2R(1,:)+conj(h_1T2R(2,:)).*r_1T2R(2,:))./(sum(abs(h_1T2R).^2));
    %%% 解码
    for j=1:N
        if (yn_1T2R(j)>0)
             Demod_1T2R(j)=1;       %接收信号大于0,则判1
        else
             Demod_1T2R(j)=0;       %接收信号小于0,则判0
        end
    end
    %%% 计算错误比特个数
    for j=1:N
       if(Demod_1T2R(j)~=sn_1T2R(j))
           Error_Count_1T2R(i)=Error_Count_1T2R(i)+1;
       end
    end
    %%% 计算误码率
    SER_1T2R(i)=Error_Count_1T2R(i)/N;           % 仿真误码率
end

%% [4、显示结果]
semilogy(SNR_dB,SER_1T1R,'go-',SNR_dB,SER_2T1R,'r*-',SNR_dB,SER_1T2R,'k*-');     
axis([0 45 10^-5 10^0]);     
legend("1发1收","2发1收","1发2收");
xlabel('信噪比SNR/dB');  %横轴坐标
ylabel('误码率BER');     %纵轴坐标
title("BPSK调制信号在复高斯瑞利信道下Alamouti的误码率分析");
grid on;                    %显示表格线
%     yn_1T2R=( r_1T2R*conj(h_1T2R'))./(sum(abs(h_1T2R).^2)); %判决变量./(sum(abs(h_1T2R).^2))

在这里插入图片描述

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

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

相关文章

Linux Day10 ---Mybash

目录 一、Mybash介绍 1.1.mybash.c 打印函数 分割函数 命令函数 二、Mybash实现 2.1.打印函数 2.1.1需要使用到的功能函数 1.获取与当前用户关联的UID 2.获取与当前用户的相关信息---一个结构体(passwd) 3.获取主机信息 4.获取当前所处位置 5.给…

论文阅读 FOCUS-AND-DETECT: A SMALL OBJECT DETECTION FRAMEWORK FOR AERIAL IMAGES

文章目录 FOCUS-AND-DETECT: A SMALL OBJECT DETECTION FRAMEWORK FOR AERIAL IMAGESABSTRACT1 Introduction2 Related Work3 Focus-and-Detect3.1 Overview3.2 Focus Stage3.2.1 Generating Ground-Truth Boxes of Focal Regions Using Gaussian Mixture Model 3.3 Detection …

物种气候生态位动态量化与分布特征模拟

在全球气候快速变化的背景下,理解并预测生物种群如何应对气候变化,特别是它们的地理分布如何变化,已经变得至关重要。利用R语言进行物种气候生态位动态量化与分布特征模拟,不仅可以量化描述物种对环境的需求和适应性,预…

StableVideo:使用Stable Diffusion生成连续无闪烁的视频

使用Stable Diffusion生成视频一直是人们的研究目标,但是我们遇到的最大问题是视频帧和帧之间的闪烁,但是最新的论文则着力解决这个问题。 本文总结了Chai等人的论文《StableVideo: Text-driven consistency -aware Diffusion Video Editing》&#xff…

高性能网络模式-Reactor

事实上,Reactor 模式也叫Dispatcher模式,即I/O 多路复⽤监听事件,收到事件后,根据事件类型分配(Dispatch)给某个进程/线程。Reactor 模式也是一种非阻塞同步网络模式。 Reactor 模式主要由 Reactor部分和处…

Django基础3——视图函数

文章目录 一、基本了解1.1 Django内置函数1.2 http请求流程 二、HttpRequest对象(接受客户端请求)2.1 常用属性2.2 常用方法2.3 服务端接收URL参数2.4 QueryDict对象2.5 案例2.5.1 表单GET提交2.5.2 表单POST提交2.5.3 上传文件 三、HttpResponse对象&am…

NV PTX ISA 文档的增量说明

无它,维截图尔,汇总一下,找找规律; cuda 12.0 PTX 8.0 关键字: 从cuda 8.0开始: 显然,每次增量的主要因素是对应着对新的硬件功能的提炼;

构建 NodeJS cinema API 网关并部署到 Docker(04/4)

一、说明 构建一个微服务的电影网站,需要Docker、NodeJS、MongoDB,这样的案例您见过吗?如果对此有兴趣,您就继续往下看吧。 我们前几章的快速回顾 第一篇文章介绍了微服务架构模式,并讨论了使用微服务的优缺点。第二篇…

Unity报错DllNotFoundException:sqlite3

Unity项目中要使用轻型数据库sqlite,除了导入sqlite3.dll外,还需要导入Mono.Data.Sqlite.dll和System.Data.dll(工程里或者编辑器里面有System.Data.dll时就不需要)两个文件。 如果在编辑器中运行出现 “DllNotFoundException:sql…

pyside6最小化的核心调用代码

pyside6最小化的核心调用代码: 一、格式代码 你认为是 制式代码,下面图中的就是核心代码,以后就是这样记住以及使用即可 二、图形代码【生成代码】 2.1designer设计界面 2.2设计的界面转换为代码 注意图纸划线的地方,后续导入…

卓码软件测评简析:软件压力测试工具和流程有哪些?

在软件开发过程中,压力测试是非常重要的一项工作,它可以帮助客户评估软件系统在正常或异常负载下的性能表现。在这个领域,有很多不同的工具可供选择,每个工具具有其独特的特点和优势。那么常见的压力测试工具有哪些以及进行压力测…

外网访问家里虚拟机的两种方法

从外网访问家里虚拟机的两种方法 起因 在公司,当我不想干的时候就想着跑路,但是自己又太菜了(饭碗要紧),所以想通过ssh登录到自己的家里一台linux上,去敲一敲 linux命令,sql命令,do…

Mobx在非react组件中修改数据,在ts/js中修改数据实现响应式更新

我们都之前在封装mobx作为数据存储的时候,使用到了useContext作为包裹,将store变成了一个hooks使用,封装代码: import React from react import UserInfo from ./user import Setting from ./seting import NoteStore from ./noteclass Stor…

WSL(centos7.0.1907.3)安装lxc

安装 1.centos的epel源提供了lxc的安装包,在使用epel源时首先安装epel-release包: yum -y install epel-release2.安装lxc软件包和依赖包 yum -y install lxc lxc-templates bridge-utils lxc-libs libcgroup libvirt 安装完成后,通过 lx…

centos安装redis教程

1.下载安装包 redis官网 下载最新版本redis安装包 2.上传到服务器 然后解压 解压命令 tar xzvf redis-7.2.0.tar.gz 进入文件夹 cd redis-7.2.0 执行安装编译命令 make 如果要安装到别的目录则执行 make install PREFIX/目录地址 看到如下内容则说明安装成功 如有遇到报错…

骨传导蓝牙耳机能打电话吗,骨传导蓝牙耳机别人听得到吗

时光荏苒,社会不断发展,年轻人的生活离不开一样必备神器——耳机。而在众多耳机中,骨传导耳机备受青睐。这种耳机的佩戴方式不仅方便,还更安全,能有效降低中耳炎的风险。此外,经过精心设计的耳机还能有效减…

再升级!PP-OCRv4多场景平均精度提升5%!

OCR方向的工程师,一定有在关注PaddleOCR这个项目,其主要推荐的PP-OCR算法更是被国内外企业开发者广泛应用。短短几年时间,PP-OCR累计Star数量已超过32.2k,频频登上GitHub Trending和Paperswithcode日榜月榜第一,称它为…

Navicat for Mysql 显示 emoji 表情符号乱码问题 — 其它乱码情况都可参考

系统环境: 操作系统:MAC OS 10.11.6 MySQL:Server version: 5.6.21 MySQL Community Server (GPL) Navicat for MySQL: version 9.3.1 - standard 1、问题发现 在客户端执行用户注册,用户名包括 emoji 表情符号,注册完…

SpringBoot基于AOP注解方式实现Redis缓存

一、前言 Spring中的AOP(Aspect Oriented Programming)是基于代理的AOP实现,通过使用基于代理的技术,可以在不修改原有代码的情况下,对原有代码进行增强和改进。Spring AOP实现了面向切面编程的功能,将横切…

电工-捡测电动机绕组首尾端的电路接线图

电工捡测电动机绕组首尾端的电路接线图 若三相电动机绕组首尾端接错,电动机起动时,会引起振动、噪声、三相电流严重不平衡、电动机过热、转速降低,甚至电动机不转等故障。 可用交流电源和灯泡来检查电动机三相绕组的首尾端用以检测电动机首尾…