• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

误码率仿真QPSK+16QAM调制仿真含误码率含Matlab代码

武飞扬头像
matlab科研助手
帮助1

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

  1. 调制方式:QPSK和16QAM是两种常见的调制方式,您需要确定您要使用的调制方式。
  2. 信道模型:通信信道的选择对误码率有很大影响,常见的信道模型有AWGN信道和Rayleigh衰落信道等。
  3. 编码方案:误码率仿真通常需要使用纠错编码方案来提高系统的可靠性,您可以选择使用卷积码、LDPC码等。

一般的误码率仿真流程如下:

  1. 生成调制信号:根据所选的调制方式,生成需要传输的数据比特序列,并进行对应的调制操作。
  2. 加入噪声:根据选择的信道模型,为调制信号添加合适的噪声,通常使用高斯白噪声(AWGN)。
  3. 解调与译码:将接收到的信号进行解调操作,并对解调后的数据进行译码操作,以还原原始数据比特序列。
  4. 计算误码率:将解码后的数据比特序列与发送的原始数据比特序列进行比对,计算误码率。
  5. 重复以上步骤多次:为了提高仿真的准确性,通常需要多次重复以上步骤,并取平均值作为最终的误码率结果。

⛄ 部分代码

% BER-(Eb/N0)性能曲线:
% 参数处理
EbNo_BER_DB = 0:0.1:60;
gamma_BER_DB = EbNo_BER_DB 10*log10(2);
EbNo_BER = 10.^(EbNo_BER_DB/10);
gamma_BER = 10.^(gamma_BER_DB/10);

% QPSK理论误比特率:
PB_QPSK = IA(1,gamma_BER); % QPSK理论误比特率------BER-(Eb/N0)曲线
semilogy(EbNo_BER_DB,PB_QPSK);
axis([0,60,1e-6,1])
grid on
xlabel('Eb/No');
ylabel('BER');
hold on

% QPSK实际误比特率:
BitSeq_QPSK_BER=randi([0,1],[5120000,2]); % 生成比特序列
SymbolSeq_QPSK_BER=bi2de(BitSeq_QPSK_BER,'left-msb'); %比特序列转化为符号序列
ModulatedSeq_QPSK_BER=qammod(SymbolSeq_QPSK_BER,4); %调制后的信号序列

H_QPSK_BER = 1/sqrt(2)*(randn(length(SymbolSeq_QPSK_BER),1)   1i*randn(length(SymbolSeq_QPSK_BER),1)); % Rayleigh channel
chanOut_QPSK_BER = H_QPSK_BER.*ModulatedSeq_QPSK_BER;

BER_QPSK = zeros([1,11]);
for ebno_qpsk=0:5:50
    AWGNChannel = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (Eb/No)','EbNo',ebno_qpsk,'BitsPerSymbol',2,'SignalPower',mean(abs(chanOut_QPSK_BER).^2));
    outsignal_QPSK_BER=AWGNChannel(chanOut_QPSK_BER);
    yHat_QPSK_BER = outsignal_QPSK_BER./H_QPSK_BER;
    DemodSeq_QPSK_BER = qamdemod(yHat_QPSK_BER,4);
    Rec_QPSK_BER=de2bi(DemodSeq_QPSK_BER,'left-msb');
    [~,BER_QPSK(ebno_qpsk/5 1)]=biterr(Rec_QPSK_BER,BitSeq_QPSK_BER);
end
scatter(0:5:50,BER_QPSK);
hold on

% 16QAM理论误比特率:
PB_16QAM = Theory_er(EbNo_BER);% 16QAM理论误比特率------BER-(Eb/N0)曲线
semilogy(EbNo_BER_DB,PB_16QAM);
hold on

% 16QAM实际误比特率:
BitSeq_16QAM_BER=randi([0,1],[5120000,4]); % 生成比特序列
SymbolSeq_16QAM_BER=bi2de(BitSeq_16QAM_BER,'left-msb'); %比特序列转化为符号序列
ModulatedSeq_16QAM_BER=qammod(SymbolSeq_16QAM_BER,16); %调制后的信号序列

