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 7.10.0 学生版中似乎找不到 csaps()

    我有一些代码使用csaps Matlab的三次平滑样条拟合函数 http www mathworks com help toolbox curvefit csaps html我想将其提供给使用 MATLAB 7 10 0 R2010a 的学
  • MATLAB 是否已有 YAML 库/解析器?

    我想使用 YAML 跨多种语言交流一些数据 将其视为 与语言无关的序列化 其中一种语言是 MATLAB 但我似乎找不到该语言的 YAML 库 我在 Google 上检查了 matlab yaml 和 matlab yaml parse 似乎
  • 图像增强 - 从书写中清除给定图像

    我需要清理这张照片 删除 清理我 的字样并使其变亮 作为图像处理课程作业的一部分 我可能会使用 matlab 函数 ginput 来查找图像中的特定点 当然 在脚本中您应该对所需的坐标进行硬编码 您可以使用 conv2 fft2 ifft2
  • 如何在 R 或 MATLAB 中为散点图创建阴影误差条“框”

    我想在 R 或 MATLAB 中创建一个简单的散点图 涉及两个变量 x 和 y 它们有与之相关的错误 epsilon x 和 epsilon y 然而 我不是添加误差线 而是希望在每个 x y 对周围创建一个 阴影框 其中框的高度范围从 y
  • 将 3d 矩阵重塑为 2d 矩阵

    我有一个 3d 矩阵 n by m by t 在 MATLAB 中表示n by m一段时间内网格中的测量值 我想要一个二维矩阵 其中空间信息消失了 只有n m随着时间的推移测量t剩下 即 n m by t 我怎样才能做到这一点 你需要命令r
  • 将组合字符串和数字输入的元胞数组写入文本文件

    考虑以下 DateTime 2007 01 01 00 00 2007 02 01 00 00 2007 03 01 00 00 Headers Datetime Data Dat 100 200 300 Data DateTime num
  • 如何从绘图处理程序中绘图?

    我有绘图的处理程序或图形的处理程序 例子 h plot 1 0 2 10 xx get h xx DisplayName Annotation 1x1 handle Color 0 0 1 LineStyle LineWidth 0 500
  • 在 MATLAB 中定义其他中缀运算符

    有没有办法在 MATLAB 中定义额外的中缀运算符 具体来说 我想定义两个中缀运算符 gt and lt gt 这些符号是理想的 但如果需要 它可以是单个字符 它调用函数implies and iff以同样的方式 calls and and
  • 作为动画的八度情节点

    我有以下八度脚本 TOTAL POINTS 100 figure 1 for i 1 TOTAL POINTS randX rand 1 randY rand 1 scatter randX randY hold on endfor 当我运
  • 如何在Matlab中将世界坐标转换为像素索引

    我有 512x512x313 体积的 dicom 图像 并且我有一个以世界坐标表示的点 57 7475 63 4184 83 1515 我如何在 Matlab 中获得该世界坐标的相应像素坐标 我不想戳破你的幻想 但你所要求的是不可能的 我能
  • 从 Java 运行 MATLAB 函数

    我在 MATLAB 中有一个 m 文件 我想从 Java 调用该文件 并以字符串或 Java 中的任何形式获取解决方案 这听起来很简单 但由于某种原因我无法让它发挥作用 我试过这个 matlab nosplash wait nodeskto
  • 使用 R2010b 中的符号工具箱来求解和/或 linsolve

    我前几天问了一个问题here https stackoverflow com questions 20317038 matlab linear congruence solver that supports a non prime modu
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • Matlab颜色检测

    我试图一致地检测同一场景的图像之间的某种颜色 这个想法是根据颜色配置文件识别一组对象 因此 例如 如果给我一个带有绿色球的场景 并且我选择绿色作为我的调色板的一部分 我想要一个具有反映它检测到球的矩阵的函数 任何人都可以为这个项目推荐一些
  • 动态调整自定义刻度数

    Taking SO 的一个例子 https stackoverflow com a 7139485 97160 我想根据当前视图调整轴刻度 这是默认行为 除非设置自定义的刻度数 下图展示了由此产生的行为 左侧是默认行为 右侧是带有自定义刻度
  • 如何为已编译的 MATLAB 创建安装程序并要求用户接受我们的许可条款?

    我正在 MATLAB 中编写程序分发给 Windows 用户 我使用 MATLAB 编译器和 MATLAB r2014a 版本来创建程序 我可以使用 MATLAB 应用程序编译器创建 Windows 安装程序 并且它的工作效果可以接受 但是
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • 在 matlab 代码中使用 dll 文件

    我需要使用 Matlab 中由 dll 文件定义的函数 我有一个例子 那个家伙将 dll 转换为 mexw32 文件 但我知道我是如何做到这一点的 我尝试使用加载库但它没有创建任何文件 我怎样才能做到这一点 loadlibrary http
  • 如何使用Matlab将数据保存到Excel表格中?

    我想将数据以表格形式保存在 Excel 工作表中 它应该看起来像 Name Age R no Gpa Adnan 24 18 3 55 Ahmad 22 12 3 44 Usman 23 22 3 00 每次当我执行我的文件时类数据 m 下
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt

随机推荐

  • 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信号相乘