Matlab 高斯信道下QPSK通带通信系统的简单仿真

2023-11-18

1 原理

2 仿真

3 总结反思

4 参考资料

1 原理

QPSK的具体内容请参考百度,QPSK的调制jie框图大致如下:

QPSK信号可以采用正交调制的方式产生,如第一张图片的左半部分,I路信号与cos 信号相乘,Q

路信号与sin信号相乘。I,Q路信号的分流产生方式可以由第二图所示得到,先将串行的bit数据进

行双极性符号映射:

之后进行串并转换,根据数据所在位置的把数据分为I/Q两路信号,I路信号与cos 信号相乘,Q路

信号与sin信号相乘。之后把两路数据相加得到所传输的信号,在接收方,采用相干解调,把I/Q路

信号解调出来,之后进行串并转换以及符号逆映射,即可得到解调的bit数据。串并转换是完成串行

传输和并行传输这两种传输方式之间转换的技术。

2  仿真

(1)主函数

clear all;
close all;
clc;
N=input('The number of bits:'); % 比特总数,数据长度
T=1;  % 比特周期
fc=2;   % 载波频率
Fs=100;  % 抽样频率
snr = 3;
%% 产生数据并且进行符号映射
bitstream = randi([0,1],1,N); % 随机产生的比特数0、1
bitstream_symbol = 2*bitstream-1; % 单极性变为双极性(0到-1;1到1)
%% 两路传输I/Q
I_signal = bitstream_symbol(1:2:N);
Q_signal = bitstream_symbol(2:2:N);

%% 载波
[I_c,Q_c] = base_to_band(T,N,fc,Fs,I_signal,Q_signal);

%% 信号合成
Qpsk_sig = awgn(I_c+Q_c,snr);

%% 解调
[I_est_sig,Q_est_sig] = demodulation_sig(Qpsk_sig,N,T,fc,Fs);

%% symbol_to_bit 和 串并转换
Estimated_Receive_data = symbol_to_bit(N,I_est_sig,Q_est_sig);

%% 画图
figures = figure_data(N,T,Fs,bitstream,I_signal,Q_signal,I_c,Q_c,I_est_sig,Q_est_sig,Estimated_Receive_data);

%% 计算误比特数目
error_bit = sum(Estimated_Receive_data ~= bitstream); 
disp(['error_bit_number = ',num2str(error_bit)]);




(2)base_to_band函数

function [I_c,Q_c] = base_to_band(T,N,fc,Fs,I_signal,Q_signal)

I_carrier = [];
Q_carrier = [];
bit_t = 0:1/Fs:2*T-1/Fs; %载波周期为2倍比特周期,定义时间轴

for i=1:N/2
    I_carrier = [I_carrier,I_signal(i)*cos(2*pi*fc*bit_t)]; %I路载波信号
    Q_carrier = [Q_carrier,Q_signal(i)*cos(2*pi*fc*bit_t+pi/2)]; %Q路载波信号
end

 I_c = I_carrier;
 Q_c = Q_carrier;
end

(3)demodulation_sig函数

function [I_est,Q_est] = demodulation_sig(QPSK_receive,N,T,fc,Fs)

%解调
bit_t = 0:1/Fs:2*T-1/Fs; %载波周期为2倍比特周期,定义时间轴
I_receiver = [];
Q_receiver = [];
for i = 1:N/2
    I_output = QPSK_receive(1,(i-1)*length(bit_t)+1:i*length(bit_t)).*cos(2*pi*fc*bit_t); % 积分
    if sum(I_output) > 0 %积分器求和,大于0为1,否则为-1
        I_receiver(i) = 1;
    else
        I_receiver(i) = -1;
    end
    
     Q_output = QPSK_receive(1,(i-1)*length(bit_t)+1:i*length(bit_t)).*cos(2*pi*fc*bit_t+ pi/2); % 积分
     
    if sum(Q_output) > 0 %积分器求和,大于0为1,否则为-1
        Q_receiver(i) = 1;
    else
        Q_receiver(i) = -1;
    end    
end

I_est = I_receiver;
Q_est = Q_receiver;
end

(4)symbol_to_bit串并转换以及符号逆映射函数

function estim_bit = symbol_to_bit(N,I_est_sig,Q_est_sig)

data = [];
for i=1:N
    if mod(i,2) ~= 0
        data = [data,I_est_sig((i-1)/2+1)]; %奇数取I路信息
    else
        data = [data,Q_est_sig(i/2)]; %偶数取Q路信息
    end
end
estim_bit = data > 0;
end

(5)figure_data绘图函数

function figures = figure_data(N,T,Fs,bitstream,I_signal,Q_signal,I_c,Q_c,I_est_sig,Q_est_sig,Estimated_Receive_data)
t=0:1/Fs:N*T-1/Fs;