H_16QAM_BER = 1/sqrt(2)*(randn(length(SymbolSeq_16QAM_BER),1)   1i*randn(length(SymbolSeq_16QAM_BER),1)); % Rayleigh channel
chanOut_16QAM_BER = H_16QAM_BER.*ModulatedSeq_16QAM_BER;

BER_16QAM = zeros([1,12]);
for ebno_16qam = 0:5:55
    AWGNChannel = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (Eb/No)','EbNo',ebno_16qam,'BitsPerSymbol',4,'SignalPower',mean(abs(chanOut_16QAM_BER).^2));
    outsignal_16QAM_BER=AWGNChannel(chanOut_16QAM_BER);
    yHat_16QAM_BER = outsignal_16QAM_BER./H_16QAM_BER;
    DemodSeq_16QAM_BER = qamdemod(yHat_16QAM_BER,16);
    Rec_16QAM_BER=de2bi(DemodSeq_16QAM_BER,'left-msb');
    [~,BER_16QAM(ebno_16qam/5 1)]=biterr(Rec_16QAM_BER,BitSeq_16QAM_BER);
end
scatter(0:5:55,BER_16QAM);
legend('QPSK theoretical','QPSK simulated','16QAM theoretical','16QAM simulated');
title('Rayleigh')

figure
%%
% SER-(Es/N0) 性能曲线:
% 参数处理
gamma_SER_DB = 0:0.1:70;
gamma_SER = 10.^(gamma_SER_DB/10);

% QPSK理论误符号率:
PS_QPSK = 2*IA(1,gamma_SER)-I_A(1,gamma_SER); % QPSK理论误符号率------SER-(Es/N0)曲线
semilogy(gamma_SER_DB,PS_QPSK);
axis([0,70,1e-6,1])
grid on
xlabel('Es/No');
ylabel('SER');
hold on

% QPSK实际误符号率:
BitSeq_QPSK_SER=randi([0,1],[5120000,2]); % 生成比特序列
SymbolSeq_QPSK_SER=bi2de(BitSeq_QPSK_SER,'left-msb'); %比特序列转化为符号序列
ModulatedSeq_QPSK_SER=qammod(SymbolSeq_QPSK_SER,4); %调制后的信号序列

H_QPSK_SER = 1/sqrt(2)*(randn(length(SymbolSeq_QPSK_SER),1)   1i*randn(length(SymbolSeq_QPSK_SER),1)); % Rayleigh channel
chanOut_QPSK_SER = H_QPSK_SER.*ModulatedSeq_QPSK_SER;

SER_QPSK = zeros([1,12]);
for esno_qpsk=0:5:55
    AWGNChannel = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (Es/No)','EsNo',esno_qpsk,'SignalPower',mean(abs(chanOut_QPSK_SER).^2));
    outsignal_QPSK_SER=AWGNChannel(chanOut_QPSK_SER);
    yHat_QPSK_SER = outsignal_QPSK_SER./H_QPSK_SER;
    DemodSeq_QPSK_SER = qamdemod(yHat_QPSK_SER,4);
    [~,SER_QPSK(esno_qpsk/5 1)]=symerr(DemodSeq_QPSK_SER,SymbolSeq_QPSK_SER);
end
scatter(0:5:55,SER_QPSK);
hold on

% 16QAM理论误符号率:
PS_16QAM = 3*IA(sqrt(1/5),gamma_SER)-9/4*I_A(sqrt(1/5),gamma_SER);
semilogy(gamma_SER_DB,PS_16QAM);
hold on

% 16QAM实际误符号率:
BitSeq_16QAM_SER=randi([0,1],[5120000,4]); % 生成比特序列
SymbolSeq_16QAM_SER=bi2de(BitSeq_16QAM_SER,'left-msb'); %比特序列转化为符号序列
ModulatedSeq_16QAM_SER=qammod(SymbolSeq_16QAM_SER,16); %调制后的信号序列

