基于Matlab----16QAM调制与解调
基于Matlab----16QAM调制与解调
- 一、题目
- 二、仿真要求
- 三、主要代码
- 3.1、16QAM调制
- 3.2、16QAM解调
- 3.3、全部代码
- 四、仿真结果
一、题目
16QAM调制解调
二、仿真要求
用基带等效的方式仿真16-QAM在AWGN信道下的误码率和误比特率性能,并与理论值相比较。
三、主要代码
3.1、16QAM调制
16QAM调制代码:
% 16QAM调制
send = zeros(1,L_symbol); % 预设发送信号
send_set = [-3+3j,-1+3j,1+3j,3+3j,...-3+1j,-1+1j,1+1j,3+1j,...-3-1j,-1-1j,1-1j,3-1j,...-3-3j,-1-3j,1-3j,3-3j]; % 发射端星座点
Es_avg = sum(abs(send_set).^2) / length(send_set);
N0 = Es_avg ./ EsN0;
for q = 1:L_symbolif (data(4*q-3:4*q) == [1,0,1,1])send(q) = send_set(1); % 1001 => -3+3jelseif (data(4*q-3:4*q) == [1,0,0,1])send(q) = send_set(2); % 1001 => -1+3jelseif (data(4*q-3:4*q) == [1,1,1,0])send(q) = send_set(3); % 1110 => +1+3jelseif (data(4*q-3:4*q) == [1,1,1,1])send(q) = send_set(4); % 1111 => +3+3jelseif (data(4*q-3:4*q) == [1,0,1,0])send(q) = send_set(5); % 1010 => -3+1jelseif (data(4*q-3:4*q) == [1,0,0,0])send(q) = send_set(6); % 1000 => -1+1jelseif (data(4*q-3:4*q) == [1,1,0,0])send(q) = send_set(7); % 1100 => +1+1jelseif (data(4*q-3:4*q) == [1,1,0,1])send(q) = send_set(8); % 1101 => +3+1jelseif (data(4*q-3:4*q) == [0,0,0,1])send(q) = send_set(9); % 0001 => -3-1jelseif (data(4*q-3:4*q) == [0,0,0,0])send(q) = send_set(10); % 0000 => -1-1jelseif (data(4*q-3:4*q) == [0,1,0,0])send(q) = send_set(11); % 0100 => +1-1jelseif (data(4*q-3:4*q) == [0,1,1,0])send(q) = send_set(12); % 0110 => +3-1jelseif (data(4*q-3:4*q) == [0,0,1,1])send(q) = send_set(13); % 0011 => -3-3jelseif (data(4*q-3:4*q) == [0,0,1,0])send(q) = send_set(14); % 0010 => -1-3jelseif (data(4*q-3:4*q) == [0,1,0,1])send(q) = send_set(15); % 0101 => +1-3jelsesend(q) = send_set(16); % 0111 => +3-3jend
end
3.2、16QAM解调
16QAM解调代码:
%16AQM解调
for q = 1:length(EbN0_dB)noise = sqrt(N0(q)/2)*randn(1,L_symbol) + 1j*sqrt(N0(q)/2)*randn(1,L_symbol); % AWGNreceive = (send + noise); % 接收信号detect = zeros(1,L_symbol); % 预置检测信号distance = zeros(1,M); % 解调:距离检测 for t = 1:L_symbolfor w = 1:Mdistance(w) = norm(receive(t) - send_set(w))^2; % 接收信号到所有星座点的距离endpos = find(distance == min(distance)); % 最小距离星座点的位置detect(t) = send_set(pos); % 解调后的符号if (detect(t) ~= send(t)) error(q) = error(q) + 1; % 统计错误符号数endendser(q) = error(q)/L_symbol; % 16QAM仿真误符号率tser_16QAM(q) = 3*qfunc(sqrt(4/5*EbN0(q)))*(1-3/4*qfunc(sqrt(4/5*EbN0(q)))); % 16QAM理论误符号率
end
3.3、全部代码
全部代码:
clc
clear
close all
% Title: 16QAM调制与解调 %
M = 16; % 调制阶数
L_data = 1000000; % 数据长度
L_symbol = L_data/log2(M); % 符号长度
data = round(rand(1,L_data)); % 原始数据
EbN0_dB = 0:14; % Eb/N0 dB形式
EbN0 = 10.^(EbN0_dB/10); % 每比特能量/噪声
EsN0 = log2(M) * EbN0; % 每符号能量/噪声
error = zeros(1,length(EbN0_dB)); % 预置错误符号个数
ser = zeros(1,length(EbN0_dB)); % 预置仿真误符号率
tser_16QAM = zeros(1,length(EbN0_dB)); % 预置16QAM理论误符号率
% 16QAM调制
send = zeros(1,L_symbol); % 预设发送信号
send_set = [-3+3j,-1+3j,1+3j,3+3j,...-3+1j,-1+1j,1+1j,3+1j,...-3-1j,-1-1j,1-1j,3-1j,...-3-3j,-1-3j,1-3j,3-3j]; % 发射端星座点
Es_avg = sum(abs(send_set).^2) / length(send_set);
N0 = Es_avg ./ EsN0;
for q = 1:L_symbolif (data(4*q-3:4*q) == [1,0,1,1])send(q) = send_set(1); % 1001 => -3+3jelseif (data(4*q-3:4*q) == [1,0,0,1])send(q) = send_set(2); % 1001 => -1+3jelseif (data(4*q-3:4*q) == [1,1,1,0])send(q) = send_set(3); % 1110 => +1+3jelseif (data(4*q-3:4*q) == [1,1,1,1])send(q) = send_set(4); % 1111 => +3+3jelseif (data(4*q-3:4*q) == [1,0,1,0])send(q) = send_set(5); % 1010 => -3+1jelseif (data(4*q-3:4*q) == [1,0,0,0])send(q) = send_set(6); % 1000 => -1+1jelseif (data(4*q-3:4*q) == [1,1,0,0])send(q) = send_set(7); % 1100 => +1+1jelseif (data(4*q-3:4*q) == [1,1,0,1])send(q) = send_set(8); % 1101 => +3+1jelseif (data(4*q-3:4*q) == [0,0,0,1])send(q) = send_set(9); % 0001 => -3-1jelseif (data(4*q-3:4*q) == [0,0,0,0])send(q) = send_set(10); % 0000 => -1-1jelseif (data(4*q-3:4*q) == [0,1,0,0])send(q) = send_set(11); % 0100 => +1-1jelseif (data(4*q-3:4*q) == [0,1,1,0])send(q) = send_set(12); % 0110 => +3-1jelseif (data(4*q-3:4*q) == [0,0,1,1])send(q) = send_set(13); % 0011 => -3-3jelseif (data(4*q-3:4*q) == [0,0,1,0])send(q) = send_set(14); % 0010 => -1-3jelseif (data(4*q-3:4*q) == [0,1,0,1])send(q) = send_set(15); % 0101 => +1-3jelsesend(q) = send_set(16); % 0111 => +3-3jend
end
%16AQM解调
for q = 1:length(EbN0_dB)noise = sqrt(N0(q)/2)*randn(1,L_symbol) + 1j*sqrt(N0(q)/2)*randn(1,L_symbol); % AWGNreceive = (send + noise); % 接收信号detect = zeros(1,L_symbol); % 预置检测信号distance = zeros(1,M); % 解调:距离检测 for t = 1:L_symbolfor w = 1:Mdistance(w) = norm(receive(t) - send_set(w))^2; % 接收信号到所有星座点的距离endpos = find(distance == min(distance)); % 最小距离星座点的位置detect(t) = send_set(pos); % 解调后的符号if (detect(t) ~= send(t)) error(q) = error(q) + 1; % 统计错误符号数endendser(q) = error(q)/L_symbol; % 16QAM仿真误符号率tser_16QAM(q) = 3*qfunc(sqrt(4/5*EbN0(q)))*(1-3/4*qfunc(sqrt(4/5*EbN0(q)))); % 16QAM理论误符号率
end
figure
semilogy(EbN0_dB,ser,'o',EbN0_dB,tser_16QAM,'b'); % 画图
grid on; % 坐标轴开启
axis([0 14 10^-5 10^-1]) % 限制作图范围
xlabel('Eb/N0 (dB)'); % 横坐标
ylabel('SER'); % 纵坐标
legend('16QAM仿真误符号率','16QAM理论误符号率'); % 图例
四、仿真结果
基于Matlab----16QAM调制与解调相关推荐
- 16QAM调制与解调-MATLAB基带仿真
16QAM调制与解调-MATLAB基带仿真 ---------------------------- 2020.05.14更新:---------------------------------- 有 ...
- 4QAM、16QAM 调制与解调仿真电路,观察并分析QAM星座图和误码率曲线【matlab代码】
源码: https://download.csdn.net/download/qq_44394952/86236776 要求 完成两种调制方式的调制解调:4QAM.16QAM (1)画出系统框图,搞清 ...
- dsb调制与解调的matlab,DSB调制与解调的MATLAB实现及.pptx
DSB信号的调制与解调 学生:王祥班级:通信111指导老师:文欢摘要本次课程设计用于实现模拟调制信号经DSB调制后的解调过程.信号的调制与解调在通信系统中具有重要的作用.调制过程实际上是一个频谱搬移的 ...
- dpsk调制解调 matlab,2DPSK调制与解调系统的MATLAB实现及性能分析.doc
2DPSK调制与解调系统的MATLAB实现及性能分析 2DPSK调制与解调系统的MATLAB实现及性能分析 摘 要:MATLAB集成环境下的Simulink仿真平台,设计一个2DPSK调制与解调系统. ...
- 2DPSK调制解调matlab,2DPSK调制与解调-matlab
<2DPSK调制与解调-matlab>由会员分享,可在线阅读,更多相关<2DPSK调制与解调-matlab(4页珍藏版)>请在人人文库网上搜索. 1.- 2DPSK 调制与解调 ...
- MATLAB BPSK调制与解调
实验原理 2PSK调制是一种数字调制技术,它将数字比特流转换为连续相位的正弦波信号.在2PSK调制中,每个数字比特被映射为一个离散的相位,通常为0度或180度,这也被称为"二进制相移键控& ...
- qam已调信号matlab相干解调,16qam调制解调matlab
(论文)题目 16QAM 的调制与解调 时间: 2012 年 12 月 19 日指导教师 主要研 究内容 基于 MatlabSimulink 的 16QAM 的调制与解调 研究方法 MatlabSim ...
- 【基于matlab的mqam调制与解调系统】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.正交幅度调制原理 二.QAM的解调和判决 三.16QAM调制解调系统的实现与仿真 总结 前言 提示:这里可以添加本 ...
- qam已调信号matlab相干解调,通信原理课程设计-基于MATLAB的M-QAM调制及相干解调的设计与仿真.doc...
通 信 原 理 课 程 设 计 报 告 题 目:基于MATLAB 的M-QAM调 制及相干解调的设计与仿真 班 级:通信工程 1411 姓 名: 成 绩: 日 期:2016 年 12 月 21 日 基 ...
最新文章
- undefined reference to 'typeinfo for android::Thread'
- RHEL6基础二十之RHEL文件挂载与卸载
- 三种复方门冬维甘滴眼液的抗菌能力比较
- 【译】使用Blazor构建桌面应用
- 《GPUPro》笔记
- windows连接远程桌面
- 《数值分析》学习笔记 ·001——计算方法的任务和特点
- “找不到网络路径”的检测方法及解决方案
- shell输出标准化xml
- [导入]VB程序中处理随机事件
- phpstom怎样导出数据库_详解mysql数据库sql优化技巧总结
- .net快速开发平台,learun敏捷开发框架
- 社区发现研究报告——基于信息熵和局部相关性的多标签传播重叠社区发现算法
- Beaglebone Black——开机自动运行程序
- html视频标签video旋转播放方向,video视频文件有方向怎么处理?
- Layui数据表格监听单元格编辑恢复原值
- Solidworks篮球建模
- 编译原理笔记(二)之词法分析
- STOP 0X0000007B蓝屏故障处理一例
- 趣味Python——如何帮女朋友快速抢票
热门文章
- android crash分析工具,Android Crash之Native Crash分析
- n维椭球体积公式_干掉公式 —— numpy 就该这么学
- JavaScript进阶高级
- Fiddler访问百度
- 调用 oauth2_奥利给,再也不怕面试官问我OAuth 2.0授权了
- 最短路dijkstra算法详解_图论系列开始填坑--Dijkstra,单源最短路
- 消息队列与rabbitMQ的各种问题
- html块级页面居中,几个并排div的CSS / HTML居中
- mysql tcmalloc jemalloc_tcmalloc jemalloc 和ptmalloc 对比
- python爬取热门新闻每日排行_用python查看百度搜索中今日热点事件排行榜