bit_data=[];
bit_est_d =[];
for i=1:N
    bit_data = [bit_data,bitstream(i)*ones(1,T*Fs)];%在一个比特周期里面有T*Fs个1和采样点一模一样
    bit_est_d = [bit_est_d,Estimated_Receive_data(i)*ones(1,T*Fs)];
end

I_source = I_signal >0;
Q_source = Q_signal >0;
I_est_data = I_est_sig >0;
Q_est_data = Q_est_sig >0;
I_data=[];
Q_data=[];
I_est=[];
Q_est=[];

for j = 1:N/2
    %I路和Q路是原来比特周期的两倍,2Tb=Ts(码元周期),因此采样点个数为T*Fs*2
    I_data = [I_data,I_source(j)*ones(1,T*Fs*2)];
    Q_data = [Q_data,Q_source(j)*ones(1,T*Fs*2)];
    I_est = [I_est,I_est_data(j)*ones(1,T*Fs*2)];
    Q_est = [Q_est,Q_est_data(j)*ones(1,T*Fs*2)];
end

%% 原始数据
figure(1);
subplot(3,1,1)
plot(t,bit_data);legend('Bitstream')%比特信息
subplot(3,1,2)
plot(t,I_data);legend('I Bitstream')%I路信息
subplot(3,1,3)
plot(t,Q_data);legend('Q Bitstream')%Q路信息

%% 载波
figure(2); %产生一个新图
QPSK_signal = I_c + Q_c;
subplot(3,1,1)
plot(t,I_c);legend('I_carrier_signal')%I路信号
subplot(3,1,2)
plot(t,Q_c);legend('Q_carrier_signal')%Q路信号
subplot(3,1,3)
plot(t,QPSK_signal);legend('QPSK_signal')%I路、Q路和的信号

%% 解调数据
figure(3);
subplot(3,1,1)
plot(t, bit_est_d);legend('Est_Bitstream') %比特信息
subplot(3,1,2)
plot(t,I_est);legend('I_est_Bitstream')% I路信息
subplot(3,1,3)
plot(t,Q_est);legend('Q_est_Bitstream')% Q路信息

figures = 1;
end

(6)相关结果

 

原始数据:

 调制信号:

 解调信号:

 

 

原始数据:

调制信号:

 

解调信号:

 

3 总结反思

本次编写代码,主要是心血来潮,顺便复习一下QPSK的相关原理,在编写过程中也遇到一些问

题,在查阅相关的资料和阅读相关的文章之后,顺利完成本次目的。成果暂且放在公共平台,供后

来者交流学习之用,许多细节并未给出,主要是这个问题也不复杂,不足之处还请多多包涵。

4 参考资料

1  文章使用的图片均来自网络。

