当前位置: 首页 > news >正文

Matlab使用Simulink仿真实现AM和BPSK信号的解调

前言

本篇实现了基于AM和BPSK调制的通信系统,采用Bernoulli Binary Generator生成随机二元序列,码元速率为0.5秒/个。AM调制使用Sine Wave模块生成载波,频率40Hz,相位π/2。BPSK调制通过Switch模块切换相位0和π的载波。信号传输通过AWGN信道添加高斯白噪声。AM解调采用包络检波,使用低通滤波器提取调制信号包络;BPSK解调通过相干解调,信号与载波相乘并滤波去除高频分量。通过Error Rate Calculation模块分析解调信号误码率,验证系统性能。

调制原理

包络检波

包络检波是一种常见的幅度调制(AM)信号解调技术。其基本原理是通过检测信号的包络来恢复原始调制信息。具体步骤如下:

  1. 接收信号:接收的AM信号可以表示为 eq?s%28t%29%20%3D%20%5BA+m%28t%29%5Dcos%28%5Comega%20_%7Bc%7D%20t%29,其中 A 是载波幅度, m(t) 是调制信号,eq?%5Comega%20_%7Bc%7D是载波频率。
  2. 整流:对接收的AM信号进行整流,通常使用二极管进行半波整流或全波整流,将信号的负半周期翻转为正半周期。
  3. 滤波:使用低通滤波器去除载波频率成分,保留调制信号的包络。低通滤波器的截止频率应设置在比载波频率低得多的范围内,只允许通过调制信号的频率成分。
  4. 输出:滤波后的信号即为原始的调制信号 m(t),完成解调过程。

相干解调

相干解调,也称同步解调,是一种用于相位调制(PM)和频率调制(FM)信号的解调技术。其原理是使用与发送端载波同频率、同相位的本地载波进行混频,从而提取调制信号。具体步骤如下:

  1. 接收信号:接收的调制信号可以表示为eq?s%28t%29%20%3D%20%5BA+m%28t%29%5Dcos%28%5Comega%20_%7Bc%7D%20t+%5Cphi%20%28t%29%29其中 A 是载波幅度, m(t) 是调制信号, eq?%5Comega%20_%7Bc%7D是载波频率, ϕ(t) 是相位变化。
  2. 本地载波:产生与发送端载波同频率、同相位的本地载波eq?cos%28%5Comega%20_%7Bc%7D%20t%29
  3. 混频:将接收信号与本地载波相乘,得到eq?s%28t%29cos%28%5Comega%20_%7Bc%7D%20t%29%20%3D%20%5BA+m%28t%29%5Dcos%28%5Comega%20_%7Bc%7D%20t+%5Cphi%20%28t%29%29cos%28%5Comega%20_%7Bc%7D%20t%29。利用三角函数乘积公式展开并简化:eq?s%28t%29cos%28%5Comega%20_%7Bc%7D%20t%29%20%3D%20%5Cfrac%7B1%7D%7B2%7D%5BA+m%28t%29%5D%5Bcos%282%5Comega%20_%7Bc%7D%20t+%5Cphi%20%28t%29%29+cos%28%5Cphi%20%28t%29%29%5D其中包含一个直流分量和一个高频分量。
  4. 滤波:使用低通滤波器去除高频分量,只保留直流分量和低频分量,得到eq?%5Cfrac%7BA+m%28t%29%7D%7B2%7Dcos%28%5Cphi%20%28t%29%29
  5. 恢复信号:如果载波相位完全匹配(即 ϕ(t)=0),则输出为eq?%5Cfrac%7BA+m%28t%29%7D%7B2%7D,经过放大和偏移调整即可恢复原始调制信号 m(t)。

仿真要求

使用Bernoulli Binary Generator模块生成一个随机的二元序列(0/1序列)。假设码元速率为0.5秒/个,意味着每0.5秒产生一个0或1。对随机二元序列(0/1 序列)进行 AM 和 BPSK 调制,载波为sin波形;

7dc1627eb0da42c3a7c80450b7f50821.png

利用高斯白噪声对信道进行模拟,传输调制后的AM和BPSK调制载波;对经过高斯白噪声的调制信号进行解调:AM 调制信号通过包络检 波方案进行解调;BPSK 调制信号通过相干解调方案进行解调;

载波频率为码元速率的 20 倍(即载波周期(时间)是码元周期(时间) 的 1/20)。即载波频率设置为40。

AM调制

载波生成使用 Sine Wave 模块,载波频率设置为40,相位设置为 pi / 2。采样时间均设置为1/1000。

e090d531dcaa474594f8cdc4b13f66df.png

时域信号波形,从上到下二元信号,载波信号,调制信号。 

684752dcaadf40f6a7b5adece30c0272.png

频域波形:

34e0136817bb4ce39757d8ef668dfec1.png

BPSK调制

可利用 Transport Delay 模块对载波(Sin)进行延迟,确保在二元序列为 0 时,相位变成了 pi,但这里我直接使用sine wave产生移相后的波形,也就是第一个相位为0第二个为pi。

这里使用了开关电路,可利用 Switch 模块实现开关电路(即根据 0/1 信源,输出不同相位的调制信号)

22ce9237ebfc44a1ba7b487a367eff72.png

