【MATLAB源码-第213期】基于matlab的16QAM调制解调系统软硬判决对比仿真,输出误码率曲线对比图。

操作环境:

MATLAB 2022a

1、算法描述

一、16QAM调制原理

在16QAM(16 Quadrature Amplitude Modulation)调制中,一个符号表示4个比特的数据。这种调制方式结合了幅度调制和相位调制,能够在相同的频谱资源下传输更多的数据。具体来说,16QAM星座图通常为4x4矩阵,每个信号点的实部和虚部的值分别取自集合{-3, -1, 1, 3},从而形成16个不同的信号点,每个点对应一个唯一的4比特二进制序列。

二、信号的生成与调制

在我们的系统中,首先生成一个长度为100000比特的随机二进制数据序列。然后,这个序列被分割成每组4个比特的数据块,每个数据块将映射到一个16QAM符号。具体的映射方式如下:

前两个比特决定符号的实部:如果前两个比特是11,则实部为+1;如果是10,则实部为+3;如果是01,则实部为-1;如果是00,则实部为-3。

后两个比特决定符号的虚部:如果后两个比特是11,则虚部为+1;如果是10,则虚部为+3;如果是01,则虚部为-1;如果是00,则虚部为-3。

通过这种方式,我们可以将二进制数据映射到16QAM符号上。

三、加入噪声

信号在实际传输中会受到噪声的影响。为了模拟这种情况,我们引入了AWGN(加性高斯白噪声)信道。在每个信噪比(SNR)水平下,我们将16QAM符号加上对应的高斯噪声,生成接收的符号。

四、软判决与硬判决

在接收到带有噪声的符号后,需要进行解调,将符号还原成二进制数据。解调方式主要有两种:软判决和硬判决。

软判决

软判决通过计算接收符号与星座图中各个信号点的欧氏距离,选择距离最近的信号点来确定原始数据。具体的步骤如下:

对于每个接收符号,分别计算其与星座图中所有信号点的距离。

根据距离选择最接近的信号点。

根据选择的信号点确定二进制数据。

这种方法利用了信号点之间的距离信息,可以更好地抵抗噪声,通常能获得较低的误码率。

硬判决

硬判决则是根据接收符号的实部和虚部分别进行直接判决,不考虑距离信息。具体的步骤如下:

对于每个接收符号,直接判断其实部和虚部的值。

根据实部和虚部的范围,确定对应的二进制数据。例如,实部大于等于0且小于2,则前两个比特为11;实部大于等于2,则前两个比特为10,等等。

这种方法简单直接,但在噪声较大时,误码率可能较高。

五、误码率比较

为了比较软判决和硬判决的性能,我们计算了不同信噪比(SNR)水平下的比特误码率(BER)。具体步骤如下:

对于每个SNR值,加入对应强度的噪声,生成接收符号。

分别使用软判决和硬判决进行解调,得到解调后的二进制数据。

将解调后的数据与原始数据进行比较,计算误码率。

实验结果表明,软判决在各个SNR水平下的误码率均低于硬判决,尤其在较低的SNR下,软判决的优势更加明显。

结论

通过以上描述,我们可以看到,16QAM调制方式通过结合幅度和相位调制,在同样的频谱资源下传输更多的数据。加入噪声后,通过软判决和硬判决两种方式进行解调。软判决利用了符号点之间的距离信息,能够更好地抵抗噪声,通常能获得较低的误码率;而硬判决则简单直接,但在噪声较大时,误码率较高。总体而言,软判决在抗噪声性能上优于硬判决。

2、仿真结果演示

3、关键代码展示

4、MATLAB 源码获取

点击下方原文链接获取

【MATLAB源码-第213期】基于matlab的16QAM调制解调系统软硬判决对比仿真,输出误码率曲线对比图。_16qam判决-CSDN博客https://blog.csdn.net/Koukesuki/article/details/139102399?ops_request_misc=%257B%2522request%255Fid%2522%253A%252274867796-8A0E-48C7-85D6-DA963389DB5F%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=74867796-8A0E-48C7-85D6-DA963389DB5F&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-139102399-null-null.nonecase&utm_term=213&spm=1018.2226.3001.4450

相关推荐
不爱学习的YY酱2 分钟前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
zongzi_4947 分钟前
二次封装的天气时间日历选择组件
开发语言·javascript·ecmascript
平头哥在等你13 分钟前
求一个3*3矩阵对角线元素之和
c语言·算法·矩阵
飞滕人生TYF16 分钟前
动态规划 详解
算法·动态规划
kikyo哎哟喂17 分钟前
Java 代理模式详解
java·开发语言·代理模式
_OLi_19 分钟前
力扣 LeetCode 106. 从中序与后序遍历序列构造二叉树(Day9:二叉树)
数据结构·算法·leetcode
duration~23 分钟前
SpringAOP模拟实现
java·开发语言
一条晒干的咸魚32 分钟前
【Web前端】实现基于 Promise 的 API:alarm API
开发语言·前端·javascript·api·promise
小A15932 分钟前
STM32完全学习——使用SysTick精确延时(阻塞式)
stm32·嵌入式硬件·学习
ahadee1 小时前
蓝桥杯每日真题 - 第18天
c语言·vscode·算法·蓝桥杯