2  QPSK调制与解调(matlab,详细介绍仿真方案的设计、结果及结论、完整代码及注释)

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab 高斯信道下QPSK通带通信系统的简单仿真 的相关文章

  • 检查Matlab中脚本需要使用的函数

    我有一个别人写的代码包 我正在运行一个脚本 它调用一些函数 这些函数又调用更多函数 等等 我想获取不是 MATLAB 内置函数但属于包的一部分的函数列表 我尝试使用matlab codetools requiredFilesAndProdu
  • MATLAB 中最有效的矩阵求逆

    在 MATLAB 中计算某个方阵 A 的逆矩阵时 使用 Ai inv A should be the same as Ai A 1 MATLAB 通常会通知我这不是最有效的求逆方法 那么什么是更有效率的呢 如果我有一个方程系统 可能会使用
  • MATLAB 中的多个捕获组

    我有一个包含数字或字母的字符串a 可能紧随其后的是r or l 在 MATLAB 中 以下正则表达式返回为 gt gt regexp 10r 0 9 a l r match ans 10r 我希望10 and r分开 因为我有两个捕获组 有
  • 使用mat2cell将MxN的矩阵划分为1xN大小的M矩阵

    我有一个大小为 MxN 的矩阵 比方说 1867x3 1867 行和 3 列 我想将其分成 1867 个大小为 1x3 的单元格 我使用了mat2cell X 1 1866 这里X是矩阵 1867x3 结果给出了两个单元格 一个单元格的大小
  • 不等间隔时间序列的移动平均线

    我有一个证券交易所股票价格的数据集 时间 价格 但数据点之间的间隔并不相等 从 1 到 2 分钟不等 在这种情况下计算移动平均值的最佳实践是什么 如何在Matlab中实现呢 我倾向于认为 点的权重应该取决于自上一个点以来的最后时间间隔 Ma
  • 句柄类和值类的区别

    我有一些 C 背景 想使用 Matlab 中的类 句柄和值类有什么区别 我知道如果我想定义一个带有重载运算符 例如 和 的矩阵类 我会使用值类 然而 有时 当我选择一个手柄类时 事情似乎只对我有用 MathWorks 提供了一些有关其用途的
  • Matlab:保存后翻转图例顺序和图例重叠图

    我正在尝试根据以下内容反转我的图例条目顺序matlab条形图中图例颜色的逆序 https stackoverflow com questions 31178005 reverse ordering of legend colors in m
  • 为什么旋转 3D 点云后顶点法线会翻转?

    我有两个人脸 3D 点云样本 蓝色点云表示目标面 红色点云表示模板 下图显示目标面和模板面在不同方向上对齐 目标面大致沿 x 轴 模板面大致沿 y 轴 Figure 1 The region around the nose is displ
  • 如何找到在matlab中重复的矩阵的每一行的索引?

    我想找到矩阵中所有有重复项的行的索引 例如 A 1 2 3 4 1 2 3 4 2 3 4 5 1 2 3 4 6 5 4 3 要返回的向量将是 1 2 4 很多类似的问题建议使用unique函数 我已经尝试过 但我能得到的最接近我想要的功
  • MATLAB 教程中的 SIFT 实现

    我正在寻找 MATLAB 中的一些基本 SIFT 实现 我需要从第一原则来写它 另外 我正在寻找一些可以解释程序中发生的事情的内容 Vedali 的代码和 David Lowe 的代码超出了我的理解范围 如果您是 Matlab 用户 您一定
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • 有没有办法在matlab中进行隐式微分

    我经常使用 matlab 来帮助我解决数学问题 现在我正在寻找一种在 matlab 中进行隐式微分的方法 例如 我想区分y 3 sin x cos y exp x 0关于dy dx 我知道如何使用数学方法通常做到这一点 但我一直在努力寻找使
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • 从开始/结束索引列表创建向量化数组

    我有一个两列矩阵M包含一堆间隔的开始 结束索引 startInd EndInd 1 3 6 10 12 12 15 16 如何生成所有区间索引的向量 v 1 2 3 6 7 8 9 10 12 15 16 我正在使用循环执行上述操作 但我想
  • Matlab dec2bin 给出错误的值

    我正在使用 Matlab 的 dec2bin 将十进制数转换为二进制字符串 但是 我得到了错误的结果 例如 gt gt dec2bin 13339262925365424727 ans 101110010001111010010100111
  • 如何将复杂的 csv 文件导入到 Matlab 中的数值向量

    我想知道我们应该如何读取由字符串 双精度数和字符等组成的复杂 csv 文件 例如 您能否提供一个可以在此 csv 文件中提取数值的成功命令 Click here http www ecb europa eu stats money yc d
  • Matlab Builder JA - 将 Matlab 编译成 Java jar - 免费版本?

    请记住 我对 Matlab 一无所知 Matlab Builder JA 允许开发人员构建 Matlab 应用程序并将其导出到 Java jar 中 太棒了 我只需要生成一个 jar 然后就可以从其他 java 代码中使用它 有谁知道单罐包
  • matlab中求和函数句柄

    Hi我试图对两个函数句柄求和 但它不起作用 例如 y1 x x x y2 x x x 3 x y3 y1 y2 我收到的错误是 对于 function handle 类型的输入参数 未定义函数或方法 plus 这只是一个小例子 实际上我实际
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB

