基于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调制与解调相关推荐

  1. 16QAM调制与解调-MATLAB基带仿真

    16QAM调制与解调-MATLAB基带仿真 ---------------------------- 2020.05.14更新:---------------------------------- 有 ...

  2. 4QAM、16QAM 调制与解调仿真电路,观察并分析QAM星座图和误码率曲线【matlab代码】

    源码: https://download.csdn.net/download/qq_44394952/86236776 要求 完成两种调制方式的调制解调:4QAM.16QAM (1)画出系统框图,搞清 ...

  3. dsb调制与解调的matlab,DSB调制与解调的MATLAB实现及.pptx

    DSB信号的调制与解调 学生:王祥班级:通信111指导老师:文欢摘要本次课程设计用于实现模拟调制信号经DSB调制后的解调过程.信号的调制与解调在通信系统中具有重要的作用.调制过程实际上是一个频谱搬移的 ...

  4. dpsk调制解调 matlab,2DPSK调制与解调系统的MATLAB实现及性能分析.doc

    2DPSK调制与解调系统的MATLAB实现及性能分析 2DPSK调制与解调系统的MATLAB实现及性能分析 摘 要:MATLAB集成环境下的Simulink仿真平台,设计一个2DPSK调制与解调系统. ...

  5. 2DPSK调制解调matlab,2DPSK调制与解调-matlab

    <2DPSK调制与解调-matlab>由会员分享,可在线阅读,更多相关<2DPSK调制与解调-matlab(4页珍藏版)>请在人人文库网上搜索. 1.- 2DPSK 调制与解调 ...

  6. MATLAB BPSK调制与解调

     实验原理 2PSK调制是一种数字调制技术,它将数字比特流转换为连续相位的正弦波信号.在2PSK调制中,每个数字比特被映射为一个离散的相位,通常为0度或180度,这也被称为"二进制相移键控& ...

  7. qam已调信号matlab相干解调,16qam调制解调matlab

    (论文)题目 16QAM 的调制与解调 时间: 2012 年 12 月 19 日指导教师 主要研 究内容 基于 MatlabSimulink 的 16QAM 的调制与解调 研究方法 MatlabSim ...

  8. 【基于matlab的mqam调制与解调系统】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.正交幅度调制原理 二.QAM的解调和判决 三.16QAM调制解调系统的实现与仿真 总结 前言 提示:这里可以添加本 ...

  9. qam已调信号matlab相干解调,通信原理课程设计-基于MATLAB的M-QAM调制及相干解调的设计与仿真.doc...

    通 信 原 理 课 程 设 计 报 告 题 目:基于MATLAB 的M-QAM调 制及相干解调的设计与仿真 班 级:通信工程 1411 姓 名: 成 绩: 日 期:2016 年 12 月 21 日 基 ...

最新文章

  1. undefined reference to 'typeinfo for android::Thread'
  2. RHEL6基础二十之RHEL文件挂载与卸载
  3. 三种复方门冬维甘滴眼液的抗菌能力比较
  4. 【译】使用Blazor构建桌面应用
  5. 《GPUPro》笔记
  6. windows连接远程桌面
  7. 《数值分析》学习笔记 ·001——计算方法的任务和特点
  8. “找不到网络路径”的检测方法及解决方案
  9. shell输出标准化xml
  10. [导入]VB程序中处理随机事件
  11. phpstom怎样导出数据库_详解mysql数据库sql优化技巧总结
  12. .net快速开发平台,learun敏捷开发框架
  13. 社区发现研究报告——基于信息熵和局部相关性的多标签传播重叠社区发现算法
  14. Beaglebone Black——开机自动运行程序
  15. html视频标签video旋转播放方向,video视频文件有方向怎么处理?
  16. Layui数据表格监听单元格编辑恢复原值
  17. Solidworks篮球建模
  18. 编译原理笔记(二)之词法分析
  19. STOP 0X0000007B蓝屏故障处理一例
  20. 趣味Python——如何帮女朋友快速抢票

热门文章

  1. android crash分析工具,Android Crash之Native Crash分析
  2. n维椭球体积公式_干掉公式 —— numpy 就该这么学
  3. JavaScript进阶高级
  4. Fiddler访问百度
  5. 调用 oauth2_奥利给,再也不怕面试官问我OAuth 2.0授权了
  6. 最短路dijkstra算法详解_图论系列开始填坑--Dijkstra,单源最短路
  7. 消息队列与rabbitMQ的各种问题
  8. html块级页面居中,几个并排div的CSS / HTML居中
  9. mysql tcmalloc jemalloc_tcmalloc jemalloc 和ptmalloc 对比
  10. python爬取热门新闻每日排行_用python查看百度搜索中今日热点事件排行榜