H_16QAM_SER = 1/sqrt(2)*(randn(length(SymbolSeq_16QAM_SER),1)   1i*randn(length(SymbolSeq_16QAM_SER),1)); % Rayleigh channel
chanOut_16QAM_SER = H_16QAM_SER.*ModulatedSeq_16QAM_SER;

SER_16QAM = zeros([1,14]);
for esno_16qam=0:5:65
    AWGNChannel = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (Es/No)','EsNo',esno_16qam,'SignalPower',mean(abs(chanOut_16QAM_SER).^2));
    outsignal_16QAM_SER=AWGNChannel(chanOut_16QAM_SER);
    yHat_16QAM_SER = outsignal_16QAM_SER./H_16QAM_SER;
    DemodSeq_16QAM_SER = qamdemod(yHat_16QAM_SER,16);
    [~,SER_16QAM(esno_16qam/5 1)]=symerr(DemodSeq_16QAM_SER,SymbolSeq_16QAM_SER);
end
scatter(0:5:65,SER_16QAM);
hold on
legend('QPSK theoretical','QPSK simulated','16QAM theoretical','16QAM simulated');
title('Rayleigh')

function [res] = Theory_er(EBNO)
% 计算16QAM理论误码率函数
% 输入:EBNO
% 输出:16QAM理论误码率
% 调用辅助函数 pbk(k,EBNO)
% pbk进行了改动,其中调用了IA函数
    res=0;
    for k=1:1:2
        res=res pbk(k,EBNO);
    end
    res=res/2;
end

function [res] = pbk(K,EBNO)
% 辅助函数
    res = 0;
    for i=0:1:((1-2^(-K))*4-1)
        a=(-1)^floor((2^(K-1)*i/16));
        b=2^(K-1)-floor(2^(K-1)*i/4 0.5);
        c=IA((2*i 1)*sqrt(1/5),4*EBNO);
        res = res a*b*c;
    end
    res = res/2;
end

function [res] = IA(a,gamma)
% 函数说明:进行Q函数和I(a)函数的转换
% 输入参数:a:Q函数中sqrt(gamma)的系数;gamma:Es/No
% 输出:I(a)
    res = 0.5-0.5*sqrt(a*a*gamma./(2 a*a*gamma));
end

function [res] = I_A(a,gamma)
% 函数说明:进行Q^2函数和I'(a)函数的转换
% 输入参数:a:Q函数中sqrt(gamma)的系数;gamma:Es/No
% 输出:I'(a)
    a = (2 a*a*gamma)./(a*a*gamma);
    temp = sqrt(a);
    res = 0.25*(1-4/pi*atan(temp)./temp);
end

⛄ 运行结果

学新通

学新通

⛄ 参考文献

[1] 马启成.QPSK调制下基于均值判决的误码率仿真[J].中国新通信, 2020, 22(19):2.

[2] 赵忠华,杨晓梅.GMSK调制解调的MATLAB仿真与误码率分析[J].新疆师范大学学报:自然科学版, 2015, 34(2):6.DOI:10.3969/j.issn.1008-9659.2015.02.013.

[3] 张起晶,孙桂芝.基于QPSK调制的扩频系统MATLAB仿真[J].现代科学仪器, 2014(1):3.DOI:CNKI:SUN:XDYQ.0.2014-01-017.

[4] 谭清元,潘学文.QPSK和16QAM调制下MIMO-OFDM系统Matlab仿真实现[J].电脑知识与技术:学术版, 2019, 15(12):2.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料

🍅 仿真咨询

1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面

卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

2.图像处理方面

图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

3 路径规划方面

旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

4 无人机应用方面

无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

5 无线传感器定位及布局方面

传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

6 信号处理方面

信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

7 电力系统方面

微电网优化、无功优化、配电网重构、储能配置

8 元胞自动机方面

交通流 人群疏散 病毒扩散 晶体生长

9 雷达方面

卡尔曼滤波跟踪、航迹关联、航迹融合

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiaegaj
系列文章
更多 icon
同类精品
更多 icon
继续加载