% 16QAM误符号率仿真
% 参考文献:数字通信(第四版 proakis)P202
clear all;
close all;
clc;
%----------------------------------------------%
% 参数设置
%----------------------------------------------%
num= 1e6;
Rb = 100; %比特速率,bps
fs = Rb;
Ts = 1/fs;
Pm = zeros(1,29);
Pm_symbol = zeros(1,29);
Pm_bit = zeros(1,29);
ser = zeros(1,29);
ber = zeros(1,29);
for Eb_N0 = 0:0.5:14 %dB,信噪比递增,便于作图
data_src = randint(1,num);
a = data_src(1:4:num-3);
b = data_src(2:4:num-2);
c = data_src(3:4:num-1);
d = data_src(4:4:num);
I = zeros(1,num/4);
Q = zeros(1,num/4);
for index = 1:num/4%星座点映射
switch a(index)*2^3+b(index)*2^2+c(index)*2^1+d(index)*2^0
case 0
I(index) = 3;
Q(index) = 3;
case 1
I(index) = 1;
Q(index) = 3;
case 2
I(index) = 3;
Q(index) = 1;
case 3
I(index) = 1;
Q(index) = 1;
case 4
I(index) = -3;
Q(index) = 3;
case 5
I(index) = -1;
Q(index) = 3;
case 6
I(index) = -3;
Q(index) = 1;
case 7
I(index) = -1;
Q(index) = 1;
case 8
I(index) = 3;
Q(index) = -3;
case 9
I(index) = 1;
Q(index) = -3;
case 10
I(index) = 3;
Q(index) = -1;
case 11
I(index) = 1;
Q(index) = -1;
case 12
I(index) = -3;
Q(index) = -3;
case 13
I(index) = -1;
Q(index) = -3;
case 14
I(index) = -3;
Q(index) = -1;
case 15
I(index) = -1;
Q(index) = -1;
otherwise
end
end
mapped_signal=I+1j.*Q;
Es_N0 = Eb_N0 + 6.02;%16QAM Es_N0与Eb_N0转换
SNR = Es_N0;
mapped_signal_awgn = awgn(mapped_signal,SNR,10);
rec_I = real(mapped_signal_awgn);
rec_Q = imag(mapped_signal_awgn);
demod_I = zeros(1,num/4);
demod_Q = zeros(1,num/4);
demod_a = zeros(1,num/4);
demod_b = zeros(1,num/4);
demod_c = zeros(1,num/4);
demod_d = zeros(1,num/4);
for index = 1:num/4%硬判决
if rec_I(index)>=2 && rec_Q(index)>=2
demod_I(index) = 3;
demod_Q(index) = 3;
demod_a(index) = 0;
demod_b(index) = 0;
demod_c(index) = 0;
demod_d(index) = 0;
elseif rec_I(index)>=2 && rec_Q(index)<2 && rec_Q(index)>=0
demod_I(index) = 3;
demod_Q(index) = 1;
demod_a(index) = 0;
demod_b(index) = 0;
demod_c(index) = 1;
demod_d(index) = 0;
elseif rec_I(index)>=2 && rec_Q(index)<-2
demod_I(index) = 3;
demod_Q(index) = -3;
demod_a(index) = 1;
demod_b(index) = 0;
demod_c(index) = 0;
demod_d(index) = 0;
elseif rec_I(index)>=2 && rec_Q(index)<0 && rec_Q(index)>=-2
demod_I(index) = 3;
demod_Q(index) = -1;
demod_a(index) = 1;
demod_b(index) = 0;
demod_c(index) = 1;
demod_d(index) = 0;
elseif rec_I(index)>=0 && rec_I(index)< 2 && rec_Q(index)>=2
demod_I(index) = 1;
demod_Q(index) = 3;
demod_a(index) = 0;
demod_b(index) = 0;
demod_c(index) = 0;
demod_d(index) = 1;
elseif rec_I(index)>=0 && rec_I(index)< 2 && rec_Q(index)<2 && rec_Q(index)>=0
demod_I(index) = 1;
demod_Q(index) = 1;
demod_a(index) = 0;
demod_b(index) = 0;
demod_c(index) = 1;
demod_d(index) = 1;
elseif rec_I(index)>=0 && rec_I(index)< 2 && rec_Q(index)<-2
demod_I(index) = 1;
demod_Q(index) = -3;
demod_a(index) = 1;
demod_b(index) = 0;
demod_c(index) = 0;
demod_d(index) = 1;
elseif rec_I(index)>=0 && rec_I(index)< 2 && rec_Q(index)>=-2 && rec_Q(index)<0
demod_I(index) = 1;
demod_Q(index) = -1;
demod_a(index) = 1;
demod_b(index) = 0;
demod_c(index) = 1;
demod_d(index) = 1;
elseif rec_I(index)<-2 && rec_Q(index)>=2
demod_I(index) = -3;
demod_Q(index) = 3;
demod_a(index) = 0;
demod_b(index) = 1;
demod_c(index) = 0;
demod_d(index) = 0;
elseif rec_I(index)<-2 && rec_Q(index)<2 && rec_Q(index)>=0
demod_I(index) = -3;
demod_Q(index) = 1;
demod_a(index) = 0;
demod_b(index) = 1;
demod_c(index) = 1;
demod_d(index) = 0;
elseif rec_I(index)<-2 && rec_Q(index)<-2
demod_I(index) = -3;
demod_Q(index) = -3;
demod_a(index) = 1;
demod_b(index) = 1;
demod_c(index) = 0;
demod_d(index) = 0;
elseif rec_I(index)<-2 && rec_Q(index)<0 && rec_Q(index)>=-2
demod_I(index) = -3;
demod_Q(index) = -1;
demod_a(index) = 1;
demod_b(index) = 1;
demod_c(index) = 1;
demod_d(index) = 0;
elseif rec_I(index)>=-2 && rec_I(index)<0 && rec_Q(index)>=2
demod_I(index) = -1;
demod_Q(index) = 3;
demod_a(index) = 0;
demod_b(index) = 1;
demod_c(index) = 0;
demod_d(index) = 1;
elseif rec_I(index)>=-2 && rec_I(index)<0 && rec_Q(index)<2 && rec_Q(index)>=0
demod_I(index) = -1;
demod_Q(index) = 1;
demod_a(index) = 0;
demod_b(index) = 1;
demod_c(index) = 1;
demod_d(index) = 1;
elseif rec_I(index)>=-2 && rec_I(index)<0 && rec_Q(index)<-2
demod_I(index) = -1;
demod_Q(index) = -3;
demod_a(index) = 1;
demod_b(index) = 1;
demod_c(index) = 0;
demod_d(index) = 1;
elseif rec_I(index)>=-2 && rec_I(index)<0 && rec_Q(index)<0 && rec_Q(index)>=-2
demod_I(index) = -1;
demod_Q(index) = -1;
demod_a(index) = 1;
demod_b(index) = 1;
demod_c(index) = 1;
demod_d(index) = 1;
end
end
data_rec(1:4:num-3) = demod_a;
data_rec(2:4:num-2) = demod_b;
data_rec(3:4:num-1) = demod_c;
data_rec(4:4:num) = demod_d;
%------------------计算理论值----------------%
M = 16;
Eb_N0_actual = 10^(Eb_N0/10);
a = sqrt(3*log2(M)*Eb_N0_actual/(2*(M-1))) ;
Q = 0.5*erfc(a);
Pm(Eb_N0*2+1) = 2*(1-1/sqrt(M))*Q;
Pm_symbol(Eb_N0*2+1) = 1 - (1-Pm(Eb_N0*2+1))^2;%计算理论误符号率
Pm_bit(Eb_N0*2+1) = Pm_symbol(Eb_N0*2+1)/4;%理论误码率公式未找到,近似计算理论误比特率,高信噪比下较准,低信噪比下比真值小
%------------------计算实际误符号率----------------%
demod_signal = demod_I+1j*demod_Q;
cnt = 0;
for index = 1:num/4
if mapped_signal(index) ~= demod_signal(index)
cnt = cnt + 1;
end
end
ser(Eb_N0*2+1) = cnt/(num/4);%得到实际误符号率
%------------------计算实际误比特率----------------%
cnt1 = 0;
for index = 1:num
if data_rec(index) ~= data_src(index)
cnt1 = cnt1 + 1;
end
end
ber(Eb_N0*2+1) = cnt1/num;%得到实际误符号率
end
figure;
semilogy((0:0.5:14),ser,'-*b');grid on;
hold on;
semilogy((0:0.5:14),Pm_symbol,'-+r');grid on;%作图比较
title('误符号率');
figure;
semilogy((0:0.5:14),ber,'-*b');grid on;
hold on;
semilogy((0:0.5:14),Pm_bit,'-+r');grid on;%作图比较
title('误比特率');
没有合适的资源?快使用搜索试试~ 我知道了~
【误码率仿真】基于matlab 16QAM调制误码率对比(含误符号率 误比特率)【含Matlab源码 4529期】.zip
共4个文件
m:2个
jpg:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 165 浏览量
2024-05-20
07:55:14
上传
评论
收藏 49KB ZIP 举报
温馨提示
CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信
资源推荐
资源详情
资源评论
收起资源包目录
【误码率仿真】基于matlab 16QAM调制误码率对比(含误符号率 误比特率)【含Matlab源码 4529期】.zip (4个子文件)
【误码率仿真】基于matlab 16QAM调制误码率对比(含误符号率 误比特率)【含Matlab源码 4529期】
运行结果1.jpg 48KB
main.m 7KB
randint.m 4KB
运行结果2.jpg 53KB
共 4 条
- 1
资源评论
海神之光
- 粉丝: 3w+
- 资源: 2116
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功