时域信号波形,从上到下二元信号,原始载波信号,移相载波,调制信号。 

48040edd25834ebf914d7053c65adbb0.png

频域波形:

37217499f519449cbd21699399f86c20.png

另外一种实现方法,使用MATLAB Function模块

ec6f7a223b364925a4d48ca37135b22c.png

函数如下所示

function out = BPSK(bit, no_shift, shift)
if bit == 1out = no_shift;
elseout = shift;
end

实现效果也是一样的 

6dda2b2616624b35b6a13f92d7f792db.png

封装成子系统 

接下来,我们要将AM调制过程和BPSK调制过程进行封装,先删去不需要的部分,选择后创建子系统。

AM调制子系统

40aebc9b636d46f0a404873ec9f6bc22.png

BPSK调制子系统 

87c99e62fc624527abe3744d32511a44.png

在这里我们除了将调制信号作为输出之外,还要将原始的二元信号输出作为我们误码率的判断,BPSK因为要使用相干解调,所以还要把载波输出。

信号传输

这里直接将调制信号通过高斯白噪声信道,可以用 AWGN channel 这个模块,用SNR模式

0f65f115b41b406ebb9d56ee1cccc3fb.png

AM和BPSK解调 

AM解调----包络检波

根据包络检波的原理,解调时仅需要对信号进行上/下包络的提取,然后对信号进行低通滤波获得有用消息信号,取绝对值模块,你可利用 abs 模块对调制 AM 波形进行取绝对值,提取上包络; 或者,直接使用 Saturation 模块输出上/下包络的波形,上下限就设置为inf和0就可以了。

滤波器模块,你可利用 Analog Filter Design 设计 besself 低通滤波器,选择低通滤波器。

96acd92a2c1e431ba00be1714b4d40ff.png

BPSK解调----相干解调

相干解调时仅需要将信号与调制过程中的载波信号相乘,然后滤除高频分量即可。滤波器模块可以用上面一样的。

抽样判决

通过对信号的解调,观察信号可以发现解调信号波形与消息信号类似,但却不是标准的二元信号,需对信号进行抽样,设定阈值,判断输出标准的二元信号,可通过 switch 模块的功能实现抽样判决。

AM解调信号如下所示:

1d0ae81bedc743208f57419ad3bdbd78.png

可以看到阈值大概是在3.5左右,所以am的抽样判决可以这样设置:

38cfb229d98e43c5a48a47cdde093b5c.png

同理

bpsk的解调信号如下所示:

8d75bd8015d14ed28dba5e0774a1df05.png

阈值在0,我们可以这样设计:

bfea5072d68e486588ead77b9d3a7e65.png

错误率分析 

对解调信号和消息信号进行对比,分析两种调制方式的误码率。可直接 通过 Error Rate Calculation 模块将消息信号和解调进行进行码元周期的抽样对比,输出错误率;

在这里我们对 Receiver delay 和 communication delay 参数均不作改变,仅将输出类型变为端口输出(Output data 设置为 Port),然后用文本显示器(Display 模块),用于显示 Error Rate Calculation 模块的输出。

参考设计

b09256c5d61847a3a9a4722d79c89813.png

这里的原始二元信号与我们的解调信号有部分对不上,误码率很高大约在50%以上,后面经过时延之后就都能达到1%的误码率了。你可以通过记录信号,用数据查看器去看看二者直接的时间差距。

279900ce9545477b9f07053dc6decf90.png

 

 

 

 

相关文章:

  • 玄机——第二章 日志分析-apache日志分析 wp
  • 科研辅助工具
  • C# 下载文件2
  • 【机器学习300问】118、循环神经网络(RNN)的基本结构是怎样的?
  • FastAdmin后台开发框架 lang 任意文件读取漏洞复现
  • 如何衡量llm 数据集的多样性
  • Eigne库安装及使用教程
  • springboot 3.x 之 集成rabbitmq实现动态发送消息给不同的队列
  • 证明 几何分布 的期望和方差
  • 实现锚点链接点击tab跳转到指定位置 并且滚动鼠标顶部锚点的样式也跟随变化
  • 了解 XML HttpRequest 及其在 Web 开发中的应用
  • 什么是模型轻量化?如何自动进行模型轻量化?
  • Linux命令的语法和帮助系统
  • 海豚调度异常处理: 使用 arthas 在内存中删除启动失败的工作流
  • AMS(ActivityManagerService)源码解析2,Android应用是如何被启动的
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • cookie和session
  • CSS 专业技巧
  • es6(二):字符串的扩展
  • JavaScript中的对象个人分享
  • JS笔记四:作用域、变量(函数)提升
  • js数组之filter
  • leetcode386. Lexicographical Numbers
  • LintCode 31. partitionArray 数组划分
  • Shell编程
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 程序员最讨厌的9句话,你可有补充?
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 基于组件的设计工作流与界面抽象
  • 前端技术周刊 2019-02-11 Serverless
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端面试之CSS3新特性
  • 智能合约Solidity教程-事件和日志(一)
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • %check_box% in rails :coditions={:has_many , :through}
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (六)c52学习之旅-独立按键
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .form文件_SSM框架文件上传篇
  • .md即markdown文件的基本常用编写语法
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET CLR基本术语
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端