随机推荐

  • c++标准异常类的继承实现

    出处来自百度 查来学习之用 AbnomalTest cpp 定义控制台应用程序的入口点 include StdAfx h include
  • Qt中绘制折线

    Qt中绘制折线 基本流程 三要素 场景 图表 序列 创建场景 创建图表 图表添加到场景 创建序列 序列添加到图表 创建坐标轴并设置 坐标轴添加到图表 序列 坐标轴 图表配合 序列设值 1 必要配置 pro文件 QT charts 头文件 i
  • 常见操作String的方法(字符查找,索引查找)

    常见操作String的方法 字符查找 索引查找 在给定的字符串中查找字符或字符串是比较常见的操作 字符串查找分为两种形式 一种是在字符串中获取匹配字符 串 的索引值 另一种是在字符串中获取指定索引位置的字符 根据字符查找indexOf la
  • 分析排查Hystrix熔断降级未能真正生效的问题

    1 现象 压测无法进入hystrix熔断处理 检查feign hystrix enabled是开启的 hystrix设定的最大并发连接为100 降级最大并发连接为50 hystrix command default execution is
  • 算法:双指针

    双指针 双指针是一种思想或一种技巧并不是特别具体的算法 具体就是用两个变量动态存储两个结点 来方便我们进行一些操作 通常用在线性的数据结构中 特别是链表类的题目 经常需要用到两个或多个指针配合来记忆链表上的节点 完成某些操作 常见的双指针方
  • HTML 标签

    浏览器支持 所有浏览器都支持
  • Java-基于SSM+JSP的医院挂号管理系统

    项目背景 随着科学技术的飞速发展 社会的方方面面 各行各业都在努力与现代的先进技术接轨 通过科技手段来提高自身的优势 医院预约挂号系统当然也不能排除在外 医院预约挂号系统是以实际运用为开发背景 运用软件工程开发方法 采用jsp技术构建的一个
  • python+selenium自动化测试框架详解,我就讲一遍!

    前言 本文整理归纳以往的工作中用到的东西 现汇总成基础测试框架提供分享 框架采用python3 selenium3 PO yaml ddt unittest等技术编写成基础测试框架 能适应日常测试工作需要 1 使用Page Object模式
  • Debian查询硬件状态

    很早以前写过一个查询树霉派硬件状态的文章 用是Python写的一个小程序 里面用到了vcgencmd这个测温度的内部命令 但这个命令在debian里面没有 debian里只有lm sensors的外部命令 需要安装 apt get inst
  • Linux 重启后ext文件系统Inode 625047 has illegal blocks异常

    情况描述 系统重启后 发现报错 dev VolGroup00 LogVol00 contains a file system with errors check forced inode 625047 has illegal block s
  • 2021-03-31

    智能风控中的全场景化的模型组合包括哪些内容 近期某些网贷的广告 频上热搜 近有某东 远有某60 相信在大家的WX朋友圈更有大量 精彩 广告诱惑各位提前消费 于目前的政策而言 当下网贷行业的监管已达到最顶峰 网贷再也回不到巅峰时刻 但与此同时
  • 传统的项目经理可以担当Scrum Master吗

    原文链接作者 Amir Nasiri 一个习惯了传统项目管理方法的项目经理 可以在敏捷组织里担当ScrumMaster吗 这是一个很有意思的问题 也是所有项目经理在有朝一日面对敏捷方法 比如Scrum 的时候需要思考的问题 敏捷在落地实施时
  • QGis 二次开发教程(目录)

    目录 QGis 二次开发搭建 windows QGis QgsVectorLayer 图层加载 shp file矢量图层 QGis QgsVectorLayer 图层数据解析 获取经纬度集合和其他字段标量 QGis QgsVectorLay
  • Keras+CNN模型识别手写数字(mnist)详细分析

    CNN模型 CNN卷积神经网络 包含卷积层 卷积运算提取输入的不同特征 更多层的网络能从低级特征中迭代提取等复杂的特征 线性整流层 RELU 池化层 卷积后会得到维度很大的特征 将特征切成几个区域 取最大值或平均值 得到新的较小维度特征 全
  • tcp和udp,通信协议

    1 什么是tcp和udp 常用的网络通讯 浏览网页 软件聊天等等 都是基于tcp和udp传输的 2 tcp和udp的区别是什么 1 最大的区别是一个基于连接 一个基于非连接 举例说明 如果把人与人之间的通信比喻为进程之间的通信 写信和电话
  • 通俗易懂讲解区块链

    文章目录 一 区块链是什么 区块链的几个核心特点 1 去中心化 2 非常安全 3 不可篡改性 4 开放性 5 无第三方 6 匿名性 二 区块链与比特币的关系 三 通俗易懂解释区块链 1 民生领域 2 经济产业领域 3 政务领域 4 数字身份
  • B站马士兵python入门基础版详细笔记(6)

    前言 这篇文章是B站学习python入门基础班的视频的第五 六章内容 主要讲述的是列表 主要包括列表的创建 以及他的元素的增 删 查 改操作命令 一 列表的初始化 为什么要使用列表 列表就好比C语言中的数组 它可以在这个数组里面保存各种类型
  • 达梦数据库创建数据库实例、规划表空间

    1 创建数据库实例 1 1图形方式创建 到数据库安装目录 dm7 的 tool目录下 打开达梦数据库配置助手 dmdba localhost tool dbca sh 打开达梦数据库配置助手 选择创建数据库实例 点击 开始 如下图 创建数据
  • unity shader入门(一) 基本结构和变量声明

    文章目录 前言 Unity中shader相关的结构 什么是openGL和DirectX unity shader的分类 编写一个unity shader shader的基本结构 shader的property类型 在subshader中再次
  • Matlab 高斯信道下QPSK通带通信系统的简单仿真

    1 原理 2 仿真 3 总结反思 4 参考资料 1 原理 QPSK的具体内容请参考百度 QPSK的调制jie框图大致如下 QPSK信号可以采用正交调制的方式产生 如第一张图片的左半部分 I路信号与cos 信号相乘 Q 路信号与sin信号相乘